remove elm_win_resize_object_add() API except for conformant object
[apps/core/preloaded/settings.git] / setting-time / src / setting-time-main.c
index f03df69..a5555fc 100755 (executable)
@@ -1,33 +1,59 @@
 /*
-  * Copyright 2012  Samsung Electronics Co., Ltd
-  *
-  * Licensed under the Flora License, Version 1.0 (the "License");
-  * you may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at
-  *
-  *     http://www.tizenopensource.org/license
-  *
-  * Unless required by applicable law or agreed to in writing, software
-  * distributed under the License is distributed on an "AS IS" BASIS,
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  */
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
 #include <setting-time-main.h>
-#include <sysman.h>
+#include <sysman_managed.h>
 
 #include <stdio.h>
 #include <malloc.h>
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sqlite3.h>
+
+#include <vconf.h>
+#include <vconf-keys.h>
+
 #include <unicode/udat.h>
 #include <unicode/ustring.h>
 #include <unicode/uloc.h>
 #include <unicode/ucal.h>
 #include <unicode/utmscale.h>
 
+#define ONE_MINUTE 60
+#define PROGRESS_POPUP_SHOW 0
+
 /*  ICU utilities*/
 static UChar *uastrcpy(const char *chars);
 static void ICU_set_timezone(const char *timezone);
 static int get_timezone_isdst(int* isdst);
+static void get_gmt_offset(char *str_buf, int size);
+
+static char* get_timezone_str();
+static char* get_city_name_result();
+static bool get_city_name(char* tzname);
+
+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);
@@ -41,14 +67,29 @@ 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
 
-#if TIME_CHANGED_HEYNOTY_CALLBACK
-void time_changed_callback(void *data)
+bool __update_timezone_idler(SettingTimeUG *ad)
 {
+       setting_update_timezone(ad);
+       ad->update_timezone_idler = NULL;
+       return 0;
+}
+
+void time_changed_callback(keynode_t *key, void *data) {
+
        SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
        SettingTimeUG *ad = (SettingTimeUG *)data;
+
+       int ret = setting_time_update_cb(ad);
+       if (ret != 0) {
+               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");
@@ -56,11 +97,9 @@ void time_changed_callback(void *data)
        }
 
        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 {
@@ -72,16 +111,25 @@ void time_changed_callback(void *data)
                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
 
 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
 {
@@ -100,9 +148,7 @@ void setting_time_update_time_date_format_string(SettingTimeUG *ad)
        ret_if(!ts);
 
        /* set time in particular format */
-       ret =
-           setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
-                                   &value, &err);
+       ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
        if (ret == SETTING_RETURN_FAIL)
                value = VCONFKEY_TIME_FORMAT_12;
 
@@ -142,19 +188,18 @@ bool setting_update_timezone(SettingTimeUG *ad)
        pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
        pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);
 
-       if ((pa_timezone != NULL)
-           && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
+       //if ((pa_timezone != NULL) && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
+       if ((pa_timezone != NULL) && (_(pa_city) != NULL )) {
+               /* SETTING_TRACE_DEBUG("*** timezone: %s *** ", timezone); */
+               /* SETTING_TRACE_DEBUG("*** city: %s *** ", _(city)); */
+               /* SETTING_TRACE_DEBUG("*** ret: %d, dst: %d *** ", ret, dst); */
 
-               ret = snprintf(time_zone_sub_str,
-                            CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
-                            _(pa_city), pa_timezone);
+               ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(pa_city), pa_timezone);
+               //ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", pa_timezone, _(pa_city));
                FREE(pa_city);
                retv_if(ret < 0, 0);
        } else {
-               ret =
-                   snprintf(time_zone_sub_str,
-                            CITY_BUF_SIZE + GMT_BUF_SIZE + 2,
-                            "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
+               ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
                retv_if(ret < 0, 0);
        }
        SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
@@ -167,22 +212,18 @@ bool setting_update_timezone(SettingTimeUG *ad)
        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)
 {
-       SETTING_TRACE_BEGIN;
+       /* SETTING_TRACE_BEGIN; */
        ret_if(NULL == data);
        SettingTimeUG *ad = data;
        int status = vconf_keynode_get_int(key);
        char *vconf_name = vconf_keynode_get_name(key);
+       /* SETTING_TRACE("vconf_name:%s", vconf_name); */
 
        if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224)) {
+
                if (ad->data_time) {
                        /* VCONFKEY_REGIONFORMAT_TIME1224 1:12H 2:24H */
                        if (status <= 2 && status > 0)  /*  1, 2 */
@@ -203,6 +244,14 @@ static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
                                time_format = "%H : %M";
                        }
 
+//get date format from datefiled itself, if elm_datetime_add() supports set date-format via ICU.
+#ifdef SUPPORT_DATEFIELD_DATE_FORMAT_AUTOSET
+                       const char *old_format = elm_datetime_format_get(ad->data_time->eo_check);
+                       snprintf(datefield_format, MAX_DATE_FORMAT_LEN + 1, //add one space " "
+                                "%s", old_format);
+                       safeStrNCat(datefield_format, time_format, MAX_DATETIME_FORMAT_LEN);
+                       SETTING_TRACE("datefield_format:%s", datefield_format);
+#else
                        int value = SETTING_DATE_FORMAT_DD_MM_YYYY;
                        int err = -1;
 
@@ -211,20 +260,128 @@ static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
                        if (ret == SETTING_RETURN_FAIL)
                                value = SETTING_DATE_FORMAT_DD_MM_YYYY;
 
-                       snprintf(datefield_format, MAX_DATETIME_FORMAT_LEN, 
+                       snprintf(datefield_format, MAX_DATETIME_FORMAT_LEN,
                                 "%s %s", date_format_str[value], time_format);
+#endif
 
                        elm_datetime_format_set(ad->data_time->eo_check, datefield_format);
                }
        }
 }
 
