diff options
author | Inkyun Kil <inkyun.kil@samsung.com> | 2020-03-23 10:48:57 +0900 |
---|---|---|
committer | Inkyun Kil <inkyun.kil@samsung.com> | 2020-03-26 16:52:42 +0900 |
commit | e8ff7390e4278410f8b20e56001c376ff06b67b7 (patch) | |
tree | 023ecf3b3a47a3a7178b9e0b57a8b253768df395 | |
parent | 97180bd9a46db76b4862abac9a60497f9f30d8e2 (diff) | |
download | application-e8ff7390e4278410f8b20e56001c376ff06b67b7.tar.gz application-e8ff7390e4278410f8b20e56001c376ff06b67b7.tar.bz2 application-e8ff7390e4278410f8b20e56001c376ff06b67b7.zip |
Changes registering alarm tick from relative to absolute
Change-Id: I6fbe54cc549f5b131fced0fafdd7bb49464389db
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
-rw-r--r-- | appcore_ui_app_ambient/src/ui_app_ambient.c | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/appcore_ui_app_ambient/src/ui_app_ambient.c b/appcore_ui_app_ambient/src/ui_app_ambient.c index f621a53..6fa1817 100644 --- a/appcore_ui_app_ambient/src/ui_app_ambient.c +++ b/appcore_ui_app_ambient/src/ui_app_ambient.c @@ -100,13 +100,22 @@ static int __alarm_cb(alarm_id_t id, void *data) return 0; } -static int __get_ambient_tick_offset(ui_app_ambient_update_period_e period) +static alarm_entry_t* __get_ambient_tick_alarm(ui_app_ambient_update_period_e period) { struct timespec current_time; struct tm cur_tm; + struct tm next_tm; int offset = 0; int remain_min; int minute_base; + int ret; + time_t next; + alarm_entry_t *alarm_info = NULL; + alarm_date_t date = {0}; + + alarm_info = alarmmgr_create_alarm(); + if (!alarm_info) + return NULL; clock_gettime(CLOCK_REALTIME, ¤t_time); @@ -130,13 +139,42 @@ static int __get_ambient_tick_offset(ui_app_ambient_update_period_e period) break; } - return offset; + next = current_time.tv_sec + offset; + localtime_r(&next, &next_tm); + + date.year = next_tm.tm_year + 1900; + date.month = next_tm.tm_mon + 1; + date.day = next_tm.tm_mday; + date.hour = next_tm.tm_hour; + date.min = next_tm.tm_min; + date.sec = next_tm.tm_sec; + + alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE); + + ret = alarmmgr_set_time(alarm_info, date); + if (ret != ALARMMGR_RESULT_SUCCESS) { + LOGE("Failed to alarmmgr_set_time : %d", ret); + alarmmgr_free_alarm(alarm_info); + return NULL; + } + + ret = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_REPEAT, + ambient_tick_type_infos[period].interval); + if (ret != ALARMMGR_RESULT_SUCCESS) { + LOGE("Failed to alarmmgr_set_time : %d", ret); + alarmmgr_free_alarm(alarm_info); + return NULL; + } + + LOGD("Next alarm tick [%d:%d:%d]", date.hour, date.min, date.sec); + return alarm_info; } static int __set_ambient_tick_cb() { int r; - int offset_sec = 0; + char appid_buf[APPID_BUFFER_MAX] = {0, }; + alarm_entry_t *alarm_info = NULL; if (ambient_lifecycle.period_type == UI_APP_AMBIENT_UPDATE_NONE && ambient_lifecycle.alarm_id == 0) { @@ -144,18 +182,29 @@ static int __set_ambient_tick_cb() ambient_lifecycle.period_type = UI_APP_AMBIENT_UPDATE_FIFTEEN_MINUTES; } - offset_sec = __get_ambient_tick_offset(ambient_lifecycle.period_type); - LOGD("next time offset: %d[type:%d]", offset_sec, ambient_lifecycle.period_type); + alarm_info = __get_ambient_tick_alarm(ambient_lifecycle.period_type); + if (!alarm_info) + return -1; + + alarmmgr_set_cb(__alarm_cb, ambient_lifecycle.user_data); __alarm_init(); - r = alarmmgr_add_alarm_withcb(ALARM_TYPE_VOLATILE, offset_sec, - ambient_tick_type_infos[ambient_lifecycle.period_type].interval, - __alarm_cb, ambient_lifecycle.user_data, &ambient_lifecycle.alarm_id); + + if (aul_app_get_appid_bypid( + getpid(), appid_buf, sizeof(appid_buf)) != AUL_R_OK) { + LOGE("Failed to get appid (%d)", getpid()); + alarmmgr_free_alarm(alarm_info); + return -1; + } + + r = alarmmgr_add_alarm_with_localtime(alarm_info, appid_buf, + &ambient_lifecycle.alarm_id); if (r < 0) - LOGE("fail to alarmmgr_add_alarm_withcb : error_code : %d", r); + LOGE("fail to alarmmgr_add_alarm_with_localtime : error_code : %d", r); ambient_lifecycle.frame_updated(ambient_lifecycle.user_data); + alarmmgr_free_alarm(alarm_info); return r; } |