X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=setting-time%2Fsrc%2Fsetting-time-main.c;h=06c10a93edaa70403562560f10658de2429833ea;hb=95ea43be4a82b3c28f6545902515597aa3496149;hp=ba12d4f2333ae31aaf72178e145183d99cf81824;hpb=bf9fd7342b0651b211a58ccc0ebbd11cf70f491c;p=apps%2Fcore%2Fpreloaded%2Fsettings.git diff --git a/setting-time/src/setting-time-main.c b/setting-time/src/setting-time-main.c index ba12d4f..06c10a9 100755 --- a/setting-time/src/setting-time-main.c +++ b/setting-time/src/setting-time-main.c @@ -20,7 +20,7 @@ */ #include -#include +#include #include #include @@ -67,8 +67,10 @@ setting_view setting_view_time_main = { .cleanup = setting_time_main_cleanup, }; +#if UN_SUPPORT_TIME_DYNAMIC_UPDATE static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj, void *event_info); +#endif bool __update_timezone_idler(SettingTimeUG *ad) { @@ -267,6 +269,114 @@ static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data) } } +static void __update_time_via_sim_card(void *data) +{ + setting_retm_if(data == NULL, "Data parameter is NULL"); + SettingTimeUG *ad = (SettingTimeUG *) data; + 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->ly_main, + NULL, _(NOT_SUPPORT_AUTO_UPDATE_DESC)); + 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); + if (city) + { + ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city); + setting_retm_if(ret != 0, "set vconf[%s] failed", VCONFKEY_SETAPPL_CITYNAME_INDEX_INT); + } + setting_update_timezone(ad); + + // b.TIME AND DATE + int t_uptime = 0; + FILE *fp = fopen("/proc/uptime", "r"); + if (fp) { + if (!fscanf(fp, "%d", &t_uptime)) { + SETTING_TRACE_ERROR("fscanf error"); + } + fclose(fp); + fp = NULL; + } else { + SETTING_TRACE_ERROR("fopen error"); + } + + 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"); + 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); + } + + // time change - event + static int t_event_val = -1; + vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val); +} + +static void __sim_time_info_chg_cb(keynode_t *key, void *data) +{ + SETTING_TRACE_BEGIN; + ret_if(NULL == data); + SettingTimeUG *ad = data; + char *vconf_name = vconf_keynode_get_name(key); + SETTING_TRACE("vconf_name:%s", vconf_name); + if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_GMT) + || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_EVENT_GMT) + || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_ZONE)) { + int value = 0; + int err = 0; + setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value, + &err); + if (value) + { + 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)) + { + return; + } + __update_time_via_sim_card(ad); + } + } +} + /* *************************************************** * *basic func @@ -281,10 +391,7 @@ static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj, Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data; SettingTimeUG *ad = list_item->userdata; - if (EINA_FALSE == ad->is_datefield_selected) { - SETTING_TRACE("Datefield is not selected\n"); - return; - } + ad->is_datefield_selected = EINA_TRUE; // If auto update is on, don't anything while the datefield has been updated (i.e., time runs) if (1 == setting_time_check_automatic_time_update_state()) { @@ -771,17 +878,21 @@ static int setting_time_main_create(void *cb) value = SETTING_DATE_FORMAT_DD_MM_YYYY; /* UI format string */ + (void)setting_create_Gendial_field_titleItem(scroller, + &(itc_group_item), + "IDS_ST_BODY_DATE_AND_TIME", NULL); ad->data_time = setting_create_Gendial_field_def(scroller, &(ad->itc_layout), setting_time_main_mouse_up_Gendial_list_cb, ad, SWALLOW_Type_LAYOUT_DATEFIELD, NULL, NULL, is_12hours, - "IDS_ST_BODY_DATE_AND_TIME", + NULL,//"IDS_ST_BODY_DATE_AND_TIME", date_format_str[value], setting_time_main_datefield_change_cb); if (ad->data_time) { ad->data_time->userdata = ad; ad->data_time->isItemDisableFlag = auto_flag; + elm_genlist_item_select_mode_set(ad->data_time->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); } else { SETTING_TRACE_ERROR("ad->data_time is NULL"); } @@ -861,16 +972,13 @@ static int setting_time_main_create(void *cb) vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad); /* register vconf key to get event callback for converting 12/24H */ - ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, - setting_time_main_int_vconf_change_cb, ad); - setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)", - (char *)VCONFKEY_REGIONFORMAT_TIME1224, ret); - + vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb, ad); /* register vconf key to get event callback for date format */ - ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, - setting_time_main_int_vconf_change_cb, ad); - setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)", - (char *)VCONFKEY_SETAPPL_DATE_FORMAT_INT, ret); + vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb, ad); + + vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb, ad); + vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb, ad); + vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb, ad); /* to avoid update time-diff, every per 3s to update. */ ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad); @@ -915,6 +1023,10 @@ static int setting_time_main_destroy(void *cb) vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb); + vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb); + vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb); + vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb); + if (ad->ly_main != NULL) { evas_object_del(ad->ly_main); setting_view_time_main.is_create = 0; @@ -1224,6 +1336,7 @@ setting_time_main_click_softkey_caller_exist_right_cb(void *data, ug_destroy_me(ad->ug); } +#if UN_SUPPORT_TIME_DYNAMIC_UPDATE static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj, void *event_info) { @@ -1242,6 +1355,8 @@ static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj, ad->pop = NULL; } } +#endif + static void __time_auto_update(void *data) { setting_retm_if(data == NULL, "Data parameter is NULL"); @@ -1258,68 +1373,7 @@ static void __time_auto_update(void *data) 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); - } - - // event notification - static int t_event_val = -1; - vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val); + __update_time_via_sim_card(ad); } static void @@ -1393,11 +1447,11 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * SettingTimeUG *ad = (SettingTimeUG *) data; SETTING_TRACE("clicking item[%s]", _(list_item->keyStr)); - if (ad->data_time && 0 != safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) { + if (ad->data_time && ad->data_time != list_item) { elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE); } - if (!safeStrCmp("IDS_ST_BODY_TIME_ZONE", list_item->keyStr)) { + if (ad->data_tz == list_item) { ad->is_datefield_selected = EINA_FALSE; if (1 == setting_time_check_automatic_time_update_state()) { setting_create_simple_popup(ad, ad->win_get, @@ -1406,7 +1460,7 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * setting_time_main_launch_worldclock_sg(ad); } - } else if (!safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) { + } else if (ad->data_time == list_item) { ad->is_datefield_selected = EINA_TRUE; if (1 == setting_time_check_automatic_time_update_state()) { setting_create_simple_popup(ad, ad->win_get, @@ -1414,7 +1468,7 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * } else { /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */ } - } else if (!safeStrCmp("IDS_ST_BODY_AUTOMATIC_UPDATE", list_item->keyStr)) { + } else if (ad->data_auto == list_item) { ad->is_datefield_selected = EINA_FALSE; int old_status = elm_check_state_get(list_item->eo_check); /* new status */ @@ -1451,9 +1505,10 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * #endif } - } else if (!safeStrCmp("IDS_ST_BODY_TIME_FORMAT", list_item->keyStr) - || !safeStrCmp("IDS_ST_BODY_DATE_FORMAT", list_item->keyStr) - || !safeStrCmp("IDS_CLD_BODY_FIRST_DAY_OF_WEEK", list_item->keyStr)) { + } + else if (ad->data_time_fmt == list_item + || ad->data_date_fmt == list_item + || ad->data_firstday_week_fmt == list_item) { ad->is_datefield_selected = EINA_FALSE; bool status = !elm_genlist_item_expanded_get(item); elm_genlist_item_expanded_set(item, status); @@ -1554,7 +1609,7 @@ static void ICU_set_timezone(const char *timezone) FREE(str); } - +#if DISABLED_CODE static void setting_time_main_controlbar_lbtn_label_set( Evas_Object *controlbar, char *label) @@ -1574,7 +1629,7 @@ static void setting_time_main_controlbar_lbtn_label_set( elm_object_text_set(eo_lbtn, label); } - +#endif /** * ex) timezone : Asia/Seoul --> returns "+09"