+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
  *
  ***************************************************/
-#define ONE_MINUTE 60
 static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
                                      void *event_info)
 {
@@ -234,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()) {
@@ -247,62 +401,57 @@ static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
        } else {
                // otherwise, we apply a new date which has been changed by a user
        }
-       
+
        struct tm _tm;
        elm_datetime_value_get(obj, &_tm);
 
-       
        SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
                      _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
        if (2037 < _tm.tm_year) {
-               setting_create_popup_without_title(ad, ad->win_get,
-                                                 _("Cannot Set the year bigger than 2037"));
+               setting_create_simple_popup(ad, ad->win_get,
+                                           NULL, _(ERR_BIGGER_THAN_2037));
                return;
        }
 #if SUPPORT_SCREEN_PROTECTED   /* if not lock the current state, after set the time, the screen will become dimmed */
        pm_lock_state(LCD_NORMAL, STAY_CUR_STATE, 0);
 #endif
        _tm.tm_sec = 0;
-       
+
        int isdst;
        if (get_timezone_isdst(&isdst) == SETTING_RETURN_SUCCESS) {
                _tm.tm_isdst = isdst;
        } else {
-               // error 
+               // error
                SETTING_TRACE_ERROR("get_timezone_isdst() failed");
                return;
-       }       
+       }
 
        /*  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))
+       if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
        {
                SETTING_TRACE("Time is not changed\n");
                //current time didn't change
                return;
        }
 
-       int ret = sysman_set_datetime(the_time);
-       setting_retm_if(ret == -1, "sysman_set_datetime call failed");
-       //----------------------------------------------------------
-
-
-       /* exceptional handling */
-       if (ad->heynoti_timer) {
-               ecore_timer_del(ad->heynoti_timer);
-               ad->heynoti_timer = NULL;
-       }
-       ad->heynoti_timer = ecore_timer_add(1, (Ecore_Task_Cb) setting_time_update_cb, ad);
-
+#if PROGRESS_POPUP_SHOW
+       // remove popup if created
        if (ad->pop_progress) {
                evas_object_del(ad->pop_progress);
                ad->pop_progress = NULL;
        }
-       ad->pop_progress = setting_create_popup_with_progressbar(ad, ad->win_get,
-                                "pending_list",
-                                NULL, NULL, NULL, 0);
+
+       // create new popup
+       ad->pop_progress =
+               setting_create_popup_with_progressbar(ad, ad->win_get, "pending_list",
+                                                     NULL, NULL, NULL, 0, TRUE, TRUE);
+#endif
+
+       // invoke API to change time
+       int ret = sysman_set_datetime(the_time);
+       setting_retm_if(ret == -1, "sysman_set_datetime call failed");
 
        SETTING_TRACE_END;
 }
@@ -316,8 +465,14 @@ Eina_Bool __refresh_date_timer(void *data)
                struct tm ts_ret;
                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;
 }
@@ -411,44 +566,61 @@ static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
                                                     SETTING_WEEKOFDAY_FORMAT_MONDAY,
                                                     "IDS_ST_BODY_MONDAY", NULL);
 
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    NULL, rgd, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    SETTING_WEEKOFDAY_FORMAT_TUESDAY,
-                                                    "IDS_ST_BODY_TUESDAY", NULL);
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    NULL, rgd, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    SETTING_WEEKOFDAY_FORMAT_WEDNESDAY,
-                                                    "IDS_ST_BODY_WEDNESDAY", NULL);
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    NULL, rgd, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    SETTING_WEEKOFDAY_FORMAT_THURSDAY,
-                                                    "IDS_ST_BODY_THURSDAY", NULL);
-
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    NULL, rgd, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    SETTING_WEEKOFDAY_FORMAT_FRIDAY,
-                                                    "IDS_ST_BODY_FRIDAY", NULL);
-
-               setting_create_Gendial_exp_sub_field(scroller,
-                                                    &(ad->itc_1icon_1text_sub),
-                                                    NULL, rgd, parentItem,
-                                                    SWALLOW_Type_1RADIO, rgd,
-                                                    SETTING_WEEKOFDAY_FORMAT_SATURDAY,
-                                                    "IDS_ST_BODY_SATURDAY", NULL);
-
                setting_update_chk_status(rgd,
                                          data_parentItem->int_slp_setting_binded);
        }
 }
 
