4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include <setting-time-main.h>
23 #include <dd-deviced-managed.h>
24 #include <dd-deviced.h>
34 #include <vconf-keys.h>
36 #include <unicode/udat.h>
37 #include <unicode/ustring.h>
38 #include <unicode/uloc.h>
39 #include <unicode/ucal.h>
40 #include <unicode/utmscale.h>
43 #define PROGRESS_POPUP_SHOW 0
44 #define DEF_BUF_SIZE 256
47 static UChar *uastrcpy(const char *chars);
48 static void ICU_set_timezone(const char *timezone);
49 static void get_gmt_offset(char *str_buf, int size);
51 static char* get_timezone_str();
52 static char* get_city_name_result();
53 static bool get_city_name(char* tzname);
54 static char* get_timezone_displayname();
56 static char* s_result;
57 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
58 static bool setting_update_timezone(SettingTimeUG *ad);
60 static int setting_time_main_create(void *cb);
61 static int setting_time_main_destroy(void *cb);
62 static int setting_time_main_update(void *cb);
63 static int setting_time_main_cleanup(void *cb);
65 setting_view setting_view_time_main = {
66 .create = setting_time_main_create,
67 .destroy = setting_time_main_destroy,
68 .update = setting_time_main_update,
69 .cleanup = setting_time_main_cleanup,
72 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
73 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
77 bool __update_timezone_idler(SettingTimeUG *ad)
79 setting_update_timezone(ad);
80 ecore_idler_del(ad->update_timezone_idler);
81 ad->update_timezone_idler = NULL;
85 void time_changed_callback(keynode_t *key, void *data) {
87 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
88 SettingTimeUG *ad = (SettingTimeUG *)data;
90 int ret = setting_time_update_cb(ad);
92 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
96 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
97 if(EINA_TRUE == ad->is_datefield_selected) {
98 /* Timezone is not changed and a selected value of the datefield is already changed */
99 SETTING_TRACE("Datefield is selected\n");
105 // vconfset to update timezone
106 char pTZPath[__MAX_PATH_SIZE];
107 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
109 pTZPath[nLen] = '\0';
111 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
115 if (!__setting_set_city_tzone(&pTZPath[20])) {
116 SETTING_TRACE("__setting_set_city_tzone ERROR");
119 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
120 setting_retm_if(timezone == NULL, "get vonf failed");
121 ICU_set_timezone(timezone);
125 if (ad->update_timezone_idler) {
126 ecore_idler_del(ad->update_timezone_idler);
127 ad->update_timezone_idler = NULL;
129 ad->update_timezone_idler =
130 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
132 if (ad->refresh_time_idler) {
133 ecore_idler_del(ad->refresh_time_idler);
134 ad->refresh_time_idler = NULL;
136 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
139 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
149 char time_str[MAX_ARGS];
152 ts = localtime_r(&ctime, &ts_ret);
155 /* set time in particular format */
156 ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
157 if (ret == SETTING_RETURN_FAIL)
158 value = VCONFKEY_TIME_FORMAT_12;
161 case VCONFKEY_TIME_FORMAT_12:
164 strftime(time_str, MAX_ARGS, "%l:%M %p ", &ts_ret);
168 case VCONFKEY_TIME_FORMAT_24:
170 strftime(time_str, MAX_ARGS, "%H:%M", &ts_ret);
179 elm_object_item_data_set(ad->data_time->item, ad->data_time);
180 elm_genlist_item_update(ad->data_time->item);
184 bool setting_update_timezone(SettingTimeUG *ad)
186 /* SETTING_TRACE_BEGIN; */
187 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
188 char *displayTimezone = NULL;
189 char gmt_offset[GMT_BUF_SIZE] = {0, };
193 displayTimezone = get_timezone_displayname();
194 get_gmt_offset(gmt_offset, GMT_BUF_SIZE);
196 if (displayTimezone != NULL ) {
197 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
198 displayTimezone, gmt_offset);
201 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "Korean Standard Time, GMT +9:00");
204 SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
207 ad->data_tz->sub_desc = (char *)g_strdup(time_zone_sub_str);
208 elm_object_item_data_set(ad->data_tz->item, ad->data_tz);
209 elm_genlist_item_update(ad->data_tz->item);
212 FREE(displayTimezone);
217 static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
220 ret_if(NULL == data);
221 SettingTimeUG *ad = data;
223 char *vconf_name = vconf_keynode_get_name(key);
224 /* SETTING_TRACE("vconf_name:%s", vconf_name); */
226 if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224) ||
227 !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DATE_FORMAT_INT)) {
229 static char time_arr[DEF_BUF_SIZE];
230 char *pa_time_format = get_pa_time_format_str();
231 if(!strncmp(pa_time_format, "IDS_COM_BODY_12_HOURS", strlen("IDS_COM_BODY_12_HOURS")))
232 time = __setting_phone_lang_get_by_pattern("en_US", "hhmm");
234 time = __setting_phone_lang_get_by_pattern("en_US", "Hm");
236 strncpy(time_arr, time, DEF_BUF_SIZE);
237 time_arr[DEF_BUF_SIZE-1] = '\0';
239 elm_object_text_set(ad->data_time->btn_right, time_arr);
240 FREE(pa_time_format);
244 static void __update_time_via_sim_card(void *data)
246 setting_retm_if(data == NULL, "Data parameter is NULL");
247 SettingTimeUG *ad = (SettingTimeUG *) data;
251 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
252 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
253 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
254 if (ret != 0 || isEmptyStr(tzpath))
256 //setting_create_simple_popup(ad, ad->ly_main,
257 // NULL, _(NOT_SUPPORT_AUTO_UPDATE_DESC));
263 SETTING_TRACE("tz_path:%s", tzpath);
265 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
266 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
267 g_strlcat(tz_path, tzpath, sizeof(tz_path));
268 SETTING_TRACE("full tz_path:%s", tz_path);
269 ret = deviced_set_timezone(tz_path);
271 SETTING_TRACE("tzpath is not valid.");
274 SETTING_TRACE("deviced_set_timezone - successful : %s \n", tz_path);
275 if (!__setting_set_city_tzone(tzpath)) {
276 SETTING_TRACE("__setting_set_city_tzone ERROR")
279 get_city_name(tzpath);
280 char* city = get_city_name_result();
281 SETTING_TRACE("city:%s", city);
284 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
285 setting_retm_if(ret != 0, "set vconf[%s] failed", VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
287 setting_update_timezone(ad);
291 FILE *fp = fopen("/proc/uptime", "r");
293 if (!fscanf(fp, "%d", &t_uptime)) {
294 SETTING_TRACE_ERROR("fscanf error");
299 SETTING_TRACE_ERROR("fopen error");
302 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
303 time_t t_current = t_nitz + t_uptime - t_offset;
304 SETTING_TRACE("t_current:%d", t_current);
305 ret = deviced_set_datetime(t_current);
306 setting_retm_if(ret == -1, "deviced_set_datetime call failed");
309 struct tm *ts = localtime_r(&t_current, &ts_ret);
311 setting_enable_evas_object(ad->data_time->btn_left);
312 setting_enable_evas_object(ad->data_time->btn_right);
315 // time change - event
316 static int t_event_val = -1;
317 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
323 static void setting_time_main_bool_vconf_change_cb(keynode_t *key, void *data)
325 /* SETTING_TRACE_BEGIN; */
326 ret_if(NULL == data);
327 SettingTimeUG *ad = data;
328 int status = vconf_keynode_get_bool(key);
329 char *vconf_name = vconf_keynode_get_name(key);
331 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL)) {
333 ad->is_datefield_selected = EINA_FALSE;
335 setting_update_gl_item_chk_status(ad->data_auto, status);
337 if (!ad->data_auto->chk_status) {
339 setting_enable_genlist_item(ad->data_tz->item);
343 ad->data_time->isItemDisableFlag = FALSE;
344 //setting_ensable_evas_object(ad->data_time->eo_check);
345 setting_enable_evas_object(ad->data_time->btn_left);
346 setting_enable_evas_object(ad->data_time->btn_right);
347 setting_enable_genlist_item(ad->data_time->item);
352 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
354 setting_create_popup_with_btn(ad, ad->win_get, NULL,
355 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
356 setting_time_reboot_resp_cb,
358 dgettext("sys_string", "IDS_COM_SK_OK"),
359 _("IDS_COM_SK_CANCEL"));
362 setting_disable_genlist_item(ad->data_tz->item);
366 ad->data_time->isItemDisableFlag = FALSE;
367 //setting_disable_evas_object(ad->data_time->eo_check);
368 setting_disable_evas_object(ad->data_time->btn_left);
369 setting_disable_evas_object(ad->data_time->btn_right);
370 setting_disable_genlist_item(ad->data_time->item);
373 __update_time_via_sim_card(ad);
380 static void __sim_time_info_chg_cb(keynode_t *key, void *data)
383 ret_if(NULL == data);
384 SettingTimeUG *ad = data;
385 char *vconf_name = vconf_keynode_get_name(key);
386 /*SETTING_TRACE("vconf_name:%s", vconf_name);*/
387 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_GMT)
388 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_EVENT_GMT)
389 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_ZONE)) {
392 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
399 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
400 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
401 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
402 if (ret != 0 || isEmptyStr(tzpath))
405 setting_disable_genlist_item(ad->data_auto->item);
408 setting_enable_genlist_item(ad->data_tz->item);
411 setting_enable_genlist_item(ad->data_time->item);
418 setting_enable_genlist_item(ad->data_auto->item);
421 setting_disable_genlist_item(ad->data_tz->item);
424 setting_disable_genlist_item(ad->data_time->item);
427 __update_time_via_sim_card(ad);
433 static int __setting_time_check_enable_automatic_update()
435 //to read TAPI vconfs
439 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
440 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
441 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
442 if (ret == 0 && !isEmptyStr(tzpath))
449 /* ***************************************************
453 ***************************************************/
454 static void setting_time_main_datefield_set_cb(void *data, Evas_Object *object, void *event_info)
457 SETTING_TRACE("SETTING_DATETIME");
460 //Setting_GenGroupItem_Data *item_data = param->item_data;
462 ret_if(data == NULL);
463 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
464 SettingTimeUG *ad = list_item->userdata;
466 Evas_Object* obj = list_item->eo_check; /* elm_datetime_add */
470 elm_object_signal_emit(list_item->eo_check /* elm_datetime_xxx*/, "picker,action,value,set", "");
472 SETTING_TRACE_ERROR("list_item->eo_check is NULL");
475 ad->is_datefield_selected = EINA_TRUE;
477 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
478 if (ad->update_timer) {
479 ecore_timer_reset(ad->update_timer);
480 ecore_timer_freeze(ad->update_timer);
484 // If auto update is on, don't anything while the datefield has been updated (i.e., time runs)
485 if (1 == setting_time_check_automatic_time_update_state()) {
486 SETTING_TRACE("AUTO_TIME ON: no action");
488 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
489 if (ad->update_timer) {
490 ecore_timer_thaw(ad->update_timer);
497 elm_datetime_value_get(obj, &_tm);
499 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
500 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
505 /* local time -> gmtime */
506 time_t the_time = mktime(&_tm); /* represent local time */
508 // invoke API to change time
509 int ret = deviced_set_datetime(the_time);
511 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
512 if (ad->update_timer) {
513 ecore_timer_thaw(ad->update_timer);
518 time_t cctime = time(NULL);
520 struct tm *ts = localtime_r(&cctime, &ts_ret);
521 SETTING_TRACE("After deviced_set_datetime() ....year : %d, month : %d, day : %d, hour : %d, min : %d",
522 ts_ret.tm_year, ts_ret.tm_mon, ts_ret.tm_mday, ts_ret.tm_hour, ts_ret.tm_min);
524 Evas_Object *popup = NULL;
525 popup = evas_object_data_get(obj, "popup");
527 evas_object_del(popup);
530 setting_retm_if(ret == -1, "deviced_set_datetime call failed");
533 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
534 Eina_Bool __refresh_date_timer(void *data)
536 //SETTING_TRACE_BEGIN;
537 SettingTimeUG *ad = data;
539 time_t ctime = time(NULL);
541 struct tm *ts = localtime_r(&ctime, &ts_ret);
545 elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
546 if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
548 SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
549 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
550 setting_update_timezone(ad);
557 static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
560 ret_if(NULL == data || NULL == event_info);
562 SettingTimeUG *ad = (SettingTimeUG *) data;
563 Elm_Object_Item *parentItem = event_info; /* parent item */
564 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
565 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
568 if (data_parentItem == ad->data_time_fmt) {
569 setting_genlist_item_groupstyle_set(data_parentItem, data_parentItem->exp_style);
571 rgd = elm_radio_add(scroller);
572 elm_radio_value_set(rgd, -1);
573 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
574 &itc_multiline_1text_1icon,
575 //&(ad->itc_1icon_1text_sub),
576 NULL, NULL, parentItem,
577 SWALLOW_Type_1RADIO, rgd,
578 VCONFKEY_TIME_FORMAT_12,
579 "IDS_COM_BODY_12_HOURS",
580 NULL, SETTING_GROUP_STYLE_CENTER);
582 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
583 &itc_multiline_1text_1icon,
584 // &(ad->itc_1icon_1text_sub),
585 NULL, NULL, parentItem,
586 SWALLOW_Type_1RADIO, rgd,
587 VCONFKEY_TIME_FORMAT_24,
588 "IDS_ST_BODY_24_HOURS",
589 NULL, SETTING_GROUP_STYLE_BOTTOM);
591 setting_update_chk_status(rgd,
592 data_parentItem->int_slp_setting_binded);
594 } else if (data_parentItem == ad->data_date_fmt) {
595 rgd = elm_radio_add(scroller);
596 elm_radio_value_set(rgd, -1);
597 setting_create_Gendial_exp_sub_field(scroller,
598 &itc_multiline_1text_1icon,
599 // &(ad->itc_1icon_1text_sub),
600 NULL, NULL, parentItem,
601 SWALLOW_Type_1RADIO, rgd,
602 SETTING_DATE_FORMAT_DD_MM_YYYY,
603 "IDS_ST_BODY_DDMMYYYY_DOT",
606 setting_create_Gendial_exp_sub_field(scroller,
607 &itc_multiline_1text_1icon,
608 // &(ad->itc_1icon_1text_sub),
609 NULL, NULL, parentItem,
610 SWALLOW_Type_1RADIO, rgd,
611 SETTING_DATE_FORMAT_MM_DD_YYYY,
612 "IDS_ST_BODY_MM_DD_YYYY_DOT",
615 setting_create_Gendial_exp_sub_field(scroller,
616 &itc_multiline_1text_1icon,
617 // &(ad->itc_1icon_1text_sub),
618 NULL, NULL, parentItem,
619 SWALLOW_Type_1RADIO, rgd,
620 SETTING_DATE_FORMAT_YYYY_MM_DD,
621 "IDS_COM_BODY_YYYYMMDD",
624 setting_create_Gendial_exp_sub_field(scroller,
625 &itc_multiline_1text_1icon,
626 // &(ad->itc_1icon_1text_sub),
627 NULL, NULL, parentItem,
628 SWALLOW_Type_1RADIO, rgd,
629 SETTING_DATE_FORMAT_YYYY_DD_MM,
630 "IDS_ST_BODY_YYYY_DD_MM_DOT",
633 setting_update_chk_status(rgd,
634 data_parentItem->int_slp_setting_binded);
636 } else if (data_parentItem == ad->data_firstday_week_fmt) {
637 rgd = elm_radio_add(scroller);
638 elm_radio_value_set(rgd, -1);
639 setting_create_Gendial_exp_sub_field(scroller,
640 &itc_multiline_1text_1icon,
641 // &(ad->itc_1icon_1text_sub),
642 NULL, rgd, parentItem,
643 SWALLOW_Type_1RADIO, rgd,
644 SETTING_WEEKOFDAY_FORMAT_SUNDAY,
645 "IDS_ST_BODY_SUNDAY", NULL);
647 setting_create_Gendial_exp_sub_field(scroller,
648 &itc_multiline_1text_1icon,
649 // &(ad->itc_1icon_1text_sub),
650 NULL, rgd, parentItem,
651 SWALLOW_Type_1RADIO, rgd,
652 SETTING_WEEKOFDAY_FORMAT_MONDAY,
653 "IDS_ST_BODY_MONDAY", NULL);
655 setting_update_chk_status(rgd,
656 data_parentItem->int_slp_setting_binded);
660 static int setting_time_main_create(void *cb)
663 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
665 SettingTimeUG *ad = (SettingTimeUG *) cb;
668 char *title = _(DATE_TIME_STR_DATE_AND_TIME);
670 ad->is_datefield_selected = EINA_FALSE;
672 app_control_h service = ad->bundle_data;
674 app_control_get_extra_data(service, "caller", &caller);
675 app_control_get_extra_data(service, "title", &title);
677 Evas_Object *scroller; /* scroller is a genlist */
681 l_btn = _("IDS_COM_BODY_BACK");
682 title = DATE_TIME_STR_DATE_AND_TIME;
683 gchar* title_str = NULL;
689 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
690 ad->win_get, title_str,
692 setting_time_main_click_softkey_left_cb,
696 ad->scrl_main = scroller;
697 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
702 Elm_Object_Item *item;
704 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
705 ELM_GENLIST_ITEM_NONE, NULL, NULL);
706 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
707 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
710 //int enable_automatic = __setting_time_check_enable_automatic_update();
711 bool auto_flag = value;
713 if(auto_flag) //do special process only when auto mode
715 //to read TAPI vconfs
719 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
720 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
721 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
722 if (ret == 0 && !isEmptyStr(tzpath))
724 //1.to update timezone
725 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
726 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
727 g_strlcat(tz_path, tzpath, sizeof(tz_path));
728 SETTING_TRACE("full tz_path:%s", tz_path);
729 ret = deviced_set_timezone(tz_path);
731 SETTING_TRACE("tzpath is not valid.");
733 SETTING_TRACE("deviced_set_timezone - successful : %s \n", tz_path);
734 if (!__setting_set_city_tzone(tzpath)) {
735 SETTING_TRACE("__setting_set_city_tzone ERROR")
737 get_city_name(tzpath);
738 char* city = get_city_name_result();
739 SETTING_TRACE("city:%s", city);
740 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
742 // 2.to set current time
744 FILE *fp = fopen("/proc/uptime", "r");
746 if (!fscanf(fp, "%d", &t_uptime)) {
747 SETTING_TRACE_ERROR("fscanf error");
752 SETTING_TRACE_ERROR("fopen error");
755 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
756 time_t t_current = t_nitz + t_uptime - t_offset;
757 SETTING_TRACE("t_current:%d", t_current);
758 ret = deviced_set_datetime(t_current);
764 //if (!isEmulBin()) {
766 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
767 setting_time_main_mouse_up_Gendial_list_cb,
768 ad, SWALLOW_Type_1ICON_1RADIO, NULL,
770 DATE_TIME_STR_AUTOMATIC_UPDATE, NULL,
771 setting_time_main_chk_btn_cb);
773 ad->data_auto->userdata = ad;
775 SETTING_TRACE_ERROR("ad->data_auto is NULL");
778 //ADD_GL_HELP(scroller,SETTING_TIME_AUTO_UPDATE_DESC);
782 /* create DATE_AND_TIME */
784 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
785 setting_time_main_mouse_up_Gendial_list_cb,
786 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
788 DATE_TIME_STR_DATE_AND_TIME,
792 ad->data_time->userdata = ad;
793 ad->data_time->nf= ad->navi_bar;
794 ad->data_time->isItemDisableFlag = auto_flag;
795 ad->data_time->activated_cb = setting_time_main_datefield_set_cb;
796 elm_genlist_item_select_mode_set(ad->data_time->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
798 Elm_Object_Item *item = elm_genlist_item_append(scroller, &(itc_bottom_line), NULL, NULL,
799 ELM_GENLIST_ITEM_NONE, NULL, NULL);
800 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
803 SETTING_TRACE_ERROR("ad->data_time is NULL");
806 //ADD_GL_SEPARATOR(scroller);
807 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
808 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
809 char *displayTimezone = NULL;
811 displayTimezone = get_timezone_displayname();
813 if (displayTimezone != NULL) {
815 // don't use hard coded value
816 // get value from current timezone
818 char str_buf[GMT_BUF_SIZE] = {0, };
819 get_gmt_offset(str_buf, GMT_BUF_SIZE);
821 char* timezone_str = get_timezone_str();
823 SETTING_TRACE("timezone : %s, displayTimezone :%s, gmt_offset : %s",
824 timezone_str, displayTimezone, _(str_buf));
825 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
826 displayTimezone, _(str_buf));
832 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "Korean Standard Time, GMT +9:00");
835 FREE(displayTimezone);
837 /* UI create time zone */
839 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
840 setting_time_main_mouse_up_Gendial_list_cb,
841 ad, SWALLOW_Type_INVALID, NULL,
842 NULL, 0, DATE_TIME_STR_TIME_ZONE,
843 time_zone_sub_str, NULL);
845 ad->data_tz->userdata = ad;
847 SETTING_TRACE_ERROR("ad->data_tz is NULL");
850 /* UI create "Time format" */
851 setting_enable_expandable_genlist(scroller, ad,
852 __setting_time_main_exp_cb, NULL);
854 char* pa_time_format = get_pa_time_format_str();
855 ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
856 &(ad->itc_2text_3_parent),
857 setting_time_main_mouse_up_Gendial_list_cb,
858 ad, SWALLOW_Type_INVALID,
859 DATE_TIME_STR_TIME_FORMAT,
861 SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_NONE);
862 if (ad->data_time_fmt) {
863 ad->data_time_fmt->int_slp_setting_binded =
864 INT_SLP_SETTING_REGIONFORMAT_TIME1224;
865 ad->data_time_fmt->group_style = SETTING_GROUP_STYLE_NONE;
867 if(ad->is_expand_time_format_list && ad->data_time_fmt->item ) {
868 elm_genlist_item_expanded_set(ad->data_time_fmt->item, TRUE);
871 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
873 G_FREE(pa_time_format);
875 #if APPLIED_DATATIME_DATA_FORMAT
876 char* pa_date_format = get_pa_date_format_str();
877 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
878 &(ad->itc_2text_3_parent),
879 setting_time_main_mouse_up_Gendial_list_cb,
880 ad, SWALLOW_Type_INVALID,
881 DATE_TIME_STR_TIME_FORMAT,
882 pa_time_format,SETTING_GROUP_STYLE_CENTER,
883 SETTING_GROUP_STYLE_CENTER);
884 if (ad->data_date_fmt) {
885 ad->data_date_fmt->int_slp_setting_binded =
886 INT_SLP_SETTING_DATE_FORMAT;
888 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
890 G_FREE(pa_date_format);
893 #if APPLIED_DATATIME_FIRSTDAY_WEEK
894 char* pa_week = get_pa_week_format_str();
895 ad->data_firstday_week_fmt =
896 setting_create_Gendial_exp_parent_field(scroller,
897 &(ad->itc_2text_3_parent),
898 setting_time_main_mouse_up_Gendial_list_cb,
899 ad, SWALLOW_Type_INVALID,
900 "IDS_CLD_BODY_FIRST_DAY_OF_WEEK",
901 pa_week,SETTING_GROUP_STYLE_CENTER,
902 SETTING_GROUP_STYLE_BOTTOM);
903 if (ad->data_firstday_week_fmt) {
904 ad->data_firstday_week_fmt->int_slp_setting_binded =
905 INT_SLP_SETTING_WEEK_FORMAT;
907 SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
912 //item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
913 // ELM_GENLIST_ITEM_NONE, NULL, NULL);
914 //elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
917 if (!enable_automatic) {
919 setting_disable_genlist_item(ad->data_auto->item);
927 setting_disable_genlist_item(ad->data_tz->item);
930 setting_disable_genlist_item(ad->data_time->item);
934 setting_view_time_main.is_create = 1;
935 vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad);
937 /* register vconf key to get event callback for converting 12/24H */
938 vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb, ad);
939 /* register vconf key to get event callback for date format */
940 vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb, ad);
942 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb, ad);
943 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb, ad);
944 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb, ad);
946 vconf_notify_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
947 setting_time_main_bool_vconf_change_cb, ad);
949 /* to avoid update time-diff, every per 3s to update. */
950 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
951 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
953 return SETTING_RETURN_SUCCESS;
956 static int setting_time_main_destroy(void *cb)
960 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
962 SettingTimeUG *ad = (SettingTimeUG *) cb;
964 // __finalize_resource(ad);
968 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
969 if (ad->update_timer) {
970 ecore_timer_del(ad->update_timer);
971 ad->update_timer = NULL;
975 #if PROGRESS_POPUP_SHOW
976 if (ad->pop_progress) {
977 evas_object_del(ad->pop_progress);
978 ad->pop_progress = NULL;
982 if (ad->update_timezone_idler) {
983 ecore_idler_del(ad->update_timezone_idler);
984 ad->update_timezone_idler = NULL;
988 if (ad->refresh_time_idler) {
989 ecore_idler_del(ad->refresh_time_idler);
990 ad->refresh_time_idler = NULL;
993 vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
994 time_changed_callback);
996 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
997 setting_time_main_int_vconf_change_cb);
998 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
999 setting_time_main_int_vconf_change_cb);
1001 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb);
1002 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb);
1003 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb);
1005 vconf_ignore_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
1006 setting_time_main_bool_vconf_change_cb);
1008 if (ad->ly_main != NULL) {
1009 evas_object_del(ad->ly_main);
1011 setting_view_time_main.is_create = 0;
1014 return SETTING_RETURN_SUCCESS;
1017 static int setting_time_main_update(void *cb)
1019 SETTING_TRACE_BEGIN;
1020 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1022 SettingTimeUG *ad = (SettingTimeUG *) cb;
1024 if (ad->ly_main != NULL) {
1025 evas_object_show(ad->ly_main);
1027 if (ad->update_timezone_idler) {
1028 ecore_idler_del(ad->update_timezone_idler);
1029 ad->update_timezone_idler = NULL;
1031 ad->update_timezone_idler =
1032 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
1034 if (ad->refresh_time_idler) {
1035 ecore_idler_del(ad->refresh_time_idler);
1036 ad->refresh_time_idler = NULL;
1038 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
1040 return SETTING_RETURN_SUCCESS;
1043 static int setting_time_main_cleanup(void *cb)
1045 SETTING_TRACE_BEGIN;
1046 return SETTING_RETURN_SUCCESS;
1050 /* ***************************************************
1054 ****************************************************/
1056 int setting_time_check_automatic_time_update_state()
1058 SETTING_TRACE_BEGIN;
1062 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1069 static int __setting_set_city_tzone(const char* pTZPath)
1071 // let's get city & timezone string from pTZPath
1073 char szTimezone[GMT_BUF_SIZE] = {0,};
1074 char* pStr = strdup(pTZPath);
1076 // 2. timezone string +/-<n> ex. +9, -1
1077 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
1080 /** @todo replace with vconf ID */
1081 vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
1088 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
1089 app_control_h result, void *priv)
1091 SETTING_TRACE_BEGIN;
1093 retm_if(priv == NULL, "Data parameter is NULL");
1095 SettingTimeUG *ad = (SettingTimeUG *) priv;
1098 char *tzpath = NULL;
1099 app_control_get_extra_data(result, "city", &city);
1100 app_control_get_extra_data(result, "tzpath", &tzpath);
1103 SETTING_TRACE("tzpath from worldclock UG is null.");
1106 SETTING_TRACE("tzpath : %s", tzpath );
1108 SETTING_TRACE("city : %s", city );
1110 /* --------------------------------------------------------------------- */
1111 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
1112 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1113 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1114 SETTING_TRACE("full tz_path:%s", tz_path);
1116 int ret = deviced_set_timezone(tz_path);
1118 SETTING_TRACE("tzpath is not valid.");
1125 SETTING_TRACE("deviced_set_timezone - successful : %s \n", tz_path);
1127 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1128 setting_retm_if(ret != 0, "set vconf failed");
1130 // parse city and GMT offset from tzpath and system time property
1131 // set the strings in vconf which will be used while updating display of timezone
1132 if (!__setting_set_city_tzone(tzpath)) {
1133 SETTING_TRACE("__setting_set_city_tzone ERROR");
1141 // update the display for timezone
1142 setting_update_timezone(ad);
1143 static int t_event_val = -1;
1144 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
1152 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
1155 SETTING_TRACE_BEGIN;
1156 /* if(ug) ug_destroy(ug); */
1157 /* restore the '<-' button on the navigate bar */
1159 SettingTimeUG *ad = (SettingTimeUG *) priv;
1161 setting_ug_destroy(ug);
1162 ad->ug_loading = NULL;
1164 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1166 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1168 if (back_btn != NULL) {
1169 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1172 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1175 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1179 SETTING_TRACE_BEGIN;
1180 //SettingTimeUG *ad = (SettingTimeUG *) priv;
1186 base = (Evas_Object *) ug_get_layout(ug);
1191 case UG_MODE_FULLVIEW:
1192 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1194 //elm_win_resize_object_add(ad->win_get, base);
1195 evas_object_show(base);
1204 void setting_time_main_launch_worldclock_sg(void *data)
1206 SETTING_TRACE_BEGIN;
1208 retm_if(data == NULL, "Data parameter is NULL");
1210 SettingTimeUG *ad = (SettingTimeUG *) data;
1212 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1213 setting_retm_if(!cbs, "calloc failed");
1214 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1215 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1216 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1217 cbs->priv = (void *)ad;
1219 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1220 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1222 setting_ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1223 if (NULL == ad->ug_loading) { /* error handling */
1231 Eina_Bool setting_update_datefield(void *cb)
1233 SETTING_TRACE_BEGIN;
1234 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1235 SettingTimeUG *ad = (SettingTimeUG *) cb;
1237 if (ad->data_time) {
1238 time_t cctime = time(NULL);
1240 struct tm *ts = localtime_r(&cctime, &ts_ret);
1241 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
1242 ts_ret.tm_year, ts_ret.tm_mon, ts_ret.tm_mday, ts_ret.tm_hour, ts_ret.tm_min);
1243 SETTING_TRACE("time : %s", ctime(&cctime));
1247 if(ad->data_time->eo_check)
1248 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1251 char *date = __setting_phone_lang_get_by_pattern("en_US", "MMM/d/yyyy");
1253 static char date_arr[DEF_BUF_SIZE], time_arr[DEF_BUF_SIZE];
1254 char *pa_time_format = get_pa_time_format_str();
1255 if(!strncmp(pa_time_format, "IDS_COM_BODY_12_HOURS", strlen("IDS_COM_BODY_12_HOURS")))
1256 time = __setting_phone_lang_get_by_pattern("en_US", "hhmm");
1258 time = __setting_phone_lang_get_by_pattern("en_US", "Hm");
1260 strncpy(date_arr, date, DEF_BUF_SIZE);
1261 strncpy(time_arr, time, DEF_BUF_SIZE);
1263 date_arr[DEF_BUF_SIZE-1] = '\0';
1264 time_arr[DEF_BUF_SIZE-1] = '\0';
1266 elm_object_text_set(ad->data_time->btn_left, date_arr);
1267 evas_object_resize(ad->data_time->btn_left, 300, -1);
1268 elm_object_text_set(ad->data_time->btn_right, time_arr);
1269 evas_object_resize(ad->data_time->btn_right, 270, -1);
1270 FREE(pa_time_format);
1273 if (ad->refresh_time_idler)
1275 ecore_idler_del(ad->refresh_time_idler);
1276 ad->refresh_time_idler = NULL;
1281 /* ***************************************************
1285 ****************************************************/
1288 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1291 SETTING_TRACE_BEGIN;
1292 retm_if(data == NULL, "Data parameter is NULL");
1294 SettingTimeUG *ad = (SettingTimeUG *) data;
1296 //__finalize_resource(ad);
1298 /* Send destroy request */
1299 ug_destroy_me(ad->ug);
1302 /* ***************************************************
1306 ****************************************************/
1309 setting_time_main_click_softkey_caller_exist_left_cb(void *data,
1313 SETTING_TRACE_BEGIN;
1315 retm_if(data == NULL, "Data parameter is NULL");
1317 SettingTimeUG *ad = (SettingTimeUG *) data;
1319 /* Create Bundle and send message */
1321 if (app_control_create(&svc))
1324 app_control_add_extra_data(svc, "result", "lbutton_click");
1325 ug_send_result(ad->ug, svc);
1327 app_control_destroy(svc);
1329 /* Send destroy request */
1330 ug_destroy_me(ad->ug);
1334 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1338 SETTING_TRACE_BEGIN;
1340 retm_if(data == NULL, "Data parameter is NULL");
1342 SettingTimeUG *ad = (SettingTimeUG *) data;
1344 /* Create Bundle and send message */
1346 if (app_control_create(&svc))
1349 app_control_add_extra_data(svc, "result", "rbutton_click");
1350 ug_send_result(ad->ug, svc);
1352 app_control_destroy(svc);
1354 /* Send destroy request */
1355 ug_destroy_me(ad->ug);
1358 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1359 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
1362 SETTING_TRACE_BEGIN;
1363 int response_type = btn_type(obj);
1364 if (POPUP_RESPONSE_OK == response_type) {
1365 setting_time_main_btn_update_ok_cb(data);
1366 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1367 setting_time_main_btn_update_cancel_cb(data);
1370 SettingTimeUG *ad = data;
1373 evas_object_del(ad->pop);
1379 static void __time_auto_update(void *data)
1381 SETTING_TRACE_BEGIN;
1382 setting_retm_if(data == NULL, "Data parameter is NULL");
1383 SettingTimeUG *ad = (SettingTimeUG *) data;
1385 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1386 SETTING_ON_OFF_BTN_ON, &err);
1388 setting_disable_genlist_item(ad->data_tz->item);
1392 elm_object_text_set(ad->data_time->btn_left, date);
1393 evas_object_resize(ad->data_time->btn_left, 300, -1);
1397 if (ad->data_time) {
1398 ad->data_time->isItemDisableFlag = FALSE;
1399 //setting_disable_evas_object(ad->data_time->eo_check);
1400 setting_disable_evas_object(ad->data_time->btn_left);
1401 setting_disable_evas_object(ad->data_time->btn_right);
1402 setting_disable_genlist_item(ad->data_time->item);
1405 __update_time_via_sim_card(ad);
1410 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1412 SETTING_TRACE_BEGIN;
1414 retm_if(data == NULL, "Data parameter is NULL");
1415 SettingTimeUG *ad = NULL;
1416 Setting_GenGroupItem_Data *list_item =
1417 (Setting_GenGroupItem_Data *) data;
1418 ad = list_item->userdata;
1419 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1420 //if (ad->data_auto)
1421 // ad->chk_auto = ad->data_auto->eo_check;
1424 if (ad->data_time) {
1425 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1430 if (obj == ad->data_auto->eo_check) {
1432 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1435 (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1436 setting_update_gl_item_chk_status(ad->data_auto, 0);
1439 setting_enable_genlist_item(ad->data_tz->item);
1442 if (ad->data_time) {
1443 ad->data_time->isItemDisableFlag = FALSE;
1444 //setting_disable_evas_object(ad->data_time->eo_check);
1445 setting_enable_evas_object(ad->data_time->btn_left);
1446 setting_enable_evas_object(ad->data_time->btn_right);
1447 setting_enable_genlist_item(ad->data_time->item);
1453 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1455 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1456 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1457 setting_time_reboot_resp_cb,
1459 dgettext("sys_string",
1461 _("IDS_COM_SK_CANCEL"));
1463 __time_auto_update(ad);
1470 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1473 SETTING_TRACE_BEGIN;
1475 setting_retm_if(data == NULL, "Data parameter is NULL");
1477 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1478 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1479 elm_genlist_item_selected_set(item, 0);
1480 Setting_GenGroupItem_Data *list_item =
1481 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1483 SettingTimeUG *ad = (SettingTimeUG *) data;
1484 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1487 if (ad->data_time && ad->data_time != list_item) {
1488 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1492 if (ad->data_tz == list_item) {
1493 ad->is_datefield_selected = EINA_FALSE;
1494 if (1 == setting_time_check_automatic_time_update_state()) {
1495 setting_create_simple_popup(ad, ad->win_get,
1496 NULL, _(AUTO_TIME_UPDATE_ON));
1498 setting_time_main_launch_worldclock_sg(ad);
1501 } else if (ad->data_time == list_item) {
1502 ad->is_datefield_selected = EINA_TRUE;
1503 if (1 == setting_time_check_automatic_time_update_state()) {
1504 setting_create_simple_popup(ad, ad->win_get,
1505 NULL, _(AUTO_TIME_UPDATE_ON));
1507 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1509 } else if (ad->data_auto == list_item) {
1510 ad->is_datefield_selected = EINA_FALSE;
1511 int old_status = list_item->chk_status;
1513 setting_update_gl_item_chk_status(list_item, !old_status);
1515 if (!list_item->chk_status) {
1517 setting_set_bool_slp_key
1518 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1519 SETTING_ON_OFF_BTN_OFF, &err);
1522 setting_enable_genlist_item(ad->data_tz->item);
1525 if (ad->data_time) {
1526 ad->data_time->isItemDisableFlag = FALSE;
1527 setting_enable_evas_object(ad->data_time->eo_check);
1528 setting_enable_genlist_item(ad->data_time->item);
1532 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1534 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1535 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1536 setting_time_reboot_resp_cb,
1538 dgettext("sys_string", "IDS_COM_SK_OK"),
1539 _("IDS_COM_SK_CANCEL"));
1541 __time_auto_update(ad);
1546 else if (ad->data_time_fmt == list_item
1547 || ad->data_date_fmt == list_item
1548 || ad->data_firstday_week_fmt == list_item) {
1549 ad->is_datefield_selected = EINA_FALSE;
1550 bool status = !elm_genlist_item_expanded_get(item);
1551 elm_genlist_item_expanded_set(item, status);
1556 void setting_time_main_btn_update_ok_cb(void *cb)
1558 SETTING_TRACE_BEGIN;
1559 SettingTimeUG *ad = (SettingTimeUG *) cb;
1560 int err; /* error check */
1561 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1562 SETTING_ON_OFF_BTN_ON, &err);
1563 setting_update_gl_item_chk_status(ad->data_auto, 1);
1565 deviced_request_reboot();
1567 /* We'd better check return value from deviced_request_reboot() function. */
1568 /* It will return 0 on success or -1 if failed. */
1572 void setting_time_main_btn_update_cancel_cb(void *cb)
1574 SETTING_TRACE_BEGIN;
1575 SettingTimeUG *ad = (SettingTimeUG *) cb;
1577 int err; /* error check */
1579 retm_if(cb == NULL, "Data parameter is NULL");
1580 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1581 SETTING_ON_OFF_BTN_OFF, &err);
1582 setting_update_gl_item_chk_status(ad->data_auto, 0);
1587 static UChar *uastrcpy(const char *chars)
1591 len = safeStrLen(chars);
1592 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1595 u_uastrcpy(str, chars);
1599 static void ICU_set_timezone(const char *timezone)
1601 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1602 UErrorCode ec = U_ZERO_ERROR;
1603 UChar *str = uastrcpy(timezone);
1605 ucal_setDefaultTimeZone(str, &ec);
1606 if (U_SUCCESS(ec)) {
1607 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1609 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1616 * ex) timezone : Asia/Seoul --> returns "+09"
1620 static void get_gmt_offset(char *str_buf, int size)
1622 // timezone string +/-<n> ex. +9, -1
1623 time_t t = time(0); // get unix time. sec.
1626 data = localtime(&t); // save time as structure.
1628 setting_retm_if(!data, "data is NULL");
1630 int gmtoffset_hour = (data->tm_gmtoff)/3600; // result : hour.
1631 int gmtoffset_min = ((data->tm_gmtoff)%3600)/60; // result : min.
1634 if(gmtoffset_min != 0) {
1635 SETTING_TRACE("gmtoffset_min != 0 -------> %d", gmtoffset_min);
1640 //snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
1641 snprintf(str_buf, size, "%+d:%02d", gmtoffset_hour, abs(gmtoffset_min));
1642 SETTING_TRACE_DEBUG("szTimezone is of a valid format: GMT: %s", str_buf);
1644 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, str_buf);
1646 SETTING_TRACE_ERROR("set vconf failed");
1653 static char* get_timezone_str()
1655 SETTING_TRACE_BEGIN;
1657 enum { BUFFERSIZE = 1024 };
1658 char buf[BUFFERSIZE];
1659 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1665 /* handle error condition */
1667 return g_strdup(buf+20); //Asia/Seoul
1670 static char* get_city_name_result()
1676 // in_str = "Asia/Seoul"
1677 static bool get_city_name(char* tzname)
1679 sqlite3 *pSQLite3 = NULL;
1680 char *szErrMsg = NULL;
1682 int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
1685 SETTING_TRACE( "Can't open database: %s", sqlite3_errmsg( pSQLite3 ));
1686 sqlite3_close( pSQLite3 );
1692 SETTING_TRACE("Database opened!!");
1693 char query_str[DEF_BUF_SIZE];
1694 snprintf(query_str, DEF_BUF_SIZE, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1695 SETTING_TRACE("%s \n", query_str);
1696 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1699 sqlite3_free( szErrMsg );
1700 sqlite3_close( pSQLite3 );
1701 SETTING_TRACE("Database close!!\n");
1705 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1708 SETTING_TRACE("%s\n", argv[i] ? argv[i] : "NULL");
1709 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1713 static char* get_timezone_displayname()
1715 SETTING_TRACE_BEGIN;
1717 UErrorCode status = U_ZERO_ERROR;;
1718 UChar displayName[SETTING_STR_SLP_LEN] = {0, };
1719 char* timezone_str = NULL;
1720 const char* localeID = uloc_getDefault();
1723 struct tm* data = localtime(&t);
1725 ICU_set_timezone(get_timezone_str());
1727 UCalendar *cal = ucal_open(NULL, -1, localeID, UCAL_GREGORIAN, &status);
1728 if (U_FAILURE(status))
1729 SETTING_TRACE_ERROR("ucal_open got an error : %d", status);
1731 status = U_ZERO_ERROR;
1733 // get timezone display name (check dst)
1735 ucal_getTimeZoneDisplayName(cal, UCAL_DST, localeID, displayName, SETTING_STR_SLP_LEN, &status);
1737 ucal_getTimeZoneDisplayName(cal, UCAL_STANDARD, localeID, displayName, SETTING_STR_SLP_LEN, &status);
1739 if (U_FAILURE(status))
1740 SETTING_TRACE_ERROR("ucal_getTimeZoneDisplayName got an error : %s, %d", displayName, status);
1741 status = U_ZERO_ERROR;
1749 len = u_strlen(displayName);
1750 len_str = sizeof(char) * 4 * (len + 1);
1751 timezone_str = (char*)calloc(1, len_str);
1752 if (!timezone_str) {
1753 SETTING_TRACE_ERROR("timezone string is null");
1757 u_strToUTF8(timezone_str, len_str, &len_utf8, displayName, len, &status);
1759 SETTING_TRACE("timezone : %s, %s", displayName, timezone_str);
1762 return timezone_str;