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 <sysman_managed.h>
33 #include <vconf-keys.h>
35 #include <unicode/udat.h>
36 #include <unicode/ustring.h>
37 #include <unicode/uloc.h>
38 #include <unicode/ucal.h>
39 #include <unicode/utmscale.h>
42 #define PROGRESS_POPUP_SHOW 0
45 static UChar *uastrcpy(const char *chars);
46 static void ICU_set_timezone(const char *timezone);
47 static int get_timezone_isdst(int* isdst);
48 static void get_gmt_offset(char *str_buf, int size);
50 static char* get_timezone_str();
51 static char* get_city_name_result();
52 static bool get_city_name(char* tzname);
54 static char* s_result;
55 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
56 static bool setting_update_timezone(SettingTimeUG *ad);
58 static int setting_time_main_create(void *cb);
59 static int setting_time_main_destroy(void *cb);
60 static int setting_time_main_update(void *cb);
61 static int setting_time_main_cleanup(void *cb);
63 setting_view setting_view_time_main = {
64 .create = setting_time_main_create,
65 .destroy = setting_time_main_destroy,
66 .update = setting_time_main_update,
67 .cleanup = setting_time_main_cleanup,
70 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
71 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
75 bool __update_timezone_idler(SettingTimeUG *ad)
77 setting_update_timezone(ad);
78 ad->update_timezone_idler = NULL;
82 void time_changed_callback(keynode_t *key, void *data) {
84 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
85 SettingTimeUG *ad = (SettingTimeUG *)data;
87 int ret = setting_time_update_cb(ad);
89 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
92 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
93 if(EINA_TRUE == ad->is_datefield_selected) {
94 /* Timezone is not changed and a selected value of the datefield is already changed */
95 SETTING_TRACE("Datefield is selected\n");
100 // vconfset to update timezone
101 char pTZPath[__MAX_PATH_SIZE];
102 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
104 pTZPath[nLen] = '\0';
106 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
110 if (!__setting_set_city_tzone(&pTZPath[20])) {
111 SETTING_TRACE("__setting_set_city_tzone ERROR");
114 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
115 setting_retm_if(timezone == NULL, "get vonf failed");
116 ICU_set_timezone(timezone);
120 if (ad->update_timezone_idler) {
121 ecore_idler_del(ad->update_timezone_idler);
122 ad->update_timezone_idler = NULL;
124 ad->update_timezone_idler =
125 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
127 if (ad->refresh_time_idler) {
128 ecore_idler_del(ad->refresh_time_idler);
129 ad->refresh_time_idler = NULL;
131 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
134 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
144 char time_str[MAX_ARGS];
147 ts = localtime_r(&ctime, &ts_ret);
150 /* set time in particular format */
151 ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
152 if (ret == SETTING_RETURN_FAIL)
153 value = VCONFKEY_TIME_FORMAT_12;
156 case VCONFKEY_TIME_FORMAT_12:
159 strftime(time_str, MAX_ARGS, "%l:%M %p ", &ts_ret);
163 case VCONFKEY_TIME_FORMAT_24:
165 strftime(time_str, MAX_ARGS, "%H:%M", &ts_ret);
174 elm_object_item_data_set(ad->data_time->item, ad->data_time);
175 elm_genlist_item_update(ad->data_time->item);
179 bool setting_update_timezone(SettingTimeUG *ad)
181 /* SETTING_TRACE_BEGIN; */
182 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
183 char *pa_timezone = NULL;
184 char *pa_city = NULL;
188 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
189 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);
191 //if ((pa_timezone != NULL) && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
192 if ((pa_timezone != NULL) && (_(pa_city) != NULL )) {
193 /* SETTING_TRACE_DEBUG("*** timezone: %s *** ", timezone); */
194 /* SETTING_TRACE_DEBUG("*** city: %s *** ", _(city)); */
195 /* SETTING_TRACE_DEBUG("*** ret: %d, dst: %d *** ", ret, dst); */
197 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(pa_city), pa_timezone);
198 //ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", pa_timezone, _(pa_city));
202 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
205 SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
208 ad->data_tz->sub_desc = (char *)g_strdup(time_zone_sub_str);
209 elm_object_item_data_set(ad->data_tz->item, ad->data_tz);
210 elm_genlist_item_update(ad->data_tz->item);
216 static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
218 /* SETTING_TRACE_BEGIN; */
219 ret_if(NULL == data);
220 SettingTimeUG *ad = data;
221 int status = vconf_keynode_get_int(key);
222 char *vconf_name = vconf_keynode_get_name(key);
223 /* SETTING_TRACE("vconf_name:%s", vconf_name); */
225 if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224)) {
228 /* VCONFKEY_REGIONFORMAT_TIME1224 1:12H 2:24H */
229 if (status <= 2 && status > 0) /* 1, 2 */
230 --status; /* set to 0 or 1 */
232 status = 0; /* set 12H */
234 /* TODO assert 1 or 0 */
235 ad->data_time->chk_status = !status;
237 char datefield_format[MAX_DATETIME_FORMAT_LEN + 1] = {0, };
239 const char *time_format = NULL;
240 if (ad->data_time->chk_status)//12 hours
242 time_format = "%I : %M %p";
244 time_format = "%H : %M";
247 //get date format from datefiled itself, if elm_datetime_add() supports set date-format via ICU.
248 #ifdef SUPPORT_DATEFIELD_DATE_FORMAT_AUTOSET
249 const char *old_format = elm_datetime_format_get(ad->data_time->eo_check);
250 snprintf(datefield_format, MAX_DATE_FORMAT_LEN + 1, //add one space " "
252 safeStrNCat(datefield_format, time_format, MAX_DATETIME_FORMAT_LEN);
253 SETTING_TRACE("datefield_format:%s", datefield_format);
255 int value = SETTING_DATE_FORMAT_DD_MM_YYYY;
258 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
259 int ret = setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
260 if (ret == SETTING_RETURN_FAIL)
261 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
263 snprintf(datefield_format, MAX_DATETIME_FORMAT_LEN,
264 "%s %s", date_format_str[value], time_format);
267 elm_datetime_format_set(ad->data_time->eo_check, datefield_format);
272 static void __update_time_via_sim_card(void *data)
274 setting_retm_if(data == NULL, "Data parameter is NULL");
275 SettingTimeUG *ad = (SettingTimeUG *) data;
279 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
280 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
281 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
282 if (ret != 0 || isEmptyStr(tzpath))
284 setting_create_simple_popup(ad, ad->ly_main,
285 NULL, _(NOT_SUPPORT_AUTO_UPDATE_DESC));
291 SETTING_TRACE("tz_path:%s", tzpath);
293 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
294 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
295 g_strlcat(tz_path, tzpath, sizeof(tz_path));
296 SETTING_TRACE("full tz_path:%s", tz_path);
297 ret = sysman_set_timezone(tz_path);
299 SETTING_TRACE("tzpath is not valid.");
302 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
303 if (!__setting_set_city_tzone(tzpath)) {
304 SETTING_TRACE("__setting_set_city_tzone ERROR")
307 if (get_city_name(tzpath)) {
308 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
310 char* city = get_city_name_result();
311 SETTING_TRACE("city:%s", city);
314 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
315 setting_retm_if(ret != 0, "set vconf[%s] failed", VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
317 setting_update_timezone(ad);
321 FILE *fp = fopen("/proc/uptime", "r");
323 if (!fscanf(fp, "%d", &t_uptime)) {
324 SETTING_TRACE_ERROR("fscanf error");
329 SETTING_TRACE_ERROR("fopen error");
332 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
333 time_t t_current = t_nitz + t_uptime - t_offset;
334 SETTING_TRACE("t_current:%d", t_current);
335 ret = sysman_set_datetime(t_current);
336 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
339 struct tm *ts = localtime_r(&t_current, &ts_ret);
341 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
344 // time change - event
345 static int t_event_val = -1;
346 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
349 static void __sim_time_info_chg_cb(keynode_t *key, void *data)
352 ret_if(NULL == data);
353 SettingTimeUG *ad = data;
354 char *vconf_name = vconf_keynode_get_name(key);
355 SETTING_TRACE("vconf_name:%s", vconf_name);
356 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_GMT)
357 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_EVENT_GMT)
358 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_ZONE)) {
361 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
368 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
369 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
370 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
371 if (ret != 0 || isEmptyStr(tzpath))
375 __update_time_via_sim_card(ad);
380 /* ***************************************************
384 ***************************************************/
385 static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
390 ret_if(data == NULL);
391 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
392 SettingTimeUG *ad = list_item->userdata;
394 ad->is_datefield_selected = EINA_TRUE;
396 // If auto update is on, don't anything while the datefield has been updated (i.e., time runs)
397 if (1 == setting_time_check_automatic_time_update_state()) {
398 SETTING_TRACE("AUTO_TIME ON: no action");
402 // otherwise, we apply a new date which has been changed by a user
406 elm_datetime_value_get(obj, &_tm);
408 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
409 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
410 if (2037 < _tm.tm_year) {
411 setting_create_simple_popup(ad, ad->win_get,
412 NULL, _(ERR_BIGGER_THAN_2037));
415 #if SUPPORT_SCREEN_PROTECTED /* if not lock the current state, after set the time, the screen will become dimmed */
416 pm_lock_state(LCD_NORMAL, STAY_CUR_STATE, 0);
421 if (get_timezone_isdst(&isdst) == SETTING_RETURN_SUCCESS) {
422 _tm.tm_isdst = isdst;
425 SETTING_TRACE_ERROR("get_timezone_isdst() failed");
429 /* local time -> gmtime */
430 time_t the_time = mktime(&_tm); /* represent local time */
432 if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
434 SETTING_TRACE("Time is not changed\n");
435 //current time didn't change
439 #if PROGRESS_POPUP_SHOW
440 // remove popup if created
441 if (ad->pop_progress) {
442 evas_object_del(ad->pop_progress);
443 ad->pop_progress = NULL;
448 setting_create_popup_with_progressbar(ad, ad->win_get, "pending_list",
449 NULL, NULL, NULL, 0, TRUE, TRUE);
452 // invoke API to change time
453 int ret = sysman_set_datetime(the_time);
454 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
459 Eina_Bool __refresh_date_timer(void *data)
461 //SETTING_TRACE_BEGIN;
462 SettingTimeUG *ad = data;
464 time_t ctime = time(NULL);
466 struct tm *ts = localtime_r(&ctime, &ts_ret);
470 elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
471 if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
473 SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
474 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
480 static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
483 ret_if(NULL == data || NULL == event_info);
485 SettingTimeUG *ad = (SettingTimeUG *) data;
486 Elm_Object_Item *parentItem = event_info; /* parent item */
487 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
488 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
491 if (data_parentItem == ad->data_time_fmt) {
493 rgd = elm_radio_add(scroller);
494 elm_radio_value_set(rgd, -1);
495 setting_create_Gendial_exp_sub_field(scroller,
496 &(ad->itc_1icon_1text_sub),
497 NULL, NULL, parentItem,
498 SWALLOW_Type_1RADIO, rgd,
499 VCONFKEY_TIME_FORMAT_12,
500 "IDS_COM_BODY_12_HOURS",
503 setting_create_Gendial_exp_sub_field(scroller,
504 &(ad->itc_1icon_1text_sub),
505 NULL, NULL, parentItem,
506 SWALLOW_Type_1RADIO, rgd,
507 VCONFKEY_TIME_FORMAT_24,
508 "IDS_ST_BODY_24_HOURS",
511 setting_update_chk_status(rgd,
512 data_parentItem->int_slp_setting_binded);
514 } else if (data_parentItem == ad->data_date_fmt) {
515 rgd = elm_radio_add(scroller);
516 elm_radio_value_set(rgd, -1);
517 setting_create_Gendial_exp_sub_field(scroller,
518 &(ad->itc_1icon_1text_sub),
519 NULL, NULL, parentItem,
520 SWALLOW_Type_1RADIO, rgd,
521 SETTING_DATE_FORMAT_DD_MM_YYYY,
522 "IDS_ST_BODY_DDMMYYYY_DOT",
525 setting_create_Gendial_exp_sub_field(scroller,
526 &(ad->itc_1icon_1text_sub),
527 NULL, NULL, parentItem,
528 SWALLOW_Type_1RADIO, rgd,
529 SETTING_DATE_FORMAT_MM_DD_YYYY,
530 "IDS_ST_BODY_MM_DD_YYYY_DOT",
533 setting_create_Gendial_exp_sub_field(scroller,
534 &(ad->itc_1icon_1text_sub),
535 NULL, NULL, parentItem,
536 SWALLOW_Type_1RADIO, rgd,
537 SETTING_DATE_FORMAT_YYYY_MM_DD,
538 "IDS_COM_BODY_YYYYMMDD",
541 setting_create_Gendial_exp_sub_field(scroller,
542 &(ad->itc_1icon_1text_sub),
543 NULL, NULL, parentItem,
544 SWALLOW_Type_1RADIO, rgd,
545 SETTING_DATE_FORMAT_YYYY_DD_MM,
546 "IDS_ST_BODY_YYYY_DD_MM_DOT",
549 setting_update_chk_status(rgd,
550 data_parentItem->int_slp_setting_binded);
552 } else if (data_parentItem == ad->data_firstday_week_fmt) {
553 rgd = elm_radio_add(scroller);
554 elm_radio_value_set(rgd, -1);
555 setting_create_Gendial_exp_sub_field(scroller,
556 &(ad->itc_1icon_1text_sub),
557 NULL, rgd, parentItem,
558 SWALLOW_Type_1RADIO, rgd,
559 SETTING_WEEKOFDAY_FORMAT_SUNDAY,
560 "IDS_ST_BODY_SUNDAY", NULL);
562 setting_create_Gendial_exp_sub_field(scroller,
563 &(ad->itc_1icon_1text_sub),
564 NULL, rgd, parentItem,
565 SWALLOW_Type_1RADIO, rgd,
566 SETTING_WEEKOFDAY_FORMAT_MONDAY,
567 "IDS_ST_BODY_MONDAY", NULL);
569 setting_update_chk_status(rgd,
570 data_parentItem->int_slp_setting_binded);
575 * layyout create - remove a conformant
577 Evas_Object *setting_create_win_layout2(Evas_Object *win_layout,
578 Evas_Object *win_obj)
580 Evas_Object *layout = NULL;
581 //Evas_Object *conform = elm_conformant_add(win_obj);
583 layout = elm_layout_add(win_obj);
584 setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
586 elm_layout_theme_set(layout, "layout", "application", "default");
587 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
588 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
589 //elm_win_resize_object_add(win_obj, layout);
590 //elm_win_resize_object_add(win_obj, conform);
591 //elm_object_content_set(conform, layout);
593 Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
594 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
595 evas_object_show(layout);
596 //evas_object_show(conform);
602 Evas_Object *setting_create_layout_navi_bar2(Evas_Object *win_layout,
603 Evas_Object *win_obj,
605 char *lbutton_str, char *rbutton_str, char *mbutton_str,
606 setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb,
607 setting_call_back_func mbutton_click_cb,
608 void *cb_data, Evas_Object *eo_view, /*any container obj constructed on any evas obj */
609 Evas_Object **navi_bar,
610 Evas_Object **titleobj)
613 Evas_Object *layout = setting_create_win_layout2(win_layout, win_obj);
614 *navi_bar = setting_create_navi_bar(layout);
616 setting_create_navi_bar_buttons(title_str,
617 lbutton_str, rbutton_str, mbutton_str,
618 lbutton_click_cb, rbutton_click_cb,
619 mbutton_click_cb, cb_data, eo_view /*content */ ,
624 static int setting_time_main_create(void *cb)
627 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
629 SettingTimeUG *ad = (SettingTimeUG *) cb;
633 char *title = _("IDS_ST_BODY_DATE_AND_TIME");
635 ad->is_datefield_selected = EINA_FALSE;
637 setting_call_back_func l_button_cb = NULL;
638 setting_call_back_func r_button_cb = NULL;
640 service_h service = ad->bundle_data;
642 service_get_extra_data(service, "caller", &caller);
643 service_get_extra_data(service, "lbutton", &l_btn);
645 l_button_cb = setting_time_main_click_softkey_caller_exist_left_cb;
646 service_get_extra_data(service, "title", &title);
647 service_get_extra_data(service, "rbutton", &r_btn);
649 r_button_cb = setting_time_main_click_softkey_caller_exist_right_cb;
651 Evas_Object *scroller; /* scroller is a genlist */
655 /* for setup wizard */
656 char *lbtn_str = (char *)g_strdup(l_btn);
657 bool same_flag = FALSE;
658 if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
659 l_btn = (char *)dgettext("sys_string", "IDS_COM_BODY_BACK");
663 //Evas_Object *controllbar = NULL;
665 scroller = elm_genlist_add(ad->win_main_layout);
666 elm_object_style_set(scroller, "dialogue");
667 if(scroller == NULL) {
668 SETTING_TRACE_ERROR("Cannot set scroller object as contento of layout");
669 // free allocated data before return.
671 return SETTING_DRAW_ERR_FAIL_SCROLLER;
674 elm_genlist_clear(scroller);
676 setting_create_layout_navi_bar2(ad->win_main_layout,
685 Evas_Object *lbtn_obj = elm_button_add(ad->win_main_layout);
687 return SETTING_DRAW_ERR_FAIL_SCROLLER;
689 Evas_Object *licon_obj = elm_icon_add(ad->win_main_layout);
690 if(licon_obj == NULL)
691 return SETTING_DRAW_ERR_FAIL_SCROLLER;
692 elm_icon_file_set(licon_obj, IMG_PREVIOUS, NULL);
694 elm_object_style_set(lbtn_obj, "naviframe/toolbar/default");
695 elm_object_text_set(lbtn_obj, l_btn);
696 elm_object_part_content_set(lbtn_obj, "elm.swallow.content", licon_obj);
697 evas_object_smart_callback_add(lbtn_obj, "clicked", l_button_cb, ad);
700 Evas_Object *rbtn_obj = elm_button_add(ad->win_main_layout);
702 return SETTING_DRAW_ERR_FAIL_SCROLLER;
704 Evas_Object *ricon_obj = elm_icon_add(ad->win_main_layout);
705 if(ricon_obj == NULL)
706 return SETTING_DRAW_ERR_FAIL_SCROLLER;
707 elm_icon_file_set(ricon_obj, IMG_NEXT, NULL);
709 elm_object_style_set(rbtn_obj, "naviframe/toolbar/default");
710 elm_object_text_set(rbtn_obj, r_btn);
711 elm_object_part_content_set(rbtn_obj, "elm.swallow.content", ricon_obj);
712 evas_object_smart_callback_add(rbtn_obj, "clicked", r_button_cb, ad);
714 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
717 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn_obj);
718 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn_obj);
721 l_btn = _("IDS_COM_BODY_BACK");
722 title = _("IDS_ST_BODY_DATE_AND_TIME");
724 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
727 setting_time_main_click_softkey_left_cb,
731 ad->scrl_main = scroller;
736 Elm_Object_Item *item;
738 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
739 ELM_GENLIST_ITEM_NONE, NULL, NULL);
740 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
741 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
743 bool auto_flag = value;
745 if(auto_flag) //do special process only when auto mode
747 //to read TAPI vconfs
751 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
752 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
753 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
754 if (ret == 0 && !isEmptyStr(tzpath))
756 //1.to update timezone
757 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
758 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
759 g_strlcat(tz_path, tzpath, sizeof(tz_path));
760 SETTING_TRACE("full tz_path:%s", tz_path);
761 ret = sysman_set_timezone(tz_path);
763 SETTING_TRACE("tzpath is not valid.");
765 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
766 if (!__setting_set_city_tzone(tzpath)) {
767 SETTING_TRACE("__setting_set_city_tzone ERROR")
769 if (get_city_name(tzpath)) {
770 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
772 char* city = get_city_name_result();
773 SETTING_TRACE("city:%s", city);
774 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
776 // 2.to set current time
778 FILE *fp = fopen("/proc/uptime", "r");
780 if (!fscanf(fp, "%d", &t_uptime)) {
781 SETTING_TRACE_ERROR("fscanf error");
786 SETTING_TRACE_ERROR("fopen error");
789 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
790 time_t t_current = t_nitz + t_uptime - t_offset;
791 SETTING_TRACE("t_current:%d", t_current);
792 ret = sysman_set_datetime(t_current);
799 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
800 setting_time_main_mouse_up_Gendial_list_cb,
801 ad, SWALLOW_Type_1TOGGLE, NULL,
803 "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
804 setting_time_main_chk_btn_cb);
806 ad->data_auto->userdata = ad;
808 SETTING_TRACE_ERROR("ad->data_auto is NULL");
811 setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
812 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
813 NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
815 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
816 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
819 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
821 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
822 char *pa_timezone = NULL;
823 char *pa_city = NULL;
825 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT); // IDS_WCL_BODY_CITYNAME_SEOUL
826 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT); // "Asia/Seoul"
828 if ((pa_timezone != NULL) && (_(pa_city) != NULL)) {
830 // don't use hard coded value
831 // get value from current timezone
833 char str_buf[GMT_BUF_SIZE] = {0, };
834 get_gmt_offset(str_buf, GMT_BUF_SIZE);
836 char* timezone_str = get_timezone_str();
838 bool ret = get_city_name(timezone_str);
840 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
842 char* cityname_id = _(get_city_name_result());
843 SETTING_TRACE("cityname_id:%s", cityname_id);
844 if (cityname_id && 0 != safeStrCmp(cityname_id, "NULL"))
845 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", cityname_id, _(str_buf));
847 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
854 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
858 /* UI create time zone */
860 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
861 setting_time_main_mouse_up_Gendial_list_cb,
862 ad, SWALLOW_Type_INVALID, NULL,
863 NULL, 0, "IDS_ST_BODY_TIME_ZONE",
864 time_zone_sub_str, NULL);
866 ad->data_tz->userdata = ad;
868 SETTING_TRACE_ERROR("ad->data_tz is NULL");
871 /* create DATE_AND_TIME */
874 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
876 if (ret == SETTING_RETURN_FAIL) {
877 value = VCONFKEY_TIME_FORMAT_12;
879 bool is_12hours = (value == VCONFKEY_TIME_FORMAT_12 ? TRUE : FALSE);
880 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
882 setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
883 if (ret == SETTING_RETURN_FAIL)
884 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
886 /* UI format string */
887 (void)setting_create_Gendial_field_titleItem(scroller,
889 "IDS_ST_BODY_DATE_AND_TIME", NULL);
891 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
892 setting_time_main_mouse_up_Gendial_list_cb,
893 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
894 NULL, NULL, is_12hours,
895 NULL,//"IDS_ST_BODY_DATE_AND_TIME",
896 date_format_str[value],
897 setting_time_main_datefield_change_cb);
899 ad->data_time->userdata = ad;
900 ad->data_time->isItemDisableFlag = auto_flag;
901 elm_genlist_item_select_mode_set(ad->data_time->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
903 SETTING_TRACE_ERROR("ad->data_time is NULL");
905 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
906 ELM_GENLIST_ITEM_NONE, NULL, NULL);
907 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
909 /* UI create "Time format" */
910 setting_enable_expandable_genlist(scroller, ad,
911 __setting_time_main_exp_cb, NULL);
913 char* pa_time_format = get_pa_time_format_str();
914 ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
915 &(ad->itc_2text_3_parent),
916 setting_time_main_mouse_up_Gendial_list_cb,
917 ad, SWALLOW_Type_INVALID,
918 "IDS_ST_BODY_TIME_FORMAT",
920 if (ad->data_time_fmt) {
921 ad->data_time_fmt->int_slp_setting_binded =
922 INT_SLP_SETTING_REGIONFORMAT_TIME1224;
924 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
926 G_FREE(pa_time_format);
928 #if APPLIED_DATATIME_DATA_FORMAT
929 char* pa_date_format = get_pa_date_format_str();
930 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
931 &(ad->itc_2text_3_parent),
932 setting_time_main_mouse_up_Gendial_list_cb,
933 ad, SWALLOW_Type_INVALID,
934 "IDS_ST_BODY_DATE_FORMAT",
936 if (ad->data_date_fmt) {
937 ad->data_date_fmt->int_slp_setting_binded =
938 INT_SLP_SETTING_DATE_FORMAT;
940 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
942 G_FREE(pa_date_format);
945 #if APPLIED_DATATIME_FIRSTDAY_WEEK
946 char* pa_week = get_pa_week_format_str();
947 ad->data_firstday_week_fmt =
948 setting_create_Gendial_exp_parent_field(scroller,
949 &(ad->itc_2text_3_parent),
950 setting_time_main_mouse_up_Gendial_list_cb,
951 ad, SWALLOW_Type_INVALID,
952 "IDS_CLD_BODY_FIRST_DAY_OF_WEEK",
954 if (ad->data_firstday_week_fmt) {
955 ad->data_firstday_week_fmt->int_slp_setting_binded =
956 INT_SLP_SETTING_WEEK_FORMAT;
958 SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
963 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
964 ELM_GENLIST_ITEM_NONE, NULL, NULL);
965 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
970 setting_disable_genlist_item(ad->data_tz->item);
973 setting_disable_genlist_item(ad->data_time->item);
977 setting_view_time_main.is_create = 1;
978 vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad);
980 /* register vconf key to get event callback for converting 12/24H */
981 vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb, ad);
982 /* register vconf key to get event callback for date format */
983 vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb, ad);
985 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb, ad);
986 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb, ad);
987 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb, ad);
989 /* to avoid update time-diff, every per 3s to update. */
990 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
992 return SETTING_RETURN_SUCCESS;
995 static int setting_time_main_destroy(void *cb)
999 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1001 SettingTimeUG *ad = (SettingTimeUG *) cb;
1003 if (ad->update_timer) {
1004 ecore_timer_del(ad->update_timer);
1005 ad->update_timer = NULL;
1008 #if PROGRESS_POPUP_SHOW
1009 if (ad->pop_progress) {
1010 evas_object_del(ad->pop_progress);
1011 ad->pop_progress = NULL;
1015 if (ad->update_timezone_idler) {
1016 ecore_idler_del(ad->update_timezone_idler);
1017 ad->update_timezone_idler = NULL;
1019 if (ad->refresh_time_idler) {
1020 ecore_idler_del(ad->refresh_time_idler);
1021 ad->refresh_time_idler = NULL;
1024 vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
1025 time_changed_callback);
1027 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
1028 setting_time_main_int_vconf_change_cb);
1029 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
1030 setting_time_main_int_vconf_change_cb);
1032 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb);
1033 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb);
1034 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb);
1036 if (ad->ly_main != NULL) {
1037 evas_object_del(ad->ly_main);
1038 setting_view_time_main.is_create = 0;
1041 return SETTING_RETURN_SUCCESS;
1044 static int setting_time_main_update(void *cb)
1046 SETTING_TRACE_BEGIN;
1047 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1049 SettingTimeUG *ad = (SettingTimeUG *) cb;
1051 if (ad->ly_main != NULL) {
1052 evas_object_show(ad->ly_main);
1054 if (ad->update_timezone_idler) {
1055 ecore_idler_del(ad->update_timezone_idler);
1056 ad->update_timezone_idler = NULL;
1058 ad->update_timezone_idler =
1059 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
1061 if (ad->refresh_time_idler) {
1062 ecore_idler_del(ad->refresh_time_idler);
1063 ad->refresh_time_idler = NULL;
1065 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
1067 return SETTING_RETURN_SUCCESS;
1070 static int setting_time_main_cleanup(void *cb)
1072 SETTING_TRACE_BEGIN;
1073 return SETTING_RETURN_SUCCESS;
1077 /* ***************************************************
1081 ****************************************************/
1083 int setting_time_check_automatic_time_update_state()
1085 SETTING_TRACE_BEGIN;
1091 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1098 static int __setting_set_city_tzone(const char* pTZPath)
1100 // let's get city & timezone string from pTZPath
1102 char szTimezone[GMT_BUF_SIZE] = {0,};
1103 char* pStr = strdup(pTZPath);
1105 // 2. timezone string +/-<n> ex. +9, -1
1106 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
1108 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, szTimezone);
1111 SETTING_TRACE("set vconf failed");
1116 /** @todo replace with vconf ID */
1117 ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
1124 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
1125 service_h result, void *priv)
1127 SETTING_TRACE_BEGIN;
1129 retm_if(priv == NULL, "Data parameter is NULL");
1131 SettingTimeUG *ad = (SettingTimeUG *) priv;
1134 char *tzpath = NULL;
1135 service_get_extra_data(result, "city", &city);
1136 service_get_extra_data(result, "tzpath", &tzpath);
1139 SETTING_TRACE("tzpath from worldclock UG is null.");
1142 SETTING_TRACE("tzpath : %s", tzpath );
1144 SETTING_TRACE("city : %s", city );
1146 /* --------------------------------------------------------------------- */
1147 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
1148 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1149 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1150 SETTING_TRACE("full tz_path:%s", tz_path);
1152 int ret = sysman_set_timezone(tz_path);
1154 SETTING_TRACE("tzpath is not valid.");
1157 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
1159 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1160 setting_retm_if(ret != 0, "set vconf failed");
1162 // parse city and GMT offset from tzpath and system time property
1163 // set the strings in vconf which will be used while updating display of timezone
1164 if (!__setting_set_city_tzone(tzpath)) {
1165 SETTING_TRACE("__setting_set_city_tzone ERROR")
1169 // update the display for timezone
1170 setting_update_timezone(ad);
1171 static int t_event_val = -1;
1172 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
1176 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
1179 SETTING_TRACE_BEGIN;
1180 /* if(ug) ug_destroy(ug); */
1181 /* restore the '<-' button on the navigate bar */
1183 SettingTimeUG *ad = (SettingTimeUG *) priv;
1186 ad->ug_loading = NULL;
1188 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1190 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1192 if (back_btn != NULL) {
1193 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1198 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1202 SETTING_TRACE_BEGIN;
1203 SettingTimeUG *ad = (SettingTimeUG *) priv;
1209 base = (Evas_Object *) ug_get_layout(ug);
1214 case UG_MODE_FULLVIEW:
1215 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1217 //elm_win_resize_object_add(ad->win_get, base);
1218 evas_object_show(base);
1227 void setting_time_main_launch_worldclock_sg(void *data)
1229 SETTING_TRACE_BEGIN;
1231 retm_if(data == NULL, "Data parameter is NULL");
1233 SettingTimeUG *ad = (SettingTimeUG *) data;
1235 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1236 setting_retm_if(!cbs, "calloc failed");
1237 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1238 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1239 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1240 cbs->priv = (void *)ad;
1242 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1244 ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1245 if (NULL == ad->ug_loading) { /* error handling */
1253 Eina_Bool setting_update_datefield(void *cb)
1255 SETTING_TRACE_BEGIN;
1256 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1257 SettingTimeUG *ad = (SettingTimeUG *) cb;
1259 //__refresh_date_timer(ad);
1260 if (ad->data_time) {
1261 time_t ctime = time(NULL);
1263 struct tm *ts = localtime_r(&ctime, &ts_ret);
1264 if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1266 ad->refresh_time_idler = NULL;
1270 /* ***************************************************
1274 ****************************************************/
1277 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1280 SETTING_TRACE_BEGIN;
1281 retm_if(data == NULL, "Data parameter is NULL");
1283 SettingTimeUG *ad = (SettingTimeUG *) data;
1285 /* Send destroy request */
1286 ug_destroy_me(ad->ug);
1289 /* ***************************************************
1293 ****************************************************/
1296 setting_time_main_click_softkey_caller_exist_left_cb(void *data,
1300 SETTING_TRACE_BEGIN;
1302 retm_if(data == NULL, "Data parameter is NULL");
1304 SettingTimeUG *ad = (SettingTimeUG *) data;
1306 /* Create Bundle and send message */
1308 if (service_create(&svc))
1311 service_add_extra_data(svc, "result", "lbutton_click");
1312 ug_send_result(ad->ug, svc);
1314 service_destroy(svc);
1316 /* Send destroy request */
1317 ug_destroy_me(ad->ug);
1321 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1325 SETTING_TRACE_BEGIN;
1327 retm_if(data == NULL, "Data parameter is NULL");
1329 SettingTimeUG *ad = (SettingTimeUG *) data;
1331 /* Create Bundle and send message */
1333 if (service_create(&svc))
1336 service_add_extra_data(svc, "result", "rbutton_click");
1337 ug_send_result(ad->ug, svc);
1339 service_destroy(svc);
1341 /* Send destroy request */
1342 ug_destroy_me(ad->ug);
1345 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1346 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
1349 SETTING_TRACE_BEGIN;
1350 int response_type = btn_type(obj);
1351 if (POPUP_RESPONSE_OK == response_type) {
1352 setting_time_main_btn_update_ok_cb(data);
1353 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1354 setting_time_main_btn_update_cancel_cb(data);
1357 SettingTimeUG *ad = data;
1360 evas_object_del(ad->pop);
1366 static void __time_auto_update(void *data)
1368 setting_retm_if(data == NULL, "Data parameter is NULL");
1369 SettingTimeUG *ad = (SettingTimeUG *) data;
1371 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1372 SETTING_ON_OFF_BTN_ON, &err);
1374 setting_disable_genlist_item(ad->data_tz->item);
1377 if (ad->data_time) {
1378 ad->data_time->isItemDisableFlag = FALSE;
1379 setting_disable_evas_object(ad->data_time->eo_check);
1380 setting_disable_genlist_item(ad->data_time->item);
1382 __update_time_via_sim_card(ad);
1386 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1388 SETTING_TRACE_BEGIN;
1390 retm_if(data == NULL, "Data parameter is NULL");
1391 SettingTimeUG *ad = NULL;
1392 Setting_GenGroupItem_Data *list_item =
1393 (Setting_GenGroupItem_Data *) data;
1394 ad = list_item->userdata;
1395 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1397 ad->chk_auto = ad->data_auto->eo_check;
1399 ad->chk_dst = ad->data_dst->eo_check;
1401 if (ad->data_time) {
1402 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1406 if (obj == ad->chk_auto) {
1408 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1411 (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1412 elm_check_state_set(ad->chk_auto, 0);
1415 setting_enable_genlist_item(ad->data_tz->item);
1418 if (ad->data_time) {
1419 ad->data_time->isItemDisableFlag = FALSE;
1420 setting_enable_evas_object(ad->data_time->eo_check);
1421 setting_enable_genlist_item(ad->data_time->item);
1425 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1427 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1428 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1429 setting_time_reboot_resp_cb,
1431 dgettext("sys_string",
1433 _("IDS_COM_SK_CANCEL"));
1435 __time_auto_update(ad);
1440 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1443 SETTING_TRACE_BEGIN;
1445 setting_retm_if(data == NULL, "Data parameter is NULL");
1447 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1448 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1449 elm_genlist_item_selected_set(item, 0);
1450 Setting_GenGroupItem_Data *list_item =
1451 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1453 SettingTimeUG *ad = (SettingTimeUG *) data;
1454 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1456 if (ad->data_time && ad->data_time != list_item) {
1457 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1460 if (ad->data_tz == list_item) {
1461 ad->is_datefield_selected = EINA_FALSE;
1462 if (1 == setting_time_check_automatic_time_update_state()) {
1463 setting_create_simple_popup(ad, ad->win_get,
1464 NULL, _(AUTO_TIME_UPDATE_ON));
1466 setting_time_main_launch_worldclock_sg(ad);
1469 } else if (ad->data_time == list_item) {
1470 ad->is_datefield_selected = EINA_TRUE;
1471 if (1 == setting_time_check_automatic_time_update_state()) {
1472 setting_create_simple_popup(ad, ad->win_get,
1473 NULL, _(AUTO_TIME_UPDATE_ON));
1475 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1477 } else if (ad->data_auto == list_item) {
1478 ad->is_datefield_selected = EINA_FALSE;
1479 int old_status = elm_check_state_get(list_item->eo_check);
1481 list_item->chk_status = !old_status;
1482 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1484 if (!list_item->chk_status) {
1486 setting_set_bool_slp_key
1487 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1488 SETTING_ON_OFF_BTN_OFF, &err);
1491 setting_enable_genlist_item(ad->data_tz->item);
1494 if (ad->data_time) {
1495 ad->data_time->isItemDisableFlag = FALSE;
1496 setting_enable_evas_object(ad->data_time->eo_check);
1497 setting_enable_genlist_item(ad->data_time->item);
1501 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1503 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1504 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1505 setting_time_reboot_resp_cb,
1507 dgettext("sys_string", "IDS_COM_SK_OK"),
1508 _("IDS_COM_SK_CANCEL"));
1510 __time_auto_update(ad);
1515 else if (ad->data_time_fmt == list_item
1516 || ad->data_date_fmt == list_item
1517 || ad->data_firstday_week_fmt == list_item) {
1518 ad->is_datefield_selected = EINA_FALSE;
1519 bool status = !elm_genlist_item_expanded_get(item);
1520 elm_genlist_item_expanded_set(item, status);
1525 void setting_time_main_btn_update_ok_cb(void *cb)
1527 SETTING_TRACE_BEGIN;
1528 SettingTimeUG *ad = (SettingTimeUG *) cb;
1529 int err; /* error check */
1530 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1531 SETTING_ON_OFF_BTN_ON, &err);
1532 elm_check_state_set(ad->data_auto->eo_check, 1);
1533 ad->data_auto->chk_status = 1;
1535 sysman_request_reboot();
1537 /* We'd better check return value from sysman_request_reboot() function. */
1538 /* It will return 0 on success or -1 if failed. */
1542 void setting_time_main_btn_update_cancel_cb(void *cb)
1544 SETTING_TRACE_BEGIN;
1545 SettingTimeUG *ad = (SettingTimeUG *) cb;
1547 int err; /* error check */
1549 retm_if(cb == NULL, "Data parameter is NULL");
1550 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1551 SETTING_ON_OFF_BTN_OFF, &err);
1552 elm_check_state_set(ad->data_auto->eo_check, 0);
1553 ad->data_auto->chk_status = 0;
1558 static UChar *uastrcpy(const char *chars)
1562 len = safeStrLen(chars);
1563 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1566 u_uastrcpy(str, chars);
1571 static int get_timezone_isdst(int* isdst)
1573 SETTING_TRACE_BEGIN;
1577 enum { BUFFERSIZE = 1024 };
1578 char buf[BUFFERSIZE];
1579 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1585 /* handle error condition */
1589 ts = localtime(&ctime);
1591 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
1594 SETTING_TRACE(" == tz_path = %s", buf);
1595 SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst);
1596 *isdst = ts->tm_isdst;
1598 return SETTING_RETURN_SUCCESS;
1602 static void ICU_set_timezone(const char *timezone)
1604 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1605 UErrorCode ec = U_ZERO_ERROR;
1606 UChar *str = uastrcpy(timezone);
1608 ucal_setDefaultTimeZone(str, &ec);
1609 if (U_SUCCESS(ec)) {
1610 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1612 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1619 static void setting_time_main_controlbar_lbtn_label_set(
1620 Evas_Object *controlbar,
1623 SETTING_TRACE_BEGIN;
1624 setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
1625 setting_retm_if(label == NULL, "label parameter is NULL");
1627 Evas_Object *eo_lbtn = NULL;
1628 Elm_Object_Item *first_item = NULL;
1630 first_item = elm_toolbar_first_item_get(controlbar);
1631 setting_retm_if(first_item == NULL, "get first_item failed");
1633 eo_lbtn = elm_object_item_part_content_get(first_item, "object");
1634 setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
1636 elm_object_text_set(eo_lbtn, label);
1641 * ex) timezone : Asia/Seoul --> returns "+09"
1645 static void get_gmt_offset(char *str_buf, int size)
1647 // timezone string +/-<n> ex. +9, -1
1648 time_t t = time(0); // get unix time. sec.
1651 data = localtime(&t); // save time as structure.
1652 setting_retm_if(!data, "data is NULL");
1653 data->tm_isdst = 0; // summer time, not applied.
1654 time_t a = mktime(data);
1657 data->tm_isdst = 0; // summer time, not applied.
1658 time_t b = mktime(data);
1660 int gmtoffset_hour = (a-b)/3600; // result : hour.
1661 int gmtoffset_min = ((a-b)%3600)/60; // result : min.
1662 if(gmtoffset_min != 0) {
1666 snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
1667 SETTING_TRACE("szTimezone is of a valid format: GMT: %s", str_buf);
1672 static char* get_timezone_str()
1674 SETTING_TRACE_BEGIN;
1676 enum { BUFFERSIZE = 1024 };
1677 char buf[BUFFERSIZE];
1678 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1684 /* handle error condition */
1686 return g_strdup(buf+20); //Asia/Seoul
1689 static char* get_city_name_result()
1695 // in_str = "Asia/Seoul"
1696 static bool get_city_name(char* tzname)
1698 sqlite3 *pSQLite3 = NULL;
1699 char *szErrMsg = NULL;
1701 int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
1704 printf( "Can't open database: %s\n", sqlite3_errmsg( pSQLite3 ));
1705 sqlite3_close( pSQLite3 );
1711 printf("Database opened!!\n");
1712 char query_str[256];
1713 snprintf(query_str, 256, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1714 printf("%s \n", query_str);
1715 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1719 sqlite3_free( szErrMsg );
1720 sqlite3_close( pSQLite3 );
1721 printf("Database close!!\n");
1725 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1728 printf("%s\n", argv[i] ? argv[i] : "NULL");
1729 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1735 int main(int argc, char* argv[])
1739 // exporting - current status
1740 if ( (argc == 2) && (0 == strcmp(argv[1], "export"))) {
1743 else if ( (argc == 2) && (0 == strcmp(argv[1], "timezone_init"))) {
1745 //////////////////////////////////////////////////////////////////////////
1746 char* tz_path_zone_city = get_timezone_str();
1747 bool ret = get_city_name(tz_path_zone_city);
1749 printf(">>>>>> RESULT : %s \n", get_city_name_result());
1751 //////////////////////////////////////////////////////////////////////////
1756 ret = setting_cfg_create();