+/**
+ * layyout create - remove a conformant
+ */
+Evas_Object *setting_create_win_layout2(Evas_Object *win_layout,
+                                      Evas_Object *win_obj)
+{
+       Evas_Object *layout = NULL;
+       //Evas_Object *conform = elm_conformant_add(win_obj);
+       /*  Base Layout */
+       layout = elm_layout_add(win_obj);
+       setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       //elm_win_resize_object_add(win_obj, layout);
+       //elm_win_resize_object_add(win_obj, conform);
+       //elm_object_content_set(conform, layout);
+
+       Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
+       elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+       evas_object_show(layout);
+       //evas_object_show(conform);
+       return layout;
+}
+
+
+
+Evas_Object *setting_create_layout_navi_bar2(Evas_Object *win_layout,
+                                               Evas_Object *win_obj,
+                                               char *title_str,
+                                               char *lbutton_str, char *rbutton_str, char *mbutton_str,
+                                               setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb,
+                                               setting_call_back_func mbutton_click_cb,
+                                               void *cb_data, Evas_Object *eo_view,    /*any container obj constructed on any evas obj */
+                                           Evas_Object **navi_bar,
+                                           Evas_Object **titleobj)
+{
+
+       Evas_Object *layout = setting_create_win_layout2(win_layout, win_obj);
+       *navi_bar = setting_create_navi_bar(layout);
+
+       setting_create_navi_bar_buttons(title_str,
+                                       lbutton_str, rbutton_str, mbutton_str,
+                                       lbutton_click_cb, rbutton_click_cb,
+                                       mbutton_click_cb, cb_data, eo_view /*content */ ,
+                                       *navi_bar, NULL);
+       return layout;
+}
+
 static int setting_time_main_create(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -459,76 +631,92 @@ static int setting_time_main_create(void *cb)
        char *l_btn = NULL;
        char *r_btn = NULL;
        char *title = _("IDS_ST_BODY_DATE_AND_TIME");
-       char *temp = NULL;
        char *caller = NULL;
        ad->is_datefield_selected = EINA_FALSE;
 
        setting_call_back_func l_button_cb = NULL;
        setting_call_back_func r_button_cb = NULL;
 
-       bundle *data = ad->bundle_data;
+       service_h service = ad->bundle_data;
 
-       if (data != NULL) {
-               if (NULL != (temp = (char *)bundle_get_val(data, "caller")))
-                       caller = temp;
-               if (NULL != (temp = (char *)bundle_get_val(data, "lbutton"))) {
-                       l_btn = temp;
-                       l_button_cb =
-                           setting_time_main_click_softkey_caller_exist_left_cb;
-               }
-               if (NULL != (temp = (char *)bundle_get_val(data, "title")))
-                       title = temp;
-               if (NULL != (temp = (char *)bundle_get_val(data, "rbutton"))) {
-                       r_btn = temp;
-                       r_button_cb =
-                           setting_time_main_click_softkey_caller_exist_right_cb;
-               }
-       }
+       service_get_extra_data(service, "caller", &caller);
+       service_get_extra_data(service, "lbutton", &l_btn);
+       if(l_btn)
+               l_button_cb = setting_time_main_click_softkey_caller_exist_left_cb;
+       service_get_extra_data(service, "title", &title);
+       service_get_extra_data(service, "rbutton", &r_btn);
+       if(r_btn)
+               r_button_cb = setting_time_main_click_softkey_caller_exist_right_cb;
 
        Evas_Object *scroller;  /*  scroller is a genlist */
 
        ad->caller = caller;
        if (ad->caller) {
-                char *lbtn_str = (char *)g_strdup(l_btn);
-                bool same_flag = FALSE;
-                if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
-                        l_btn = _("IDS_COM_BODY_BACK");
-                        same_flag = TRUE;
-                }
+               /* for setup wizard */
+               char *lbtn_str = (char *)g_strdup(l_btn);
+               bool same_flag = FALSE;
+               if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
+                       l_btn = (char *)dgettext("sys_string", "IDS_COM_BODY_BACK");
+                       same_flag = TRUE;
+               }
 
-               Evas_Object *controllbar = NULL;
+               //Evas_Object *controllbar = NULL;
 
                scroller = elm_genlist_add(ad->win_main_layout);
-               if(scroller == NULL) { 
-                       SETTING_TRACE_ERROR("Cannot set scroller object  as contento of layout"); 
+               elm_object_style_set(scroller, "dialogue");
+               if(scroller == NULL) {
+                       SETTING_TRACE_ERROR("Cannot set scroller object  as contento of layout");
                        // free allocated data before return.
                        FREE(lbtn_str);
-                       return SETTING_DRAW_ERR_FAIL_SCROLLER; 
-               } 
+                       return SETTING_DRAW_ERR_FAIL_SCROLLER;
+               }
 
                elm_genlist_clear(scroller);
-
                ad->ly_main =
