RSA code sync
[apps/core/preloaded/settings.git] / setting-time / src / setting-time-main.c
index ba12d4f..06c10a9 100755 (executable)
@@ -20,7 +20,7 @@
  */
 
 #include <setting-time-main.h>
-#include <sysman.h>
+#include <sysman_managed.h>
 
 #include <stdio.h>
 #include <malloc.h>
@@ -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"