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);
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) {
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;
}