-                           setting_create_layout_navi_bar(ad->win_main_layout,
+                           setting_create_layout_navi_bar2(ad->win_main_layout,
                                                           ad->win_get,
                                                           title,
-                                                          l_btn,
-                                                          r_btn, NULL,
-                                                          l_button_cb,
-                                                          r_button_cb,
-                                                          NULL, ad,
-                                                          scroller,
+                                                          NULL, NULL, NULL,
+                                                          NULL, NULL, NULL,
+                                                          ad, scroller,
                                                           &ad->navi_bar,
-                                                          &controllbar);
-
-                if (same_flag) {
-                        setting_time_main_controlbar_lbtn_label_set(controllbar,
-                                                                   lbtn_str);
-                }
-                if (lbtn_str) {
-                        G_FREE(lbtn_str);
-                }
-
+                                                          NULL);
+               /* left button */
+               Evas_Object *lbtn_obj = elm_button_add(ad->win_main_layout);
+               if(lbtn_obj == NULL)
+                       return SETTING_DRAW_ERR_FAIL_SCROLLER;
+
+               Evas_Object *licon_obj = elm_icon_add(ad->win_main_layout);
+               if(licon_obj == NULL)
+                       return SETTING_DRAW_ERR_FAIL_SCROLLER;
+               elm_icon_file_set(licon_obj, IMG_PREVIOUS, NULL);
+
+               elm_object_style_set(lbtn_obj, "naviframe/toolbar/default");
+               elm_object_text_set(lbtn_obj, l_btn);
+               elm_object_part_content_set(lbtn_obj, "elm.swallow.content", licon_obj);
+               evas_object_smart_callback_add(lbtn_obj, "clicked", l_button_cb, ad);
+
+               /* right button */
+               Evas_Object *rbtn_obj = elm_button_add(ad->win_main_layout);
+               if(rbtn_obj == NULL)
+                       return SETTING_DRAW_ERR_FAIL_SCROLLER;
+
+               Evas_Object *ricon_obj = elm_icon_add(ad->win_main_layout);
+               if(ricon_obj == NULL)
+                       return SETTING_DRAW_ERR_FAIL_SCROLLER;
+               elm_icon_file_set(ricon_obj, IMG_NEXT, NULL);
+
+               elm_object_style_set(rbtn_obj, "naviframe/toolbar/default");
+               elm_object_text_set(rbtn_obj, r_btn);
+               elm_object_part_content_set(rbtn_obj, "elm.swallow.content", ricon_obj);
+               evas_object_smart_callback_add(rbtn_obj, "clicked", r_button_cb, ad);
+
+               Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
+               if(navi_it)
+               {
+                       elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn_obj);
+                       elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn_obj);
+               }
        } else {
                l_btn = _("IDS_COM_BODY_BACK");
                title = _("IDS_ST_BODY_DATE_AND_TIME");
@@ -546,64 +734,124 @@ static int setting_time_main_create(void *cb)
        int err;
        int ret = 0;
        Elm_Object_Item *item;
-       bool auto_flag = TRUE;
 
-       if(!isEmulBin())
+       item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
+                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
+                                &err);
+       bool auto_flag = value;
+
+       if(auto_flag) //do special process only when auto mode
        {
-               item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
-                                                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
-               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value, &err);
-               auto_flag = value;
+               //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");
+                       if (fp) {
+                               if (!fscanf(fp, "%d", &t_uptime)) {
+                                       SETTING_TRACE_ERROR("fscanf error");
+                               }
+                               fclose(fp);
+                               fp = NULL;
+                       } else {
+                               SETTING_TRACE_ERROR("fopen error");
+                       }
 
-               /*  UI automatic */
+                       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);
+               }
+       }
+
+       /*  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);
+                   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");
                }
-       }
-       else
-       {
-               setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, FALSE, &err);
-               auto_flag = FALSE;
-       }
 
-       /*  UI add separator */
-       item =
-           elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
-                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               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;
        char *pa_city = NULL;
-       pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
-       pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);
 
-       if ((pa_timezone != NULL)
-           && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
-               ret =
-                   snprintf(time_zone_sub_str,
-                            CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
-                            _(pa_city), pa_timezone);
+       pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);   // IDS_WCL_BODY_CITYNAME_SEOUL
+       pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);             // "Asia/Seoul"
+
+       if ((pa_timezone != NULL) && (_(pa_city) != NULL)) {
+
+               // don't use hard coded value
+               // get value from current timezone
+
+               char str_buf[GMT_BUF_SIZE] = {0, };
+               get_gmt_offset(str_buf, GMT_BUF_SIZE);
+
+               char* timezone_str = get_timezone_str();
+
+               bool ret = get_city_name(timezone_str);
+               if (ret) {
+                       SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
+               }
+               char* cityname_id = _(get_city_name_result());
+               SETTING_TRACE("cityname_id:%s", cityname_id);
+               if (cityname_id && 0 != safeStrCmp(cityname_id, "NULL"))
+                       ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", cityname_id, _(str_buf));
+               else
+                       ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
+
                FREE(pa_city);
                FREE(pa_timezone);
                retv_if(ret < 0, 0);
        } else {
-               ret =
-                   snprintf(time_zone_sub_str,
-                            CITY_BUF_SIZE + GMT_BUF_SIZE + 2,
-                            "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
+               // default code
+               ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
                retv_if(ret < 0, 0);
        }
 
@@ -622,7 +870,6 @@ static int setting_time_main_create(void *cb)
 
        /* create DATE_AND_TIME */
        /* DATE_AND_TIME */
-
        ret =
            setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
                                    &value, &err);
