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>
32 #include <eventsystem.h>
35 #include <vconf-keys.h>
37 #include <unicode/udat.h>
38 #include <unicode/ustring.h>
39 #include <unicode/uloc.h>
40 #include <unicode/ucal.h>
41 #include <unicode/utmscale.h>
43 #include <eventsystem.h>
44 #include <bundle_internal.h>
45 #include <system_settings.h>
48 #define PROGRESS_POPUP_SHOW 0
49 #define DEF_BUF_SIZE 256
52 static UChar *uastrcpy(const char *chars);
53 static void ICU_set_timezone(const char *timezone);
54 static void get_gmt_offset(char *str_buf, int size);
56 static char *get_timezone_str();
57 static char *get_city_name_result();
58 static bool get_city_name(char *tzname);
59 static char *get_timezone_displayname();
61 static char *s_result;
62 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
63 static bool setting_update_timezone(SettingTimeUG *ad);
64 static void __setting_update_datefield_cb(void *cb);
67 static int setting_time_main_create(void *cb);
68 static int setting_time_main_destroy(void *cb);
69 static int setting_time_main_update(void *cb);
70 static int setting_time_main_cleanup(void *cb);
72 setting_view setting_view_time_main = {
73 .create = setting_time_main_create,
74 .destroy = setting_time_main_destroy,
75 .update = setting_time_main_update,
76 .cleanup = setting_time_main_cleanup,
80 bool __update_timezone_idler(SettingTimeUG *ad)
82 setting_update_timezone(ad);
83 ecore_idler_del(ad->update_timezone_idler);
84 ad->update_timezone_idler = NULL;
88 void time_changed_callback(keynode_t *key, void *data)
91 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
92 SettingTimeUG *ad = (SettingTimeUG *)data;
94 int ret = setting_time_update_cb(ad);
96 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
100 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
101 if (EINA_TRUE == ad->is_datefield_selected) {
102 /* Timezone is not changed and a selected value of the datefield is already changed */
103 SETTING_TRACE("Datefield is selected\n");
109 /* vconfset to update timezone */
110 char pTZPath[__MAX_PATH_SIZE];
111 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath) - 1);
113 pTZPath[nLen] = '\0';
115 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
119 if (!__setting_set_city_tzone(&pTZPath[20])) {
120 SETTING_TRACE("__setting_set_city_tzone ERROR");
123 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
124 setting_retm_if(timezone == NULL, "get vonf failed");
125 ICU_set_timezone(timezone);
128 /* update timezone */
129 if (ad->update_timezone_idler) {
130 ecore_idler_del(ad->update_timezone_idler);
131 ad->update_timezone_idler = NULL;
133 ad->update_timezone_idler =
134 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
136 if (ad->refresh_time_idler) {
137 ecore_idler_del(ad->refresh_time_idler);
138 ad->refresh_time_idler = NULL;
140 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield_cb, ad);
143 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
153 char time_str[MAX_ARGS];
156 ts = localtime_r(&ctime, &ts_ret);
159 /* set time in particular format */
160 ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
161 if (ret == SETTING_RETURN_FAIL)
162 value = VCONFKEY_TIME_FORMAT_12;
165 case VCONFKEY_TIME_FORMAT_12: {
167 strftime(time_str, MAX_ARGS, "%l:%M %p ", &ts_ret);
171 case VCONFKEY_TIME_FORMAT_24: {
172 strftime(time_str, MAX_ARGS, "%H:%M", &ts_ret);
181 elm_object_item_data_set(ad->data_time->item, ad->data_time);
182 elm_genlist_item_update(ad->data_time->item);
186 bool setting_update_timezone(SettingTimeUG *ad)
188 /* SETTING_TRACE_BEGIN; */
189 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
190 char *displayTimezone = NULL;
191 char gmt_offset[GMT_BUF_SIZE] = {0, };
195 displayTimezone = get_timezone_displayname();
196 get_gmt_offset(gmt_offset, GMT_BUF_SIZE);
198 if (displayTimezone != NULL) {
199 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
200 displayTimezone, gmt_offset);
203 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "Korean Standard Time, GMT +9:00");
206 SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
209 ad->data_tz->sub_desc = (char *)g_strdup(time_zone_sub_str);
210 elm_object_item_data_set(ad->data_tz->item, ad->data_tz);
211 elm_genlist_item_update(ad->data_tz->item);
214 FREE(displayTimezone);
219 static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
222 ret_if(NULL == data);
223 SettingTimeUG *ad = data;
225 char *vconf_name = vconf_keynode_get_name(key);
226 /* SETTING_TRACE("vconf_name:%s", vconf_name); */
228 if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224) ||
229 !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DATE_FORMAT_INT)) {
231 static char time_arr[DEF_BUF_SIZE];
232 char *pa_time_format = get_pa_time_format_str();
233 setting_retm_if(NULL == pa_time_format, "pa_time_format is NULL");
236 int err = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &lang);
237 char *date = __setting_phone_lang_get_by_pattern(lang, "MMM/d/yyyy");
239 if (!strncmp(pa_time_format, "IDS_ST_BODY_12_HOURS", strlen("IDS_ST_BODY_12_HOURS")))
240 time = __setting_phone_lang_get_by_pattern(lang, "hhmm");
242 time = __setting_phone_lang_get_by_pattern(lang, "Hm");
244 strncpy(time_arr, time, DEF_BUF_SIZE);
245 time_arr[DEF_BUF_SIZE - 1] = '\0';
247 elm_object_text_set(ad->data_time->btn_right, time_arr);
248 FREE(pa_time_format);
252 static int _alarmmgr_set_timezone_helper(char *tzdata)
254 int ret = alarmmgr_set_timezone(tzdata);
256 /* set event system */
257 setting_set_event_system(SYS_EVENT_TIME_ZONE,
265 static int _alarmmgr_set_systime_helper(time_t t_current)
268 ret = alarmmgr_set_systime(t_current);
270 /* set event system */
271 setting_set_event_system(SYS_EVENT_SCREEN_AUTOROTATE_STATE,
272 EVT_KEY_TIME_CHANGED,
280 static void __update_time_via_sim_card(void *data)
282 setting_retm_if(data == NULL, "Data parameter is NULL");
283 SettingTimeUG *ad = (SettingTimeUG *) data;
287 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
288 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
289 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
290 if (ret != 0 || isEmptyStr(tzpath)) {
296 SETTING_TRACE("tz_path:%s", tzpath);
298 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
299 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
300 g_strlcat(tz_path, tzpath, sizeof(tz_path));
301 SETTING_TRACE("full tz_path:%s", tz_path);
302 ret = _alarmmgr_set_timezone_helper(tz_path);
304 SETTING_TRACE("tzpath is not valid.");
307 SETTING_TRACE("_alarmmgr_set_timezone_helper - successful : %s \n", tz_path);
308 if (!__setting_set_city_tzone(tzpath)) {
309 SETTING_TRACE("__setting_set_city_tzone ERROR")
312 get_city_name(tzpath);
313 char *city = get_city_name_result();
314 SETTING_TRACE("city:%s", city);
316 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
317 setting_retm_if(ret != 0, "set vconf[%s] failed", VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
319 setting_update_timezone(ad);
321 /* b.TIME AND DATE */
323 FILE *fp = fopen("/proc/uptime", "r");
325 if (!fscanf(fp, "%d", &t_uptime)) {
326 SETTING_TRACE_ERROR("fscanf error");
331 SETTING_TRACE_ERROR("fopen error");
334 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
335 time_t t_current = t_nitz + t_uptime - t_offset;
336 SETTING_TRACE("t_current:%d", t_current);
337 ret = _alarmmgr_set_systime_helper(t_current);
338 setting_retm_if(ret == -1, "_alarmmgr_set_systime_helper call failed");
341 struct tm *ts = localtime_r(&t_current, &ts_ret);
343 setting_enable_evas_object(ad->data_time->btn_left);
344 setting_enable_evas_object(ad->data_time->btn_right);
347 /* time change - event */
348 static int t_event_val = -1;
349 vconf_set_int(VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
355 static void setting_time_main_bool_vconf_change_cb(keynode_t *key, void *data)
357 /* SETTING_TRACE_BEGIN; */
358 ret_if(NULL == data);
359 SettingTimeUG *ad = data;
360 int status = vconf_keynode_get_bool(key);
361 char *vconf_name = vconf_keynode_get_name(key);
363 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL)) {
365 ad->is_datefield_selected = EINA_FALSE;
367 setting_update_gl_item_chk_status(ad->data_auto, status);
369 if (!ad->data_auto->chk_status) {
371 setting_enable_genlist_item(ad->data_tz->item);
375 ad->data_time->isItemDisableFlag = FALSE;
376 /*setting_ensable_evas_object(ad->data_time->eo_check); */
377 setting_enable_evas_object(ad->data_time->btn_left);
378 setting_enable_evas_object(ad->data_time->btn_right);
379 setting_enable_genlist_item(ad->data_time->item);
385 setting_disable_genlist_item(ad->data_tz->item);
389 ad->data_time->isItemDisableFlag = FALSE;
390 /*setting_disable_evas_object(ad->data_time->eo_check); */
391 setting_disable_evas_object(ad->data_time->btn_left);
392 setting_disable_evas_object(ad->data_time->btn_right);
393 setting_disable_genlist_item(ad->data_time->item);
396 __update_time_via_sim_card(ad);
402 static void __sim_time_info_chg_cb(keynode_t *key, void *data)
405 ret_if(NULL == data);
406 SettingTimeUG *ad = data;
407 char *vconf_name = vconf_keynode_get_name(key);
408 /*SETTING_TRACE("vconf_name:%s", vconf_name);*/
409 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_GMT)
410 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_EVENT_GMT)
411 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_ZONE)) {
414 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
420 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
421 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
422 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
423 if (ret != 0 || isEmptyStr(tzpath)) {
425 setting_disable_genlist_item(ad->data_auto->item);
428 setting_enable_genlist_item(ad->data_tz->item);
431 setting_enable_genlist_item(ad->data_time->item);
438 setting_enable_genlist_item(ad->data_auto->item);
441 setting_disable_genlist_item(ad->data_tz->item);
444 setting_disable_genlist_item(ad->data_time->item);
447 __update_time_via_sim_card(ad);
453 static int __setting_time_check_enable_automatic_update()
455 /*to read TAPI vconfs */
459 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
460 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
461 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
462 if (ret == 0 && !isEmptyStr(tzpath))
469 /* ***************************************************
473 ***************************************************/
474 static void setting_time_main_datefield_set_cb(void *data, Evas_Object *object, void *event_info)
477 SETTING_TRACE("SETTING_DATETIME");
480 /*Setting_GenGroupItem_Data *item_data = param->item_data; */
482 ret_if(data == NULL);
483 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
484 SettingTimeUG *ad = list_item->userdata;
486 Evas_Object *obj = list_item->eo_check; /* elm_datetime_add */
489 elm_object_signal_emit(list_item->eo_check /* elm_datetime_xxx*/, "picker,action,value,set", "");
491 SETTING_TRACE_ERROR("list_item->eo_check is NULL");
494 ad->is_datefield_selected = EINA_TRUE;
496 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
497 if (ad->update_timer) {
498 ecore_timer_reset(ad->update_timer);
499 ecore_timer_freeze(ad->update_timer);
503 /* If auto update is on, don't anything while the datefield has been updated (i.e., time runs) */
504 if (1 == setting_time_check_automatic_time_update_state()) {
505 SETTING_TRACE("AUTO_TIME ON: no action");
507 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
508 if (ad->update_timer) {
509 ecore_timer_thaw(ad->update_timer);
516 elm_datetime_value_get(obj, &_tm);
518 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
519 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
524 /* local time -> gmtime */
525 time_t the_time = mktime(&_tm); /* represent local time */
527 /* invoke API to change time */
528 int ret = _alarmmgr_set_systime_helper(the_time);
530 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
531 if (ad->update_timer) {
532 ecore_timer_thaw(ad->update_timer);
537 time_t cctime = time(NULL);
539 struct tm *ts = localtime_r(&cctime, &ts_ret);
540 SETTING_TRACE("After _alarmmgr_set_systime_helper() ....year : %d, month : %d, day : %d, hour : %d, min : %d",
541 ts_ret.tm_year, ts_ret.tm_mon, ts_ret.tm_mday, ts_ret.tm_hour, ts_ret.tm_min);
543 Evas_Object *popup = NULL;
544 popup = evas_object_data_get(obj, "popup");
546 evas_object_del(popup);
549 setting_retm_if(ret == -1, "_alarmmgr_set_systime_helper call failed");
552 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
553 Eina_Bool __refresh_date_timer(void *data)
556 SettingTimeUG *ad = data;
558 __setting_update_datefield_cb(ad);
563 void hour_format_event_handler(const char *event_name, bundle *data, void *user_data)
565 const char *hour_format_set = NULL;
566 SETTING_TRACE("hour format set event(%s) received", event_name);
568 hour_format_set = bundle_get_val(data, EVT_KEY_HOUR_FORMAT);
569 SETTING_TRACE("hour_format_set(%s)", hour_format_set);
572 int hour_format_event_reg_id;
574 static int setting_time_main_create(void *cb)
577 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
579 SettingTimeUG *ad = (SettingTimeUG *) cb;
581 char *title = _(DATE_TIME_STR_DATE_AND_TIME);
583 ad->is_datefield_selected = EINA_FALSE;
585 app_control_h service = ad->bundle_data;
587 app_control_get_extra_data(service, "caller", &caller);
588 app_control_get_extra_data(service, "title", &title);
590 Evas_Object *scroller; /* scroller is a genlist */
594 title = DATE_TIME_STR_DATE_AND_TIME;
595 gchar *title_str = NULL;
601 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
602 ad->win_get, title_str,
605 setting_time_main_click_softkey_left_cb,
609 ad->scrl_main = scroller;
610 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
615 Elm_Object_Item *item;
617 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
618 ELM_GENLIST_ITEM_NONE, NULL, NULL);
619 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
620 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
623 /*int enable_automatic = __setting_time_check_enable_automatic_update(); */
624 bool auto_flag = value;
626 if (auto_flag) { /*do special process only when auto mode */
627 /*to read TAPI vconfs */
631 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
632 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
633 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
634 if (ret == 0 && !isEmptyStr(tzpath)) {
635 /*1.to update timezone */
636 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
637 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
638 g_strlcat(tz_path, tzpath, sizeof(tz_path));
639 SETTING_TRACE("full tz_path:%s", tz_path);
640 ret = _alarmmgr_set_timezone_helper(tz_path);
642 SETTING_TRACE("tzpath is not valid.");
644 SETTING_TRACE("_alarmmgr_set_timezone_helper - successful : %s \n", tz_path);
645 if (!__setting_set_city_tzone(tzpath)) {
646 SETTING_TRACE("__setting_set_city_tzone ERROR")
648 get_city_name(tzpath);
649 char *city = get_city_name_result();
650 SETTING_TRACE("city:%s", city);
651 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
653 /* 2.to set current time */
655 FILE *fp = fopen("/proc/uptime", "r");
657 if (!fscanf(fp, "%d", &t_uptime)) {
658 SETTING_TRACE_ERROR("fscanf error");
663 SETTING_TRACE_ERROR("fopen error");
666 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
667 time_t t_current = t_nitz + t_uptime - t_offset;
668 SETTING_TRACE("t_current:%d", t_current);
669 ret = _alarmmgr_set_systime_helper(t_current);
675 /*if (!isEmulBin()) { */
677 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
678 setting_time_main_mouse_up_Gendial_list_cb,
679 ad, SWALLOW_Type_1ICON_1RADIO, NULL,
681 DATE_TIME_STR_AUTOMATIC_UPDATE, NULL,
682 setting_time_main_chk_btn_cb);
684 ad->data_auto->userdata = ad;
686 SETTING_TRACE_ERROR("ad->data_auto is NULL");
689 /*ADD_GL_HELP(scroller,SETTING_TIME_AUTO_UPDATE_DESC); */
693 /* create DATE_AND_TIME */
695 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
696 setting_time_main_mouse_up_Gendial_list_cb,
697 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
699 DATE_TIME_STR_DATE_AND_TIME,
703 ad->data_time->userdata = ad;
704 ad->data_time->nf = ad->navi_bar;
705 ad->data_time->isItemDisableFlag = auto_flag;
706 ad->data_time->activated_cb = setting_time_main_datefield_set_cb;
707 elm_genlist_item_select_mode_set(ad->data_time->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
709 Elm_Object_Item *item = elm_genlist_item_append(scroller, &(itc_bottom_line), NULL, NULL,
710 ELM_GENLIST_ITEM_NONE, NULL, NULL);
711 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
714 SETTING_TRACE_ERROR("ad->data_time is NULL");
717 /*ADD_GL_SEPARATOR(scroller); */
718 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
719 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
720 char *displayTimezone = NULL;
722 displayTimezone = get_timezone_displayname();
724 if (displayTimezone != NULL) {
726 /* don't use hard coded value */
727 /* get value from current timezone */
729 char str_buf[GMT_BUF_SIZE] = {0, };
730 get_gmt_offset(str_buf, GMT_BUF_SIZE);
732 char *timezone_str = get_timezone_str();
734 SETTING_TRACE("timezone : %s, displayTimezone :%s, gmt_offset : %s",
735 timezone_str, displayTimezone, _(str_buf));
736 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s",
737 displayTimezone, _(str_buf));
742 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "Korean Standard Time, GMT +9:00");
745 FREE(displayTimezone);
747 /* UI create time zone */
749 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
750 setting_time_main_mouse_up_Gendial_list_cb,
751 ad, SWALLOW_Type_INVALID, NULL,
752 NULL, 0, DATE_TIME_STR_TIME_ZONE,
753 time_zone_sub_str, NULL);
755 ad->data_tz->userdata = ad;
757 SETTING_TRACE_ERROR("ad->data_tz is NULL");
760 /* UI create "Time format" */
761 value = VCONFKEY_TIME_FORMAT_12;
762 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
763 ad->data_time_fmt = setting_create_Gendial_field_def(scroller,
764 &(ad->itc_1text_1icon),
765 setting_time_main_mouse_up_Gendial_list_cb,
767 SWALLOW_Type_1ICON_1RADIO,
770 (value == VCONFKEY_TIME_FORMAT_24),
771 "IDS_ST_MBODY_24_HOUR_CLOCK",
773 setting_time_main_chk_btn_cb);
774 if (ad->data_time_fmt) {
775 __BACK_POINTER_SET(ad->data_time_fmt);
776 ad->data_time_fmt->userdata = ad;
778 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
780 ADD_GL_HELP_NO_SEP(scroller, "IDS_ST_SBODY_SHOW_THE_TIME_IN_24_HOUR_FORMAT_INSTEAD_OF_12_HOUR_HAM_PM_FORMAT");
782 #if APPLIED_DATATIME_DATA_FORMAT
783 char *pa_date_format = get_pa_date_format_str();
784 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
785 &(ad->itc_2text_3_parent),
786 setting_time_main_mouse_up_Gendial_list_cb,
787 ad, SWALLOW_Type_INVALID,
788 DATE_TIME_STR_TIME_FORMAT,
790 if (ad->data_date_fmt) {
791 ad->data_date_fmt->int_slp_setting_binded =
792 INT_SLP_SETTING_DATE_FORMAT;
794 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
796 G_FREE(pa_date_format);
801 setting_disable_genlist_item(ad->data_tz->item);
804 setting_disable_genlist_item(ad->data_time->item);
808 setting_view_time_main.is_create = 1;
809 vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad);
811 /* register vconf key to get event callback for converting 12/24H */
812 vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb, ad);
813 /* register vconf key to get event callback for date format */
814 vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb, ad);
816 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb, ad);
817 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb, ad);
818 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb, ad);
820 vconf_notify_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
821 setting_time_main_bool_vconf_change_cb, ad);
823 /* to avoid update time-diff, every per 3s to update. */
824 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
825 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
829 if (ES_R_OK != eventsystem_register_event(SYS_EVENT_HOUR_FORMAT,
830 &hour_format_event_reg_id,
831 (eventsystem_handler)hour_format_event_handler, cb)) {
832 SETTING_TRACE_ERROR("error");
835 return SETTING_RETURN_SUCCESS;
838 static int setting_time_main_destroy(void *cb)
842 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
844 SettingTimeUG *ad = (SettingTimeUG *) cb;
846 /* __finalize_resource(ad); */
850 #ifdef USE_TIMER_UPDATE_TIME_IN_TIME_VIEW
851 if (ad->update_timer) {
852 ecore_timer_del(ad->update_timer);
853 ad->update_timer = NULL;
857 #if PROGRESS_POPUP_SHOW
858 if (ad->pop_progress) {
859 evas_object_del(ad->pop_progress);
860 ad->pop_progress = NULL;
864 if (ad->update_timezone_idler) {
865 ecore_idler_del(ad->update_timezone_idler);
866 ad->update_timezone_idler = NULL;
870 if (ad->refresh_time_idler) {
871 ecore_idler_del(ad->refresh_time_idler);
872 ad->refresh_time_idler = NULL;
875 vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
876 time_changed_callback);
878 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
879 setting_time_main_int_vconf_change_cb);
880 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
881 setting_time_main_int_vconf_change_cb);
883 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb);
884 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb);
885 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb);
887 vconf_ignore_key_changed(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
888 setting_time_main_bool_vconf_change_cb);
890 if (ad->ly_main != NULL) {
891 evas_object_del(ad->ly_main);
893 setting_view_time_main.is_create = 0;
896 if (ES_R_OK != eventsystem_unregister_event(hour_format_event_reg_id)) {
897 SETTING_TRACE_ERROR("error");
900 return SETTING_RETURN_SUCCESS;
903 static int setting_time_main_update(void *cb)
906 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
908 SettingTimeUG *ad = (SettingTimeUG *) cb;
910 if (ad->ly_main != NULL) {
911 evas_object_show(ad->ly_main);
912 /* update timezone */
913 if (ad->update_timezone_idler) {
914 ecore_idler_del(ad->update_timezone_idler);
915 ad->update_timezone_idler = NULL;
917 ad->update_timezone_idler =
918 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
920 if (ad->refresh_time_idler) {
921 ecore_idler_del(ad->refresh_time_idler);
922 ad->refresh_time_idler = NULL;
924 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield_cb, ad);
926 return SETTING_RETURN_SUCCESS;
929 static int setting_time_main_cleanup(void *cb)
932 return SETTING_RETURN_SUCCESS;
936 /* ***************************************************
940 ****************************************************/
942 int setting_time_check_automatic_time_update_state()
948 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
955 static int __setting_set_city_tzone(const char *pTZPath)
957 /* let's get city & timezone string from pTZPath */
959 char szTimezone[GMT_BUF_SIZE] = {0,};
960 char *pStr = strdup(pTZPath);
962 /* 2. timezone string +/-<n> ex. +9, -1 */
963 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
965 /* set timezone_id */
966 /** @todo replace with vconf ID */
967 vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
974 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
975 app_control_h result, void *priv)
979 retm_if(priv == NULL, "Data parameter is NULL");
981 SettingTimeUG *ad = (SettingTimeUG *) priv;
985 app_control_get_extra_data(result, "city", &city);
986 app_control_get_extra_data(result, "tzpath", &tzpath);
989 SETTING_TRACE("tzpath from worldclock UG is null.");
990 setting_update_timezone(ad);
993 SETTING_TRACE("tzpath : %s", tzpath);
995 SETTING_TRACE("city : %s", city);
997 /* --------------------------------------------------------------------- */
998 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
999 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1000 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1001 SETTING_TRACE("full tz_path:%s", tz_path);
1003 int ret = _alarmmgr_set_timezone_helper(tz_path);
1005 SETTING_TRACE("tzpath is not valid.");
1012 SETTING_TRACE("_alarmmgr_set_timezone_helper - successful : %s \n", tz_path);
1014 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1015 setting_retm_if(ret != 0, "set vconf failed");
1017 /* parse city and GMT offset from tzpath and system time property */
1018 /* set the strings in vconf which will be used while updating display of timezone */
1019 if (!__setting_set_city_tzone(tzpath)) {
1020 SETTING_TRACE("__setting_set_city_tzone ERROR");
1028 /* update the display for timezone */
1029 setting_update_timezone(ad);
1030 static int t_event_val = -1;
1031 vconf_set_int(VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
1039 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
1042 SETTING_TRACE_BEGIN;
1043 /* if(ug) ug_destroy(ug); */
1044 /* restore the '<-' button on the navigate bar */
1046 SettingTimeUG *ad = (SettingTimeUG *) priv;
1048 setting_ug_destroy(ug);
1049 ad->ug_loading = NULL;
1051 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1054 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1057 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1061 SETTING_TRACE_BEGIN;
1062 /*SettingTimeUG *ad = (SettingTimeUG *) priv; */
1068 base = (Evas_Object *) ug_get_layout(ug);
1073 case UG_MODE_FULLVIEW:
1074 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1076 /*elm_win_resize_object_add(ad->win_get, base); */
1077 evas_object_show(base);
1086 void setting_time_main_launch_worldclock_sg(void *data)
1088 SETTING_TRACE_BEGIN;
1090 retm_if(data == NULL, "Data parameter is NULL");
1092 SettingTimeUG *ad = (SettingTimeUG *) data;
1094 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1095 setting_retm_if(!cbs, "calloc failed");
1096 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1097 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1098 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1099 cbs->priv = (void *)ad;
1101 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1102 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1104 setting_ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1105 if (NULL == ad->ug_loading) { /* error handling */
1112 static void __setting_update_datefield_cb(void *cb)
1114 SETTING_TRACE_BEGIN;
1115 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1116 SettingTimeUG *ad = (SettingTimeUG *) cb;
1118 if (ad->data_time) {
1119 time_t cctime = time(NULL);
1121 struct tm *ts = localtime_r(&cctime, &ts_ret);
1122 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
1123 ts_ret.tm_year, ts_ret.tm_mon, ts_ret.tm_mday, ts_ret.tm_hour, ts_ret.tm_min);
1126 char* region = NULL;
1127 int err = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, ®ion );
1128 char *date = __setting_phone_lang_get_by_pattern(region, "MMM/d/yyyy");
1130 static char date_arr[DEF_BUF_SIZE], time_arr[DEF_BUF_SIZE];
1131 char *pa_time_format = get_pa_time_format_str();
1132 setting_retvm_if(NULL == pa_time_format, FALSE, "pa_time_format is NULL");
1133 if (!strncmp(pa_time_format, "IDS_ST_BODY_12_HOURS", strlen("IDS_ST_BODY_12_HOURS")))
1134 time = __setting_phone_lang_get_by_pattern(region, "hhmm");
1136 time = __setting_phone_lang_get_by_pattern(region, "Hm");
1138 strncpy(date_arr, date, DEF_BUF_SIZE);
1139 strncpy(time_arr, time, DEF_BUF_SIZE);
1141 date_arr[DEF_BUF_SIZE - 1] = '\0';
1142 time_arr[DEF_BUF_SIZE - 1] = '\0';
1144 if (ad->data_time->btn_left)
1145 elm_object_text_set(ad->data_time->btn_left, date_arr);
1147 SETTING_TRACE_ERROR("ad->data_time->btn_left is NULL");
1149 if (ad->data_time->btn_right)
1150 elm_object_text_set(ad->data_time->btn_right, time_arr);
1152 SETTING_TRACE_ERROR("ad->data_time->btn_right is NULL");
1154 SETTING_TRACE_BEGIN;
1155 FREE(pa_time_format);
1160 Eina_Bool setting_update_datefield_cb(void *data)
1162 SETTING_TRACE_BEGIN;
1164 retvm_if(data == NULL, FALSE, "Data parameter is NULL");
1166 SettingTimeUG *ad = (SettingTimeUG *) data;
1168 __setting_update_datefield_cb(ad);
1170 ad->refresh_time_idler = NULL;
1171 return ECORE_CALLBACK_CANCEL;
1174 /* ***************************************************
1178 ****************************************************/
1181 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1184 SETTING_TRACE_BEGIN;
1185 retm_if(data == NULL, "Data parameter is NULL");
1187 SettingTimeUG *ad = (SettingTimeUG *) data;
1189 /*__finalize_resource(ad); */
1191 /* Send destroy request */
1192 ug_destroy_me(ad->ug);
1195 /* ***************************************************
1199 ****************************************************/
1202 setting_time_main_click_softkey_caller_exist_left_cb(void *data,
1206 SETTING_TRACE_BEGIN;
1208 retm_if(data == NULL, "Data parameter is NULL");
1210 SettingTimeUG *ad = (SettingTimeUG *) data;
1212 /* Create Bundle and send message */
1214 if (app_control_create(&svc))
1217 app_control_add_extra_data(svc, "result", "lbutton_click");
1218 ug_send_result(ad->ug, svc);
1220 app_control_destroy(svc);
1222 /* Send destroy request */
1223 ug_destroy_me(ad->ug);
1227 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1231 SETTING_TRACE_BEGIN;
1233 retm_if(data == NULL, "Data parameter is NULL");
1235 SettingTimeUG *ad = (SettingTimeUG *) data;
1237 /* Create Bundle and send message */
1239 if (app_control_create(&svc))
1242 app_control_add_extra_data(svc, "result", "rbutton_click");
1243 ug_send_result(ad->ug, svc);
1245 app_control_destroy(svc);
1247 /* Send destroy request */
1248 ug_destroy_me(ad->ug);
1252 static void __time_auto_update(void *data)
1254 SETTING_TRACE_BEGIN;
1255 setting_retm_if(data == NULL, "Data parameter is NULL");
1256 SettingTimeUG *ad = (SettingTimeUG *) data;
1258 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1259 SETTING_ON_OFF_BTN_ON, &err);
1261 setting_disable_genlist_item(ad->data_tz->item);
1265 elm_object_text_set(ad->data_time->btn_left, date);
1266 evas_object_resize(ad->data_time->btn_left, 300, -1);
1270 if (ad->data_time) {
1271 ad->data_time->isItemDisableFlag = FALSE;
1272 /*setting_disable_evas_object(ad->data_time->eo_check); */
1273 setting_disable_evas_object(ad->data_time->btn_left);
1274 setting_disable_evas_object(ad->data_time->btn_right);
1275 setting_disable_genlist_item(ad->data_time->item);
1278 __update_time_via_sim_card(ad);
1283 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1285 SETTING_TRACE_BEGIN;
1287 retm_if(data == NULL, "Data parameter is NULL");
1288 SettingTimeUG *ad = NULL;
1289 Setting_GenGroupItem_Data *list_item =
1290 (Setting_GenGroupItem_Data *) data;
1291 ad = list_item->userdata;
1292 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1295 if (obj == ad->data_auto->eo_check) {
1297 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1300 (void) setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1301 setting_update_gl_item_chk_status(ad->data_auto, 0);
1304 setting_enable_genlist_item(ad->data_tz->item);
1307 if (ad->data_time) {
1308 ad->data_time->isItemDisableFlag = FALSE;
1309 /*setting_disable_evas_object(ad->data_time->eo_check); */
1310 setting_enable_evas_object(ad->data_time->btn_left);
1311 setting_enable_evas_object(ad->data_time->btn_right);
1312 setting_enable_genlist_item(ad->data_time->item);
1315 __time_auto_update(ad);
1321 //#define FUNCTION_SYSTEM_SETTING 1
1322 #if FUNCTION_SYSTEM_SETTING
1324 if (ad->data_time_fmt == list_item) {
1326 int value = VCONFKEY_TIME_FORMAT_12;
1327 if (list_item->chk_status) {
1328 err = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, true);
1330 err = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, false);
1335 if (ad->data_time_fmt == list_item) {
1337 int value = VCONFKEY_TIME_FORMAT_12;
1338 if (list_item->chk_status) {
1339 value = VCONFKEY_TIME_FORMAT_24;
1340 setting_set_event_system(SYS_EVENT_HOUR_FORMAT, EVT_KEY_HOUR_FORMAT, EVT_VAL_HOURFORMAT_24);
1342 setting_set_event_system(SYS_EVENT_HOUR_FORMAT, EVT_KEY_HOUR_FORMAT, EVT_VAL_HOURFORMAT_12);
1344 setting_set_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, value, &err);
1350 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1353 SETTING_TRACE_BEGIN;
1355 setting_retm_if(data == NULL, "Data parameter is NULL");
1357 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1358 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1359 elm_genlist_item_selected_set(item, 0);
1360 Setting_GenGroupItem_Data *list_item =
1361 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1362 setting_retm_if(NULL == list_item, "list_item is NULL");
1364 SettingTimeUG *ad = (SettingTimeUG *) data;
1365 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1367 if (ad->data_tz == list_item) {
1368 ad->is_datefield_selected = EINA_FALSE;
1369 if (1 == setting_time_check_automatic_time_update_state()) {
1370 setting_create_popup(ad, ad->win_get, NULL, _(AUTO_TIME_UPDATE_ON), NULL, 0, false, false, 0);
1372 setting_time_main_launch_worldclock_sg(ad);
1375 } else if (ad->data_time == list_item) {
1376 ad->is_datefield_selected = EINA_TRUE;
1377 if (1 == setting_time_check_automatic_time_update_state()) {
1378 setting_create_popup(ad, ad->win_get, NULL, _(AUTO_TIME_UPDATE_ON), NULL, 0, false, false, 0);
1380 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1382 } else if (ad->data_auto == list_item) {
1383 ad->is_datefield_selected = EINA_FALSE;
1384 int old_status = list_item->chk_status;
1386 setting_update_gl_item_chk_status(list_item, !old_status);
1388 if (!list_item->chk_status) {
1390 setting_set_bool_slp_key
1391 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1392 SETTING_ON_OFF_BTN_OFF, &err);
1395 setting_enable_genlist_item(ad->data_tz->item);
1398 if (ad->data_time) {
1399 ad->data_time->isItemDisableFlag = FALSE;
1400 setting_enable_evas_object(ad->data_time->eo_check);
1401 setting_enable_genlist_item(ad->data_time->item);
1405 __time_auto_update(ad);
1407 } else if (ad->data_time_fmt == list_item) {
1409 setting_update_gl_item_chk_status(list_item, !list_item->chk_status);
1410 int value = VCONFKEY_TIME_FORMAT_12;
1411 if (list_item->chk_status)
1412 value = VCONFKEY_TIME_FORMAT_24;
1413 setting_set_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, value, &err);
1418 void setting_time_main_btn_update_ok_cb(void *cb)
1420 SETTING_TRACE_BEGIN;
1421 SettingTimeUG *ad = (SettingTimeUG *) cb;
1422 int err; /* error check */
1423 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1424 SETTING_ON_OFF_BTN_ON, &err);
1425 setting_update_gl_item_chk_status(ad->data_auto, 1);
1427 deviced_request_reboot();
1429 /* We'd better check return value from deviced_request_reboot() function. */
1430 /* It will return 0 on success or -1 if failed. */
1434 void setting_time_main_btn_update_cancel_cb(void *cb)
1436 SETTING_TRACE_BEGIN;
1437 SettingTimeUG *ad = (SettingTimeUG *) cb;
1439 int err; /* error check */
1441 retm_if(cb == NULL, "Data parameter is NULL");
1442 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1443 SETTING_ON_OFF_BTN_OFF, &err);
1444 setting_update_gl_item_chk_status(ad->data_auto, 0);
1449 static UChar *uastrcpy(const char *chars)
1453 len = safeStrLen(chars);
1454 str = (UChar *) malloc(sizeof(UChar)*(len + 1));
1457 u_uastrcpy(str, chars);
1461 static void ICU_set_timezone(const char *timezone)
1463 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1464 UErrorCode ec = U_ZERO_ERROR;
1465 UChar *str = uastrcpy(timezone);
1468 ucal_setDefaultTimeZone(str, &ec);
1469 if (U_SUCCESS(ec)) {
1470 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1472 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1480 * ex) timezone : Asia/Seoul --> returns "+09"
1484 static void get_gmt_offset(char *str_buf, int size)
1486 /* timezone string +/-<n> ex. +9, -1 */
1487 time_t t = time(0); /* get unix time. sec. */
1490 data = localtime(&t); /* save time as structure. */
1492 setting_retm_if(!data, "data is NULL");
1494 int gmtoffset_hour = (data->tm_gmtoff) / 3600; /* result : hour. */
1495 int gmtoffset_min = ((data->tm_gmtoff) % 3600) / 60; /* result : min. */
1498 if (gmtoffset_min != 0) {
1499 SETTING_TRACE("gmtoffset_min != 0 -------> %d", gmtoffset_min);
1504 /*snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min); */
1505 snprintf(str_buf, size, "%+d:%02d", gmtoffset_hour, abs(gmtoffset_min));
1506 SETTING_TRACE_DEBUG("szTimezone is of a valid format: GMT: %s", str_buf);
1508 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, str_buf);
1510 SETTING_TRACE_ERROR("set vconf failed");
1517 static char *get_timezone_str()
1519 SETTING_TRACE_BEGIN;
1521 enum { BUFFERSIZE = 1024 };
1522 char buf[BUFFERSIZE];
1523 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf) - 1);
1528 /* handle error condition */
1530 return g_strdup(buf + 20); /*Asia/Seoul */
1533 static char *get_city_name_result()
1539 /* in_str = "Asia/Seoul" */
1540 static bool get_city_name(char *tzname)
1542 sqlite3 *pSQLite3 = NULL;
1543 char *szErrMsg = NULL;
1545 int rst = sqlite3_open("/opt/dbspace/.worldclock.db", &pSQLite3);
1547 SETTING_TRACE("Can't open database: %s", sqlite3_errmsg(pSQLite3));
1548 sqlite3_close(pSQLite3);
1552 SETTING_TRACE("Database opened!!");
1553 char query_str[DEF_BUF_SIZE];
1554 snprintf(query_str, DEF_BUF_SIZE, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1555 SETTING_TRACE("%s \n", query_str);
1556 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1559 sqlite3_free(szErrMsg);
1560 sqlite3_close(pSQLite3);
1561 SETTING_TRACE("Database close!!\n");
1565 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1568 SETTING_TRACE("%s\n", argv[i] ? argv[i] : "NULL");
1569 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1573 static char *get_timezone_displayname()
1575 SETTING_TRACE_BEGIN;
1577 UErrorCode status = U_ZERO_ERROR;;
1578 UChar displayName[SETTING_STR_SLP_LEN] = {0, };
1579 char *timezone_str = NULL;
1580 const char *localeID = uloc_getDefault();
1583 struct tm *data = localtime(&t);
1585 ICU_set_timezone(get_timezone_str());
1587 UCalendar *cal = ucal_open(NULL, -1, localeID, UCAL_GREGORIAN, &status);
1588 if (U_FAILURE(status))
1589 SETTING_TRACE_ERROR("ucal_open got an error : %d", status);
1591 status = U_ZERO_ERROR;
1593 /* get timezone display name (check dst) */
1597 ucal_getTimeZoneDisplayName(cal, UCAL_DST, localeID, displayName, SETTING_STR_SLP_LEN, &status);
1599 ucal_getTimeZoneDisplayName(cal, UCAL_STANDARD, localeID, displayName, SETTING_STR_SLP_LEN, &status);
1602 if (U_FAILURE(status)) {
1603 SETTING_TRACE_ERROR("ucal_getTimeZoneDisplayName got an error : %s, %d", displayName, status);
1604 status = U_ZERO_ERROR;
1610 len = u_strlen(displayName);
1611 len_str = sizeof(char)*4*(len+1);
1612 timezone_str = (char *)calloc(1, len_str);
1613 if (!timezone_str) {
1614 SETTING_TRACE_ERROR("timezone string is null");
1617 u_strToUTF8(timezone_str, len_str, &len_utf8, displayName, len, &status);
1618 SETTING_TRACE("*************************** timezone : %s, %s", displayName, timezone_str);
1624 return timezone_str;