summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInkyun Kil <inkyun.kil@samsung.com>2020-03-23 10:48:57 +0900
committerInkyun Kil <inkyun.kil@samsung.com>2020-03-26 16:52:42 +0900
commite8ff7390e4278410f8b20e56001c376ff06b67b7 (patch)
tree023ecf3b3a47a3a7178b9e0b57a8b253768df395
parent97180bd9a46db76b4862abac9a60497f9f30d8e2 (diff)
downloadapplication-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.c67
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, &current_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;
}