@@ -637,23 +884,25 @@ 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");
        }
-
-       item =
-           elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
+       item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
        elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
@@ -662,8 +911,7 @@ static int setting_time_main_create(void *cb)
                                          __setting_time_main_exp_cb, NULL);
 
        char* pa_time_format = get_pa_time_format_str();
-       ad->data_time_fmt =
-           setting_create_Gendial_exp_parent_field(scroller,
+       ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
                                                    &(ad->itc_2text_3_parent),
                                                    setting_time_main_mouse_up_Gendial_list_cb,
                                                    ad, SWALLOW_Type_INVALID,
@@ -677,6 +925,24 @@ static int setting_time_main_create(void *cb)
        }
        G_FREE(pa_time_format);
 
+#if APPLIED_DATATIME_DATA_FORMAT
+       char* pa_date_format = get_pa_date_format_str();
+       ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
+                                                   &(ad->itc_2text_3_parent),
+                                                   setting_time_main_mouse_up_Gendial_list_cb,
+                                                   ad, SWALLOW_Type_INVALID,
+                                                   "IDS_ST_BODY_DATE_FORMAT",
+                                                   pa_time_format);
+       if (ad->data_date_fmt) {
+               ad->data_date_fmt->int_slp_setting_binded =
+                       INT_SLP_SETTING_DATE_FORMAT;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
+       }
+       G_FREE(pa_date_format);
+#endif
+
+#if APPLIED_DATATIME_FIRSTDAY_WEEK
     char* pa_week = get_pa_week_format_str();
        ad->data_firstday_week_fmt =
            setting_create_Gendial_exp_parent_field(scroller,
@@ -692,6 +958,11 @@ static int setting_time_main_create(void *cb)
                SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
        }
     G_FREE(pa_week);
+#endif
+
+       item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
+                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
        if (auto_flag)
        {
@@ -704,50 +975,19 @@ static int setting_time_main_create(void *cb)
        }
 
        setting_view_time_main.is_create = 1;
-
-#if TIME_CHANGED_HEYNOTY_CALLBACK
-       /* ---------------------------------------------------------------- */
-       /*  heynoti registration */
-       /* ---------------------------------------------------------------- */
-       ad->noti_fd = heynoti_init();
-
-       if (ad->noti_fd == -1) {
-               SETTING_TRACE("heynoti_init FAIL");
-               return SETTING_RETURN_FAIL;
-       } else {
-               SETTING_TRACE("heynoti_init OK");
-       }
-
-       if (-1 == heynoti_subscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback, (void *)ad)) {
-               SETTING_TRACE("heynoti_subscribe FAIL");
-       } else {
-               SETTING_TRACE("heynoti_subscribe OK");
-       }
-
-       if (-1 == heynoti_attach_handler(ad->noti_fd)) {
-               SETTING_TRACE("heynoti_attach_handler FAIL");
-       } else {
-               SETTING_TRACE("heynoti_attach_handler OK");
-       }
-#endif
+       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);
+       ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
 
        return SETTING_RETURN_SUCCESS;
 }
@@ -760,27 +1000,17 @@ static int setting_time_main_destroy(void *cb)
 
        SettingTimeUG *ad = (SettingTimeUG *) cb;
 
-#if TIME_CHANGED_HEYNOTY_CALLBACK
-       /* Closing heynoti */
-       if (ad->noti_fd != -1)//first need to check the fd validation
-       {
-               heynoti_unsubscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback);
-               heynoti_close(ad->noti_fd);
-               ad->noti_fd = -1;
-       }
-#endif  
        if (ad->update_timer) {
                ecore_timer_del(ad->update_timer);
                ad->update_timer = NULL;
        }
-       if (ad->heynoti_timer) {
-               ecore_timer_del(ad->heynoti_timer);
-               ad->heynoti_timer = NULL;
-       }
+
+#if PROGRESS_POPUP_SHOW
        if (ad->pop_progress) {
                evas_object_del(ad->pop_progress);
                ad->pop_progress = NULL;
        }
+#endif
 
        if (ad->update_timezone_idler) {
                ecore_idler_del(ad->update_timezone_idler);
@@ -790,11 +1020,19 @@ static int setting_time_main_destroy(void *cb)
                ecore_idler_del(ad->refresh_time_idler);
                ad->refresh_time_idler = NULL;
        }
+
+       vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
+                                time_changed_callback);
+
        vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
                                 setting_time_main_int_vconf_change_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;
@@ -835,6 +1073,7 @@ static int setting_time_main_cleanup(void *cb)
        return SETTING_RETURN_SUCCESS;
 }
 
