static char* s_result;
static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
-
+static bool setting_update_timezone(SettingTimeUG *ad);
static int setting_time_main_create(void *cb);
static int setting_time_main_destroy(void *cb);
static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
void *event_info);
+bool __update_timezone_idler(SettingTimeUG *ad)
+{
+ setting_update_timezone(ad);
+ ad->update_timezone_idler = NULL;
+ return 0;
+}
#if TIME_CHANGED_HEYNOTY_CALLBACK
void time_changed_callback(void *data)
{
SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
}
+ SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
if(EINA_TRUE == ad->is_datefield_selected) {
/* Timezone is not changed and a selected value of the datefield is already changed */
SETTING_TRACE("Datefield is selected\n");
}
tzset();
-
// vconfset to update timezone
char pTZPath[__MAX_PATH_SIZE];
ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
-
if (nLen != -1) {
pTZPath[nLen] = '\0';
} else {
SETTING_TRACE("__setting_set_city_tzone ERROR");
return;
}
-
- setting_time_main_update(data);
-
char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
setting_retm_if(timezone == NULL, "get vonf failed");
-
ICU_set_timezone(timezone);
FREE(timezone);
+
+ // update timezone
+ if (ad->update_timezone_idler) {
+ ecore_idler_del(ad->update_timezone_idler);
+ ad->update_timezone_idler = NULL;
+ }
+ ad->update_timezone_idler =
+ ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
+ // update time
+ if (ad->refresh_time_idler) {
+ ecore_idler_del(ad->refresh_time_idler);
+ ad->refresh_time_idler = NULL;
+ }
+ ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
}
#endif
return 0;
}
-bool __update_timezone_idler(SettingTimeUG *ad)
-{
- setting_update_timezone(ad);
- ad->update_timezone_idler = NULL;
- return 0;
-}
static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
{
/* local time -> gmtime */
time_t the_time = mktime(&_tm); /* represent local time */
- ad->changed_time = the_time;
if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
{
Eina_Bool __refresh_date_timer(void *data)
{
- SETTING_TRACE_BEGIN;
+ //SETTING_TRACE_BEGIN;
SettingTimeUG *ad = data;
if (ad->data_time) {
time_t ctime = time(NULL);
struct tm *ts = localtime_r(&ctime, &ts_ret);
retv_if(!ts, 1);
- elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
+ struct tm ui_time;
+ elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
+ if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
+ {
+ SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
+ elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
+ }
}
return 1;
}
&err);
bool auto_flag = value;
- /* UI automatic */
- ad->data_auto =
- setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
- setting_time_main_mouse_up_Gendial_list_cb,
- ad, SWALLOW_Type_1TOGGLE, NULL,
- NULL, value,
- "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
- setting_time_main_chk_btn_cb);
- if (ad->data_auto) {
- ad->data_auto->userdata = ad;
- } else {
- SETTING_TRACE_ERROR("ad->data_auto is NULL");
+ if(auto_flag) //do special process only when auto mode
+ {
+ //to read TAPI vconfs
+ int ret = 0;
+ int t_nitz = 0;
+ int t_offset = 0;
+ ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
+ ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
+ char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
+ if (ret == 0 && !isEmptyStr(tzpath))
+ {
+ //1.to update timezone
+ char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
+ safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
+ g_strlcat(tz_path, tzpath, sizeof(tz_path));
+ SETTING_TRACE("full tz_path:%s", tz_path);
+ ret = sysman_set_timezone(tz_path);
+ if (ret < 0) {
+ SETTING_TRACE("tzpath is not valid.");
+ } else
+ SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
+ if (!__setting_set_city_tzone(tzpath)) {
+ SETTING_TRACE("__setting_set_city_tzone ERROR")
+ }
+ if (get_city_name(tzpath)) {
+ SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
+ }
+ char* city = get_city_name_result();
+ SETTING_TRACE("city:%s", city);
+ ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
+
+ // 2.to set current time
+ int t_uptime = 0;
+ FILE *fp = fopen("/proc/uptime", "r");
+ fscanf(fp, "%d", &t_uptime);
+ SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
+ time_t t_current = t_nitz + t_uptime - t_offset;
+ SETTING_TRACE("t_current:%d", t_current);
+ ret = sysman_set_datetime(t_current);
+ }
}
- setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
- ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
- NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
- NULL);
+ /* UI automatic */
+ if (!isEmulBin()) {
+ ad->data_auto =
+ setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
+ setting_time_main_mouse_up_Gendial_list_cb,
+ ad, SWALLOW_Type_1TOGGLE, NULL,
+ NULL, value,
+ "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
+ setting_time_main_chk_btn_cb);
+ if (ad->data_auto) {
+ ad->data_auto->userdata = ad;
+ } else {
+ SETTING_TRACE_ERROR("ad->data_auto is NULL");
+ }
+
+ setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
+ ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+ NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
+ NULL);
+ elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ }
- appcore_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
+ setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
char *pa_timezone = NULL;
} else {
SETTING_TRACE("tzpath : %s", tzpath );
}
+ SETTING_TRACE("city : %s", city );
/* --------------------------------------------------------------------- */
char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
SettingTimeUG *ad = (SettingTimeUG *) cb;
- __refresh_date_timer(ad);
+ //__refresh_date_timer(ad);
+ if (ad->data_time) {
+ time_t ctime = time(NULL);
+ struct tm ts_ret;
+ struct tm *ts = localtime_r(&ctime, &ts_ret);
+ if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
+ }
ad->refresh_time_idler = NULL;
return 0;
}
ad->pop = NULL;
}
}
+static void __time_auto_update(void *data)
+{
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ SettingTimeUG *ad = (SettingTimeUG *) data;
+ int err;
+ setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
+ SETTING_ON_OFF_BTN_ON, &err);
+ if (ad->data_tz) {
+ setting_disable_genlist_item(ad->data_tz->item);
+ }
+
+ if (ad->data_time) {
+ ad->data_time->isItemDisableFlag = FALSE;
+ setting_disable_evas_object(ad->data_time->eo_check);
+ setting_disable_genlist_item(ad->data_time->item);
+ }
+
+ int ret = 0;
+
+ int t_nitz = 0;
+ int t_offset = 0;
+ ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
+ ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
+ char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
+ if (ret != 0 || isEmptyStr(tzpath))
+ {
+ setting_create_simple_popup(ad, ad->win_get,
+ NULL, _("TAPI doesn't support this sim card to update time automatically!"));
+ return;
+ }
+ ret = 0;//reset..
+
+ // a.time zone
+ SETTING_TRACE("tz_path:%s", tzpath);
+
+ char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
+ safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
+ g_strlcat(tz_path, tzpath, sizeof(tz_path));
+ SETTING_TRACE("full tz_path:%s", tz_path);
+ ret = sysman_set_timezone(tz_path);
+ if (ret < 0) {
+ SETTING_TRACE("tzpath is not valid.");
+ return;
+ } else
+ SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
+ if (!__setting_set_city_tzone(tzpath)) {
+ SETTING_TRACE("__setting_set_city_tzone ERROR")
+ return;
+ }
+ if (get_city_name(tzpath)) {
+ SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
+ }
+ char* city = get_city_name_result();
+ SETTING_TRACE("city:%s", city);
+ ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
+ setting_retm_if(ret != 0, "set vconf failed");
+ setting_update_timezone(ad);
+
+ // b.TIME AND DATE
+ int t_uptime = 0;
+ FILE *fp = fopen("/proc/uptime", "r");
+ fscanf(fp, "%d", &t_uptime);
+ SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
+ time_t t_current = t_nitz + t_uptime - t_offset;
+ SETTING_TRACE("t_current:%d", t_current);
+ ret = sysman_set_datetime(t_current);
+ setting_retm_if(ret == -1, "sysman_set_datetime call failed");
+ //ad->changed_time = t_current;
+ if (ad->data_time) {
+ struct tm ts_ret;
+ struct tm *ts = localtime_r(&t_current, &ts_ret);
+ ret_if(!ts);
+ elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
+ }
+
+ // c.heynoti_publish
+ heynoti_publish(SETTING_TIME_CHANGED);
+}
static void
setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
}
} else {
+#if UN_SUPPORT_TIME_DYNAMIC_UPDATE
ad->pop =
setting_create_popup_with_btn(ad, ad->win_get, NULL,
_("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
dgettext("sys_string",
"IDS_COM_SK_OK"),
_("IDS_COM_SK_CANCEL"));
+#else
+ __time_auto_update(ad);
+#endif
}
}
}
}
} else {
+ #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
ad->pop =
setting_create_popup_with_btn(ad, ad->win_get, NULL,
_("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
0, 2,
dgettext("sys_string", "IDS_COM_SK_OK"),
_("IDS_COM_SK_CANCEL"));
+ #else
+ __time_auto_update(ad);
+ #endif
}
} else if (!safeStrCmp("IDS_ST_BODY_TIME_FORMAT", list_item->keyStr)
if(gmtoffset_min != 0) {
gmtoffset_min = 30;
}
-
+
snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
SETTING_TRACE("szTimezone is of a valid format: GMT: %s", str_buf);
}