From e8ff7390e4278410f8b20e56001c376ff06b67b7 Mon Sep 17 00:00:00 2001 From: Inkyun Kil Date: Mon, 23 Mar 2020 10:48:57 +0900 Subject: [PATCH] Changes registering alarm tick from relative to absolute Change-Id: I6fbe54cc549f5b131fced0fafdd7bb49464389db Signed-off-by: Inkyun Kil --- appcore_ui_app_ambient/src/ui_app_ambient.c | 67 +++++++++++++++++++++++++---- 1 file 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; } -- 2.7.4