+
 /* ***************************************************
  **
  **general func
@@ -856,31 +1095,15 @@ int setting_time_check_automatic_time_update_state()
 
 }
 
-static int
-__setting_set_city_tzone(const char* pTZPath)
+static int __setting_set_city_tzone(const char* pTZPath)
 {
        // let's get city & timezone string from pTZPath
        // 1. city name
        char szTimezone[GMT_BUF_SIZE] = {0,};
        char* pStr = strdup(pTZPath);
 
-       // 2. timezone string +/-<n> ex. +9, -1 
-       time_t t = time(0);
-
-       struct tm* data;
-       data = localtime(&t);
-       retv_if(!data, FALSE);
-       data->tm_isdst = 0;
-
-       time_t a = mktime(data);
-       data = gmtime(&t);
-       data->tm_isdst = 0;
-
-       time_t b = mktime(data);
-       int gmtoffset = (a-b)/3600;
-       snprintf(szTimezone, GMT_BUF_SIZE, "%+d", gmtoffset);
-       
-       SETTING_TRACE("szTimezone is of a valid format: GMT: %s", szTimezone);
+       // 2. timezone string +/-<n> ex. +9, -1
+       get_gmt_offset(szTimezone, GMT_BUF_SIZE);
 
        int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, szTimezone);
        if (ret == -1) {
@@ -898,8 +1121,8 @@ __setting_set_city_tzone(const char* pTZPath)
 }
 
 static void
-setting_time_main_launch_worldclock_result_ug_cb(struct ui_gadget *ug,
-                                                bundle *result, void *priv)
+setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
+                                                service_h result, void *priv)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
@@ -907,30 +1130,31 @@ setting_time_main_launch_worldclock_result_ug_cb(struct ui_gadget *ug,
 
        SettingTimeUG *ad = (SettingTimeUG *) priv;
 
-       const char *city = bundle_get_val(result, "city");
-       const char *tzpath = bundle_get_val(result, "tzpath");
+       char *city = NULL;
+       char *tzpath = NULL;
+       service_get_extra_data(result, "city", &city);
+       service_get_extra_data(result, "tzpath", &tzpath);
+
        if (!tzpath) {
                SETTING_TRACE("tzpath from worldclock UG is null.");
                return;
        } else {
                SETTING_TRACE("tzpath : %s", tzpath );
        }
+       SETTING_TRACE("city : %s", city );
 
        /* --------------------------------------------------------------------- */
-       /* create symbolic link /etc/localtime to /usr/share/zoneinfo */
-       /*  TODO add error handler */
        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);
 
-       // ASSERT tzpath format   Zone/cityname  <<--- need to have '/'
        int ret = sysman_set_timezone(tz_path);
        if (ret < 0) {
                SETTING_TRACE("tzpath is not valid.");
                return;
-       }
-       SETTING_TRACE("copy_file SUCCEEDED *********************** %s \n", tz_path);
+       } else
+               SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
 
        ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
        setting_retm_if(ret != 0, "set vconf failed");
@@ -942,17 +1166,18 @@ setting_time_main_launch_worldclock_result_ug_cb(struct ui_gadget *ug,
                return;
        }
 
-       ad->heynoti_timer = ecore_timer_add(1, (Ecore_Task_Cb) setting_time_update_cb, ad);
-       // update the display for timezone 
+       // update the display for timezone
        setting_update_timezone(ad);
-
+       static int t_event_val = -1;
+       vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
        SETTING_TRACE_END;
 }
 
-void setting_time_main_launch_worldclock_destroy_ug_cb(struct ui_gadget *ug,
+void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
                                                       void *priv)
 {
        SETTING_TRACE_BEGIN;
+       /* if(ug) ug_destroy(ug); */
        /* restore the '<-' button on the navigate bar */
        ret_if(!priv);
        SettingTimeUG *ad = (SettingTimeUG *) priv;
@@ -970,7 +1195,7 @@ void setting_time_main_launch_worldclock_destroy_ug_cb(struct ui_gadget *ug,
 
 }
 
-void setting_time_main_launch_worldclock_layout_ug_cb(struct ui_gadget *ug,
+void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
                                                      enum ug_mode mode,
                                                      void *priv)
 {
@@ -978,7 +1203,7 @@ void setting_time_main_launch_worldclock_layout_ug_cb(struct ui_gadget *ug,
        SettingTimeUG *ad = (SettingTimeUG *) priv;
        Evas_Object *base;
 
-       if (!ug || !priv)
+       if (!priv)
                return;
 
        base = (Evas_Object *) ug_get_layout(ug);
@@ -989,7 +1214,7 @@ void setting_time_main_launch_worldclock_layout_ug_cb(struct ui_gadget *ug,
        case UG_MODE_FULLVIEW:
                evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
                                                 EVAS_HINT_EXPAND);
-               elm_win_resize_object_add(ad->win_get, base);
+               //elm_win_resize_object_add(ad->win_get, base);
                evas_object_show(base);
                break;
        default:
@@ -998,13 +1223,14 @@ void setting_time_main_launch_worldclock_layout_ug_cb(struct ui_gadget *ug,
        SETTING_TRACE_END;
 }
 
+
 void setting_time_main_launch_worldclock_sg(void *data)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
        retm_if(data == NULL, "Data parameter is NULL");
+
        SettingTimeUG *ad = (SettingTimeUG *) data;
-       if (ad->ug_loading) return; // prevent double-clicked
 
        struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
        setting_retm_if(!cbs, "calloc failed");
@@ -1023,13 +1249,20 @@ void setting_time_main_launch_worldclock_sg(void *data)
        return;
 }
 
+
 Eina_Bool setting_update_datefield(void *cb)
 {
        SETTING_TRACE_BEGIN;
        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;
 }
@@ -1071,14 +1304,14 @@ setting_time_main_click_softkey_caller_exist_left_cb(void *data,
        SettingTimeUG *ad = (SettingTimeUG *) data;
 
        /*  Create Bundle and send message */
-       bundle *b = NULL;
-       b = bundle_create();
-
-       if (!b)
+       service_h svc;
+       if (service_create(&svc))
                return;
-       bundle_add(b, "result", "lbutton_click");
-       ug_send_result(ad->ug, b);
-       bundle_free(b);
+
+       service_add_extra_data(svc, "result", "lbutton_click");
+       ug_send_result(ad->ug, svc);
+
+       service_destroy(svc);
 
        /* Send destroy request */
        ug_destroy_me(ad->ug);
@@ -1096,19 +1329,20 @@ setting_time_main_click_softkey_caller_exist_right_cb(void *data,
        SettingTimeUG *ad = (SettingTimeUG *) data;
 
        /*  Create Bundle and send message */
-       bundle *b = NULL;
-       b = bundle_create();
-
-       if (!b)
+       service_h svc;
+       if (service_create(&svc))
                return;
-       bundle_add(b, "result", "rbutton_click");
-       ug_send_result(ad->ug, b);
-       bundle_free(b);
+
+       service_add_extra_data(svc, "result", "rbutton_click");
+       ug_send_result(ad->ug, svc);
+
+       service_destroy(svc);
 
        /* Send destroy request */
        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)
 {
@@ -1127,6 +1361,26 @@ 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");
+       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);
+       }
+       __update_time_via_sim_card(ad);
+}
 
 static void
 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
@@ -1154,11 +1408,9 @@ setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
                setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
                                         &bvalue, &err);
                if (bvalue) {
-                       (void)
-                           setting_set_bool_slp_key
-                           (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
-                            SETTING_ON_OFF_BTN_OFF, &err);
+                       (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
                        elm_check_state_set(ad->chk_auto, 0);
+
                        if (ad->data_tz) {
                                setting_enable_genlist_item(ad->data_tz->item);
                        }
@@ -1168,25 +1420,24 @@ setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
                                setting_enable_evas_object(ad->data_time->eo_check);
                                setting_enable_genlist_item(ad->data_time->item);
                        }
-                       
+
                } else {
+#if UN_SUPPORT_TIME_DYNAMIC_UPDATE
                        ad->pop =
-                           setting_create_popup_with_btn(ad, ad->win_get,
-                                                _
-                                                ("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
-                                                NULL,
+                           setting_create_popup_with_btn(ad, ad->win_get, NULL,
+                                                _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
                                                 setting_time_reboot_resp_cb,
                                                 0, 2,
-                                             dgettext("sys_string",
+                                                dgettext("sys_string",
                                                       "IDS_COM_SK_OK"),
                                                 _("IDS_COM_SK_CANCEL"));
+#else
+                       __time_auto_update(ad);
+#endif
                }
-
        }
 }
-
-static void
-setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
+static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
                                           void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -1202,30 +1453,28 @@ setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
        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_popup_without_title(ad, ad->win_get,
-                                                         _("Automatic time update is ON!"));
+                       setting_create_simple_popup(ad, ad->win_get,
+                                                   NULL, _(AUTO_TIME_UPDATE_ON));
                } else {
                        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_popup_without_title(ad, ad->win_get,
-                                                         _("Automatic time update is ON!"));
+                       setting_create_simple_popup(ad, ad->win_get,
+                                                   NULL, _(AUTO_TIME_UPDATE_ON));
                } else {
-                       // do nothing
+                       /* 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 */
@@ -1237,7 +1486,7 @@ setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
                            setting_set_bool_slp_key
                            (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
                             SETTING_ON_OFF_BTN_OFF, &err);
-                       
+
                        if (ad->data_tz) {
                                setting_enable_genlist_item(ad->data_tz->item);
                        }
@@ -1247,27 +1496,32 @@ setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
                                setting_enable_evas_object(ad->data_time->eo_check);
                                setting_enable_genlist_item(ad->data_time->item);
                        }
-                       
+
                } else {
+                       #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
                        ad->pop =
-                           setting_create_popup_with_btn(ad, ad->win_get,
+                           setting_create_popup_with_btn(ad, ad->win_get, NULL,
                                                 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
-                                                NULL,
                                                 setting_time_reboot_resp_cb,
                                                 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)
-                  || !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);
        }
 }
 
+
 void setting_time_main_btn_update_ok_cb(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -1284,6 +1538,7 @@ void setting_time_main_btn_update_ok_cb(void *cb)
        /*  It will return 0 on success or -1 if failed. */
 }
 
+
 void setting_time_main_btn_update_cancel_cb(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -1299,6 +1554,7 @@ void setting_time_main_btn_update_cancel_cb(void *cb)
 
 }
 
+
 static UChar *uastrcpy(const char *chars)
 {
        int len = 0;
@@ -1311,13 +1567,11 @@ static UChar *uastrcpy(const char *chars)
        return str;
 }
 
-/**
- * @todo how do this code represent error? 
- */ 
+
 static int get_timezone_isdst(int* isdst)
 {
        SETTING_TRACE_BEGIN;
-    struct tm *ts; 
+    struct tm *ts;
     time_t ctime;
 
     enum { BUFFERSIZE = 1024 };
@@ -1338,12 +1592,13 @@ static int get_timezone_isdst(int* isdst)
        }
 
     SETTING_TRACE(" == tz_path = %s", buf);
-    SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst); 
+    SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst);
        *isdst = ts->tm_isdst;
-       
-       return SETTING_RETURN_SUCCESS; 
+
+       return SETTING_RETURN_SUCCESS;
 }
 
+
 static void ICU_set_timezone(const char *timezone)
 {
        SETTING_TRACE("ICU_set_timezone = %s ", timezone);
@@ -1360,23 +1615,149 @@ 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)
 {
-        SETTING_TRACE_BEGIN;
-        setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
-        setting_retm_if(label == NULL, "label parameter is NULL");
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
+       setting_retm_if(label == NULL, "label parameter is NULL");
 
-        Evas_Object *eo_lbtn = NULL;
-        Elm_Object_Item *first_item = NULL;
+       Evas_Object *eo_lbtn = NULL;
+       Elm_Object_Item *first_item = NULL;
 
-        first_item = elm_toolbar_first_item_get(controlbar);
-        setting_retm_if(first_item == NULL, "get first_item failed");
+       first_item = elm_toolbar_first_item_get(controlbar);
+       setting_retm_if(first_item == NULL, "get first_item failed");
 
        eo_lbtn = elm_object_item_part_content_get(first_item, "object");
+       setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
+
+       elm_object_text_set(eo_lbtn, label);
+}
+#endif
+
+/**
+ * ex) timezone : Asia/Seoul --> returns "+09"
+ *
+ * char outstr2[4];
+ */
+static void get_gmt_offset(char *str_buf, int size)
+{
+       // timezone string +/-<n> ex. +9, -1
+       time_t t = time(0);     // get unix time. sec.
+
+       struct tm* data;
+       data = localtime(&t);           // save time as structure.
+       setting_retm_if(!data, "data is NULL");
+       data->tm_isdst = 0;                     // summer time, not applied.
+       time_t a = mktime(data);
 
-        setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
+       data = gmtime(&a);
+       data->tm_isdst = 0;                     // summer time, not applied.
+       time_t b = mktime(data);
 
-        elm_object_text_set(eo_lbtn, label);
+       int gmtoffset_hour = (a-b)/3600;        // result : hour.
+       int gmtoffset_min = ((a-b)%3600)/60;    // result : min.
+       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);
 }
+
+
+// automatic
+static char* get_timezone_str()
+{
+    SETTING_TRACE_BEGIN;
+
+    enum { BUFFERSIZE = 1024 };
+    char buf[BUFFERSIZE];
+    ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
+
+    if (len != -1) {
+        buf[len] = '\0';
+    }
+    else {
+        /* handle error condition */
+    }
+    return g_strdup(buf+20);           //Asia/Seoul
+}
+
+static char* get_city_name_result()
+{
+       return s_result;
+}
+
+
+// in_str = "Asia/Seoul"
+static bool get_city_name(char* tzname)
+{
+       sqlite3 *pSQLite3 = NULL;
+       char    *szErrMsg = NULL;
+
+       int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
+       if ( rst )
+       {
+               printf( "Can't open database: %s\n", sqlite3_errmsg( pSQLite3 ));
+               sqlite3_close( pSQLite3 );
+               pSQLite3 = NULL;
+               return false;
+       }
+       else
+       {
+               printf("Database opened!!\n");
+               char query_str[256];
+               snprintf(query_str, 256, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
+               printf("%s \n", query_str);
+               rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
+       }
+
+       //객체해제
+       sqlite3_free( szErrMsg );
+       sqlite3_close( pSQLite3 );
+       printf("Database close!!\n");
+       return true;
+}
+
+static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
+{
+    int i = 0;
+    printf("%s\n", argv[i] ? argv[i] : "NULL");
+       s_result = g_strdup(argv[i] ? argv[i] : "NULL");
+    return 0;
+};
+
+
+#if 0                  /* example */
+int main(int argc, char* argv[])
+{
+       g_type_init ();
+       int ret;
+       // exporting - current status
+       if ( (argc == 2) && (0 == strcmp(argv[1], "export"))) {
+                       setting_export();
+       }
+       else if ( (argc == 2) && (0 == strcmp(argv[1], "timezone_init"))) {
+
+               //////////////////////////////////////////////////////////////////////////
+               char* tz_path_zone_city = get_timezone_str();
+               bool ret = get_city_name(tz_path_zone_city);
+               if (ret) {
+                       printf(">>>>>> RESULT : %s \n", get_city_name_result());
+               }
+               //////////////////////////////////////////////////////////////////////////
+       }
+       else {
+               // cfg create
+               // TRUE or FALSE
+               ret = setting_cfg_create();
+       }
+       return 0;
+}
+#endif
+
+
+