3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include <setting-time-main.h>
19 #include <sysman_managed.h>
29 #include <vconf-keys.h>
31 #include <unicode/udat.h>
32 #include <unicode/ustring.h>
33 #include <unicode/uloc.h>
34 #include <unicode/ucal.h>
35 #include <unicode/utmscale.h>
38 #define PROGRESS_POPUP_SHOW 0
41 static UChar *uastrcpy(const char *chars);
42 static void ICU_set_timezone(const char *timezone);
43 static int get_timezone_isdst(int* isdst);
44 static void get_gmt_offset(char *str_buf, int size);
46 static char* get_timezone_str();
47 static char* get_city_name_result();
48 static bool get_city_name(char* tzname);
50 static char* s_result;
51 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
52 static bool setting_update_timezone(SettingTimeUG *ad);
54 static int setting_time_main_create(void *cb);
55 static int setting_time_main_destroy(void *cb);
56 static int setting_time_main_update(void *cb);
57 static int setting_time_main_cleanup(void *cb);
59 setting_view setting_view_time_main = {
60 .create = setting_time_main_create,
61 .destroy = setting_time_main_destroy,
62 .update = setting_time_main_update,
63 .cleanup = setting_time_main_cleanup,
66 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
67 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
71 bool __update_timezone_idler(SettingTimeUG *ad)
73 setting_update_timezone(ad);
74 ad->update_timezone_idler = NULL;
78 void time_changed_callback(keynode_t *key, void *data) {
80 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
81 SettingTimeUG *ad = (SettingTimeUG *)data;
83 int ret = setting_time_update_cb(ad);
85 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
88 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
89 if(EINA_TRUE == ad->is_datefield_selected) {
90 /* Timezone is not changed and a selected value of the datefield is already changed */
91 SETTING_TRACE("Datefield is selected\n");
96 // vconfset to update timezone
97 char pTZPath[__MAX_PATH_SIZE];
98 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
100 pTZPath[nLen] = '\0';
102 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
106 if (!__setting_set_city_tzone(&pTZPath[20])) {
107 SETTING_TRACE("__setting_set_city_tzone ERROR");
110 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
111 setting_retm_if(timezone == NULL, "get vonf failed");
112 ICU_set_timezone(timezone);
116 if (ad->update_timezone_idler) {
117 ecore_idler_del(ad->update_timezone_idler);
118 ad->update_timezone_idler = NULL;
120 ad->update_timezone_idler =
121 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
123 if (ad->refresh_time_idler) {
124 ecore_idler_del(ad->refresh_time_idler);
125 ad->refresh_time_idler = NULL;
127 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
130 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
140 char time_str[MAX_ARGS];
143 ts = localtime_r(&ctime, &ts_ret);
146 /* set time in particular format */
147 ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
148 if (ret == SETTING_RETURN_FAIL)
149 value = VCONFKEY_TIME_FORMAT_12;
152 case VCONFKEY_TIME_FORMAT_12:
155 strftime(time_str, MAX_ARGS, "%l:%M %p ", &ts_ret);
159 case VCONFKEY_TIME_FORMAT_24:
161 strftime(time_str, MAX_ARGS, "%H:%M", &ts_ret);
170 elm_object_item_data_set(ad->data_time->item, ad->data_time);
171 elm_genlist_item_update(ad->data_time->item);
175 bool setting_update_timezone(SettingTimeUG *ad)
177 /* SETTING_TRACE_BEGIN; */
178 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
179 char *pa_timezone = NULL;
180 char *pa_city = NULL;
184 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
185 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);
187 //if ((pa_timezone != NULL) && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
188 if ((pa_timezone != NULL) && (_(pa_city) != NULL )) {
189 /* SETTING_TRACE_DEBUG("*** timezone: %s *** ", timezone); */
190 /* SETTING_TRACE_DEBUG("*** city: %s *** ", _(city)); */
191 /* SETTING_TRACE_DEBUG("*** ret: %d, dst: %d *** ", ret, dst); */
193 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(pa_city), pa_timezone);
194 //ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", pa_timezone, _(pa_city));
198 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
201 SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
204 ad->data_tz->sub_desc = (char *)g_strdup(time_zone_sub_str);
205 elm_object_item_data_set(ad->data_tz->item, ad->data_tz);
206 elm_genlist_item_update(ad->data_tz->item);
212 static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
214 /* SETTING_TRACE_BEGIN; */
215 ret_if(NULL == data);
216 SettingTimeUG *ad = data;
217 int status = vconf_keynode_get_int(key);
218 char *vconf_name = vconf_keynode_get_name(key);
219 /* SETTING_TRACE("vconf_name:%s", vconf_name); */
221 if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224)) {
224 /* VCONFKEY_REGIONFORMAT_TIME1224 1:12H 2:24H */
225 if (status <= 2 && status > 0) /* 1, 2 */
226 --status; /* set to 0 or 1 */
228 status = 0; /* set 12H */
230 /* TODO assert 1 or 0 */
231 ad->data_time->chk_status = !status;
233 char datefield_format[MAX_DATETIME_FORMAT_LEN + 1] = {0, };
235 const char *time_format = NULL;
236 if (ad->data_time->chk_status)//12 hours
238 time_format = "%I : %M %p";
240 time_format = "%H : %M";
243 //get date format from datefiled itself, if elm_datetime_add() supports set date-format via ICU.
244 #ifdef SUPPORT_DATEFIELD_DATE_FORMAT_AUTOSET
245 const char *old_format = elm_datetime_format_get(ad->data_time->eo_check);
246 snprintf(datefield_format, MAX_DATE_FORMAT_LEN + 1, //add one space " "
248 safeStrNCat(datefield_format, time_format, MAX_DATETIME_FORMAT_LEN);
249 SETTING_TRACE("datefield_format:%s", datefield_format);
251 int value = SETTING_DATE_FORMAT_DD_MM_YYYY;
254 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
255 int ret = setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
256 if (ret == SETTING_RETURN_FAIL)
257 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
259 snprintf(datefield_format, MAX_DATETIME_FORMAT_LEN,
260 "%s %s", date_format_str[value], time_format);
263 elm_datetime_format_set(ad->data_time->eo_check, datefield_format);
268 static void __update_time_via_sim_card(void *data)
270 setting_retm_if(data == NULL, "Data parameter is NULL");
271 SettingTimeUG *ad = (SettingTimeUG *) data;
275 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
276 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
277 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
278 if (ret != 0 || isEmptyStr(tzpath))
280 setting_create_simple_popup(ad, ad->ly_main,
281 NULL, _(NOT_SUPPORT_AUTO_UPDATE_DESC));
287 SETTING_TRACE("tz_path:%s", tzpath);
289 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
290 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
291 g_strlcat(tz_path, tzpath, sizeof(tz_path));
292 SETTING_TRACE("full tz_path:%s", tz_path);
293 ret = sysman_set_timezone(tz_path);
295 SETTING_TRACE("tzpath is not valid.");
298 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
299 if (!__setting_set_city_tzone(tzpath)) {
300 SETTING_TRACE("__setting_set_city_tzone ERROR")
303 if (get_city_name(tzpath)) {
304 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
306 char* city = get_city_name_result();
307 SETTING_TRACE("city:%s", city);
310 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
311 setting_retm_if(ret != 0, "set vconf[%s] failed", VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
313 setting_update_timezone(ad);
317 FILE *fp = fopen("/proc/uptime", "r");
319 if (!fscanf(fp, "%d", &t_uptime)) {
320 SETTING_TRACE_ERROR("fscanf error");
325 SETTING_TRACE_ERROR("fopen error");
328 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
329 time_t t_current = t_nitz + t_uptime - t_offset;
330 SETTING_TRACE("t_current:%d", t_current);
331 ret = sysman_set_datetime(t_current);
332 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
335 struct tm *ts = localtime_r(&t_current, &ts_ret);
337 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
340 // time change - event
341 static int t_event_val = -1;
342 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
345 static void __sim_time_info_chg_cb(keynode_t *key, void *data)
348 ret_if(NULL == data);
349 SettingTimeUG *ad = data;
350 char *vconf_name = vconf_keynode_get_name(key);
351 SETTING_TRACE("vconf_name:%s", vconf_name);
352 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_GMT)
353 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_EVENT_GMT)
354 || !safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_NITZ_ZONE)) {
357 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
364 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
365 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
366 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
367 if (ret != 0 || isEmptyStr(tzpath))
371 __update_time_via_sim_card(ad);
376 /* ***************************************************
380 ***************************************************/
381 static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
386 ret_if(data == NULL);
387 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
388 SettingTimeUG *ad = list_item->userdata;
390 ad->is_datefield_selected = EINA_TRUE;
392 if (ad->update_timer) {
393 ecore_timer_reset(ad->update_timer);
394 ecore_timer_freeze(ad->update_timer);
397 // If auto update is on, don't anything while the datefield has been updated (i.e., time runs)
398 if (1 == setting_time_check_automatic_time_update_state()) {
399 SETTING_TRACE("AUTO_TIME ON: no action");
400 if (ad->update_timer) {
401 ecore_timer_thaw(ad->update_timer);
406 // otherwise, we apply a new date which has been changed by a user
410 elm_datetime_value_get(obj, &_tm);
412 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
413 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
414 if (2037 < _tm.tm_year) {
415 setting_create_simple_popup(ad, ad->win_get,
416 NULL, _(ERR_BIGGER_THAN_2037));
417 if (ad->update_timer) {
418 ecore_timer_thaw(ad->update_timer);
422 #if SUPPORT_SCREEN_PROTECTED /* if not lock the current state, after set the time, the screen will become dimmed */
423 pm_lock_state(LCD_NORMAL, STAY_CUR_STATE, 0);
428 if (get_timezone_isdst(&isdst) == SETTING_RETURN_SUCCESS) {
429 _tm.tm_isdst = isdst;
432 SETTING_TRACE_ERROR("get_timezone_isdst() failed");
433 if (ad->update_timer) {
434 ecore_timer_thaw(ad->update_timer);
439 /* local time -> gmtime */
440 time_t the_time = mktime(&_tm); /* represent local time */
442 if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
444 SETTING_TRACE("Time is not changed\n");
445 //current time didn't change
446 if (ad->update_timer) {
447 ecore_timer_thaw(ad->update_timer);
452 #if PROGRESS_POPUP_SHOW
453 // remove popup if created
454 if (ad->pop_progress) {
455 evas_object_del(ad->pop_progress);
456 ad->pop_progress = NULL;
461 setting_create_popup_with_progressbar(ad, ad->win_get, "pending_list",
462 NULL, NULL, NULL, 0, TRUE, TRUE);
465 // invoke API to change time
466 int ret = sysman_set_datetime(the_time);
468 if (ad->update_timer) {
469 ecore_timer_thaw(ad->update_timer);
472 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
477 Eina_Bool __refresh_date_timer(void *data)
479 //SETTING_TRACE_BEGIN;
480 SettingTimeUG *ad = data;
482 time_t ctime = time(NULL);
484 struct tm *ts = localtime_r(&ctime, &ts_ret);
488 elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
489 if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
491 SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
492 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
498 static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
501 ret_if(NULL == data || NULL == event_info);
503 SettingTimeUG *ad = (SettingTimeUG *) data;
504 Elm_Object_Item *parentItem = event_info; /* parent item */
505 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
506 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
509 if (data_parentItem == ad->data_time_fmt) {
511 rgd = elm_radio_add(scroller);
512 elm_radio_value_set(rgd, -1);
513 setting_create_Gendial_exp_sub_field(scroller,
514 &(ad->itc_1icon_1text_sub),
515 NULL, NULL, parentItem,
516 SWALLOW_Type_1RADIO, rgd,
517 VCONFKEY_TIME_FORMAT_12,
518 "IDS_COM_BODY_12_HOURS",
521 setting_create_Gendial_exp_sub_field(scroller,
522 &(ad->itc_1icon_1text_sub),
523 NULL, NULL, parentItem,
524 SWALLOW_Type_1RADIO, rgd,
525 VCONFKEY_TIME_FORMAT_24,
526 "IDS_ST_BODY_24_HOURS",
529 setting_update_chk_status(rgd,
530 data_parentItem->int_slp_setting_binded);
532 } else if (data_parentItem == ad->data_date_fmt) {
533 rgd = elm_radio_add(scroller);
534 elm_radio_value_set(rgd, -1);
535 setting_create_Gendial_exp_sub_field(scroller,
536 &(ad->itc_1icon_1text_sub),
537 NULL, NULL, parentItem,
538 SWALLOW_Type_1RADIO, rgd,
539 SETTING_DATE_FORMAT_DD_MM_YYYY,
540 "IDS_ST_BODY_DDMMYYYY_DOT",
543 setting_create_Gendial_exp_sub_field(scroller,
544 &(ad->itc_1icon_1text_sub),
545 NULL, NULL, parentItem,
546 SWALLOW_Type_1RADIO, rgd,
547 SETTING_DATE_FORMAT_MM_DD_YYYY,
548 "IDS_ST_BODY_MM_DD_YYYY_DOT",
551 setting_create_Gendial_exp_sub_field(scroller,
552 &(ad->itc_1icon_1text_sub),
553 NULL, NULL, parentItem,
554 SWALLOW_Type_1RADIO, rgd,
555 SETTING_DATE_FORMAT_YYYY_MM_DD,
556 "IDS_COM_BODY_YYYYMMDD",
559 setting_create_Gendial_exp_sub_field(scroller,
560 &(ad->itc_1icon_1text_sub),
561 NULL, NULL, parentItem,
562 SWALLOW_Type_1RADIO, rgd,
563 SETTING_DATE_FORMAT_YYYY_DD_MM,
564 "IDS_ST_BODY_YYYY_DD_MM_DOT",
567 setting_update_chk_status(rgd,
568 data_parentItem->int_slp_setting_binded);
570 } else if (data_parentItem == ad->data_firstday_week_fmt) {
571 rgd = elm_radio_add(scroller);
572 elm_radio_value_set(rgd, -1);
573 setting_create_Gendial_exp_sub_field(scroller,
574 &(ad->itc_1icon_1text_sub),
575 NULL, rgd, parentItem,
576 SWALLOW_Type_1RADIO, rgd,
577 SETTING_WEEKOFDAY_FORMAT_SUNDAY,
578 "IDS_ST_BODY_SUNDAY", NULL);
580 setting_create_Gendial_exp_sub_field(scroller,
581 &(ad->itc_1icon_1text_sub),
582 NULL, rgd, parentItem,
583 SWALLOW_Type_1RADIO, rgd,
584 SETTING_WEEKOFDAY_FORMAT_MONDAY,
585 "IDS_ST_BODY_MONDAY", NULL);
587 setting_update_chk_status(rgd,
588 data_parentItem->int_slp_setting_binded);
593 * layyout create - remove a conformant
595 Evas_Object *setting_create_win_layout2(Evas_Object *win_layout,
596 Evas_Object *win_obj)
598 Evas_Object *layout = NULL;
599 //Evas_Object *conform = elm_conformant_add(win_obj);
601 layout = elm_layout_add(win_obj);
602 setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
604 elm_layout_theme_set(layout, "layout", "application", "default");
605 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
606 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
607 //elm_win_resize_object_add(win_obj, layout);
608 //elm_win_resize_object_add(win_obj, conform);
609 //elm_object_content_set(conform, layout);
611 Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
612 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
613 evas_object_show(layout);
614 //evas_object_show(conform);
620 Evas_Object *setting_create_layout_navi_bar2(Evas_Object *win_layout,
621 Evas_Object *win_obj,
623 char *lbutton_str, char *rbutton_str, char *mbutton_str,
624 setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb,
625 setting_call_back_func mbutton_click_cb,
626 void *cb_data, Evas_Object *eo_view, /*any container obj constructed on any evas obj */
627 Evas_Object **navi_bar,
628 Evas_Object **titleobj)
631 Evas_Object *layout = setting_create_win_layout2(win_layout, win_obj);
632 *navi_bar = setting_create_navi_bar(layout);
634 setting_create_navi_bar_buttons(title_str,
635 lbutton_str, rbutton_str, mbutton_str,
636 lbutton_click_cb, rbutton_click_cb,
637 mbutton_click_cb, cb_data, eo_view /*content */ ,
642 static int setting_time_main_create(void *cb)
645 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
647 SettingTimeUG *ad = (SettingTimeUG *) cb;
650 //char *r_btn = NULL;
651 char *title = _("IDS_ST_BODY_DATE_AND_TIME");
653 ad->is_datefield_selected = EINA_FALSE;
655 //setting_call_back_func l_button_cb = NULL;
656 //setting_call_back_func r_button_cb = NULL;
658 service_h service = ad->bundle_data;
660 service_get_extra_data(service, "caller", &caller);
661 //service_get_extra_data(service, "lbutton", &l_btn);
663 // l_button_cb = setting_time_main_click_softkey_caller_exist_left_cb;
664 service_get_extra_data(service, "title", &title);
665 //service_get_extra_data(service, "rbutton", &r_btn);
667 // r_button_cb = setting_time_main_click_softkey_caller_exist_right_cb;
669 Evas_Object *scroller; /* scroller is a genlist */
675 /* for setup wizard */
676 char *lbtn_str = (char *)g_strdup(l_btn);
677 bool same_flag = FALSE;
678 if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
679 l_btn = (char *)dgettext("sys_string", "IDS_COM_BODY_BACK");
683 //Evas_Object *controllbar = NULL;
685 scroller = elm_genlist_add(ad->win_main_layout);
686 elm_object_style_set(scroller, "dialogue");
687 if(scroller == NULL) {
688 SETTING_TRACE_ERROR("Cannot set scroller object as contento of layout");
689 // free allocated data before return.
691 return SETTING_DRAW_ERR_FAIL_SCROLLER;
694 elm_genlist_clear(scroller);
696 setting_create_layout_navi_bar2(ad->win_main_layout,
705 Evas_Object *lbtn_obj = elm_button_add(ad->win_main_layout);
707 return SETTING_DRAW_ERR_FAIL_SCROLLER;
709 Evas_Object *licon_obj = elm_icon_add(ad->win_main_layout);
710 if(licon_obj == NULL)
711 return SETTING_DRAW_ERR_FAIL_SCROLLER;
712 elm_icon_file_set(licon_obj, IMG_PREVIOUS, NULL);
714 elm_object_style_set(lbtn_obj, "naviframe/toolbar/left");
715 elm_object_text_set(lbtn_obj, l_btn);
716 elm_object_part_content_set(lbtn_obj, "elm.swallow.content", licon_obj);
717 evas_object_smart_callback_add(lbtn_obj, "clicked", l_button_cb, ad);
720 Evas_Object *rbtn_obj = elm_button_add(ad->win_main_layout);
722 return SETTING_DRAW_ERR_FAIL_SCROLLER;
724 Evas_Object *ricon_obj = elm_icon_add(ad->win_main_layout);
725 if(ricon_obj == NULL)
726 return SETTING_DRAW_ERR_FAIL_SCROLLER;
727 elm_icon_file_set(ricon_obj, IMG_NEXT, NULL);
729 elm_object_style_set(rbtn_obj, "naviframe/toolbar/right");
730 elm_object_text_set(rbtn_obj, r_btn);
731 elm_object_part_content_set(rbtn_obj, "elm.swallow.content", ricon_obj);
732 evas_object_smart_callback_add(rbtn_obj, "clicked", r_button_cb, ad);
734 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
737 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn_obj);
738 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn_obj);
742 l_btn = _("IDS_COM_BODY_BACK");
743 title = _("IDS_ST_BODY_DATE_AND_TIME");
745 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
748 setting_time_main_click_softkey_left_cb,
752 ad->scrl_main = scroller;
757 Elm_Object_Item *item;
759 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
760 ELM_GENLIST_ITEM_NONE, NULL, NULL);
761 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
762 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
764 bool auto_flag = value;
766 if(auto_flag) //do special process only when auto mode
768 //to read TAPI vconfs
772 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
773 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
774 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
775 if (ret == 0 && !isEmptyStr(tzpath))
777 //1.to update timezone
778 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
779 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
780 g_strlcat(tz_path, tzpath, sizeof(tz_path));
781 SETTING_TRACE("full tz_path:%s", tz_path);
782 ret = sysman_set_timezone(tz_path);
784 SETTING_TRACE("tzpath is not valid.");
786 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
787 if (!__setting_set_city_tzone(tzpath)) {
788 SETTING_TRACE("__setting_set_city_tzone ERROR")
790 if (get_city_name(tzpath)) {
791 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
793 char* city = get_city_name_result();
794 SETTING_TRACE("city:%s", city);
795 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
797 // 2.to set current time
799 FILE *fp = fopen("/proc/uptime", "r");
801 if (!fscanf(fp, "%d", &t_uptime)) {
802 SETTING_TRACE_ERROR("fscanf error");
807 SETTING_TRACE_ERROR("fopen error");
810 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
811 time_t t_current = t_nitz + t_uptime - t_offset;
812 SETTING_TRACE("t_current:%d", t_current);
813 ret = sysman_set_datetime(t_current);
820 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
821 setting_time_main_mouse_up_Gendial_list_cb,
822 ad, SWALLOW_Type_1TOGGLE, NULL,
824 "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
825 setting_time_main_chk_btn_cb);
827 ad->data_auto->userdata = ad;
829 SETTING_TRACE_ERROR("ad->data_auto is NULL");
832 setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
833 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
834 NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
836 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
837 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
840 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
842 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
843 char *pa_timezone = NULL;
844 char *pa_city = NULL;
846 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT); // IDS_WCL_BODY_CITYNAME_SEOUL
847 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT); // "Asia/Seoul"
849 if ((pa_timezone != NULL) && (_(pa_city) != NULL)) {
851 // don't use hard coded value
852 // get value from current timezone
854 char str_buf[GMT_BUF_SIZE] = {0, };
855 get_gmt_offset(str_buf, GMT_BUF_SIZE);
857 char* timezone_str = get_timezone_str();
859 //ret = get_city_name(timezone_str);
861 // SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
863 //char* cityname_id = _(get_city_name_result());
864 SETTING_TRACE("timezone : %s, cityname_id :%s", timezone_str, pa_city);
865 if (pa_city && 0 != safeStrCmp(_(pa_city), "NULL"))
866 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(pa_city), _(str_buf));
868 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
875 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
879 /* UI create time zone */
881 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
882 setting_time_main_mouse_up_Gendial_list_cb,
883 ad, SWALLOW_Type_INVALID, NULL,
884 NULL, 0, "IDS_ST_BODY_TIME_ZONE",
885 time_zone_sub_str, NULL);
887 ad->data_tz->userdata = ad;
889 SETTING_TRACE_ERROR("ad->data_tz is NULL");
892 /* create DATE_AND_TIME */
895 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
897 if (ret == SETTING_RETURN_FAIL) {
898 value = VCONFKEY_TIME_FORMAT_12;
900 bool is_12hours = (value == VCONFKEY_TIME_FORMAT_12 ? TRUE : FALSE);
901 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
903 setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
904 if (ret == SETTING_RETURN_FAIL)
905 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
907 /* UI format string */
908 (void)setting_create_Gendial_field_titleItem(scroller,
910 "IDS_ST_BODY_DATE_AND_TIME", NULL);
912 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
913 setting_time_main_mouse_up_Gendial_list_cb,
914 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
915 NULL, NULL, is_12hours,
916 NULL,//"IDS_ST_BODY_DATE_AND_TIME",
917 date_format_str[value],
918 setting_time_main_datefield_change_cb);
920 ad->data_time->userdata = ad;
921 ad->data_time->isItemDisableFlag = auto_flag;
922 elm_genlist_item_select_mode_set(ad->data_time->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
924 SETTING_TRACE_ERROR("ad->data_time is NULL");
926 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
927 ELM_GENLIST_ITEM_NONE, NULL, NULL);
928 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
930 /* UI create "Time format" */
931 setting_enable_expandable_genlist(scroller, ad,
932 __setting_time_main_exp_cb, NULL);
934 char* pa_time_format = get_pa_time_format_str();
935 ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
936 &(ad->itc_2text_3_parent),
937 setting_time_main_mouse_up_Gendial_list_cb,
938 ad, SWALLOW_Type_INVALID,
939 "IDS_ST_BODY_TIME_FORMAT",
941 if (ad->data_time_fmt) {
942 ad->data_time_fmt->int_slp_setting_binded =
943 INT_SLP_SETTING_REGIONFORMAT_TIME1224;
945 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
947 G_FREE(pa_time_format);
949 #if APPLIED_DATATIME_DATA_FORMAT
950 char* pa_date_format = get_pa_date_format_str();
951 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
952 &(ad->itc_2text_3_parent),
953 setting_time_main_mouse_up_Gendial_list_cb,
954 ad, SWALLOW_Type_INVALID,
955 "IDS_ST_BODY_DATE_FORMAT",
957 if (ad->data_date_fmt) {
958 ad->data_date_fmt->int_slp_setting_binded =
959 INT_SLP_SETTING_DATE_FORMAT;
961 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
963 G_FREE(pa_date_format);
966 #if APPLIED_DATATIME_FIRSTDAY_WEEK
967 char* pa_week = get_pa_week_format_str();
968 ad->data_firstday_week_fmt =
969 setting_create_Gendial_exp_parent_field(scroller,
970 &(ad->itc_2text_3_parent),
971 setting_time_main_mouse_up_Gendial_list_cb,
972 ad, SWALLOW_Type_INVALID,
973 "IDS_CLD_BODY_FIRST_DAY_OF_WEEK",
975 if (ad->data_firstday_week_fmt) {
976 ad->data_firstday_week_fmt->int_slp_setting_binded =
977 INT_SLP_SETTING_WEEK_FORMAT;
979 SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
984 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
985 ELM_GENLIST_ITEM_NONE, NULL, NULL);
986 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
991 setting_disable_genlist_item(ad->data_tz->item);
994 setting_disable_genlist_item(ad->data_time->item);
998 setting_view_time_main.is_create = 1;
999 vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad);
1001 /* register vconf key to get event callback for converting 12/24H */
1002 vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb, ad);
1003 /* register vconf key to get event callback for date format */
1004 vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, setting_time_main_int_vconf_change_cb, ad);
1006 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb, ad);
1007 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb, ad);
1008 vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb, ad);
1010 /* to avoid update time-diff, every per 3s to update. */
1011 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
1013 return SETTING_RETURN_SUCCESS;
1016 static int setting_time_main_destroy(void *cb)
1018 SETTING_TRACE_BEGIN;
1020 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1022 SettingTimeUG *ad = (SettingTimeUG *) cb;
1024 // __finalize_resource(ad);
1028 if (ad->update_timer) {
1029 ecore_timer_del(ad->update_timer);
1030 ad->update_timer = NULL;
1033 #if PROGRESS_POPUP_SHOW
1034 if (ad->pop_progress) {
1035 evas_object_del(ad->pop_progress);
1036 ad->pop_progress = NULL;
1040 if (ad->update_timezone_idler) {
1041 ecore_idler_del(ad->update_timezone_idler);
1042 ad->update_timezone_idler = NULL;
1044 if (ad->refresh_time_idler) {
1045 ecore_idler_del(ad->refresh_time_idler);
1046 ad->refresh_time_idler = NULL;
1049 vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
1050 time_changed_callback);
1052 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
1053 setting_time_main_int_vconf_change_cb);
1054 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
1055 setting_time_main_int_vconf_change_cb);
1057 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, __sim_time_info_chg_cb);
1058 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, __sim_time_info_chg_cb);
1059 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, __sim_time_info_chg_cb);
1061 if (ad->ly_main != NULL) {
1062 evas_object_del(ad->ly_main);
1063 setting_view_time_main.is_create = 0;
1066 return SETTING_RETURN_SUCCESS;
1069 static int setting_time_main_update(void *cb)
1071 SETTING_TRACE_BEGIN;
1072 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1074 SettingTimeUG *ad = (SettingTimeUG *) cb;
1076 if (ad->ly_main != NULL) {
1077 evas_object_show(ad->ly_main);
1079 if (ad->update_timezone_idler) {
1080 ecore_idler_del(ad->update_timezone_idler);
1081 ad->update_timezone_idler = NULL;
1083 ad->update_timezone_idler =
1084 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
1086 if (ad->refresh_time_idler) {
1087 ecore_idler_del(ad->refresh_time_idler);
1088 ad->refresh_time_idler = NULL;
1090 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
1092 return SETTING_RETURN_SUCCESS;
1095 static int setting_time_main_cleanup(void *cb)
1097 SETTING_TRACE_BEGIN;
1098 return SETTING_RETURN_SUCCESS;
1102 /* ***************************************************
1106 ****************************************************/
1108 int setting_time_check_automatic_time_update_state()
1110 SETTING_TRACE_BEGIN;
1116 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1123 static int __setting_set_city_tzone(const char* pTZPath)
1125 // let's get city & timezone string from pTZPath
1127 char szTimezone[GMT_BUF_SIZE] = {0,};
1128 char* pStr = strdup(pTZPath);
1130 // 2. timezone string +/-<n> ex. +9, -1
1131 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
1133 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, szTimezone);
1136 SETTING_TRACE("set vconf failed");
1141 /** @todo replace with vconf ID */
1142 ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
1149 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
1150 service_h result, void *priv)
1152 SETTING_TRACE_BEGIN;
1154 retm_if(priv == NULL, "Data parameter is NULL");
1156 SettingTimeUG *ad = (SettingTimeUG *) priv;
1159 char *tzpath = NULL;
1160 service_get_extra_data(result, "city", &city);
1161 service_get_extra_data(result, "tzpath", &tzpath);
1164 SETTING_TRACE("tzpath from worldclock UG is null.");
1167 SETTING_TRACE("tzpath : %s", tzpath );
1169 SETTING_TRACE("city : %s", city );
1171 /* --------------------------------------------------------------------- */
1172 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
1173 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1174 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1175 SETTING_TRACE("full tz_path:%s", tz_path);
1177 int ret = sysman_set_timezone(tz_path);
1179 SETTING_TRACE("tzpath is not valid.");
1182 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
1184 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1185 setting_retm_if(ret != 0, "set vconf failed");
1187 // parse city and GMT offset from tzpath and system time property
1188 // set the strings in vconf which will be used while updating display of timezone
1189 if (!__setting_set_city_tzone(tzpath)) {
1190 SETTING_TRACE("__setting_set_city_tzone ERROR")
1194 // update the display for timezone
1195 setting_update_timezone(ad);
1196 static int t_event_val = -1;
1197 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
1201 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
1204 SETTING_TRACE_BEGIN;
1205 /* if(ug) ug_destroy(ug); */
1206 /* restore the '<-' button on the navigate bar */
1208 SettingTimeUG *ad = (SettingTimeUG *) priv;
1211 ad->ug_loading = NULL;
1213 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1215 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1217 if (back_btn != NULL) {
1218 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1223 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1227 SETTING_TRACE_BEGIN;
1228 SettingTimeUG *ad = (SettingTimeUG *) priv;
1234 base = (Evas_Object *) ug_get_layout(ug);
1239 case UG_MODE_FULLVIEW:
1240 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1242 //elm_win_resize_object_add(ad->win_get, base);
1243 evas_object_show(base);
1252 void setting_time_main_launch_worldclock_sg(void *data)
1254 SETTING_TRACE_BEGIN;
1256 retm_if(data == NULL, "Data parameter is NULL");
1258 SettingTimeUG *ad = (SettingTimeUG *) data;
1260 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1261 setting_retm_if(!cbs, "calloc failed");
1262 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1263 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1264 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1265 cbs->priv = (void *)ad;
1267 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1269 ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1270 if (NULL == ad->ug_loading) { /* error handling */
1278 Eina_Bool setting_update_datefield(void *cb)
1280 SETTING_TRACE_BEGIN;
1281 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1282 SettingTimeUG *ad = (SettingTimeUG *) cb;
1284 //__refresh_date_timer(ad);
1285 if (ad->data_time) {
1286 time_t ctime = time(NULL);
1288 struct tm *ts = localtime_r(&ctime, &ts_ret);
1289 if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1291 ad->refresh_time_idler = NULL;
1295 /* ***************************************************
1299 ****************************************************/
1302 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1305 SETTING_TRACE_BEGIN;
1306 retm_if(data == NULL, "Data parameter is NULL");
1308 SettingTimeUG *ad = (SettingTimeUG *) data;
1310 /* Send destroy request */
1311 ug_destroy_me(ad->ug);
1314 /* ***************************************************
1318 ****************************************************/
1321 setting_time_main_click_softkey_caller_exist_left_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", "lbutton_click");
1337 ug_send_result(ad->ug, svc);
1339 service_destroy(svc);
1341 /* Send destroy request */
1342 ug_destroy_me(ad->ug);
1346 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1350 SETTING_TRACE_BEGIN;
1352 retm_if(data == NULL, "Data parameter is NULL");
1354 SettingTimeUG *ad = (SettingTimeUG *) data;
1356 /* Create Bundle and send message */
1358 if (service_create(&svc))
1361 service_add_extra_data(svc, "result", "rbutton_click");
1362 ug_send_result(ad->ug, svc);
1364 service_destroy(svc);
1366 /* Send destroy request */
1367 ug_destroy_me(ad->ug);
1370 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1371 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
1374 SETTING_TRACE_BEGIN;
1375 int response_type = btn_type(obj);
1376 if (POPUP_RESPONSE_OK == response_type) {
1377 setting_time_main_btn_update_ok_cb(data);
1378 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1379 setting_time_main_btn_update_cancel_cb(data);
1382 SettingTimeUG *ad = data;
1385 evas_object_del(ad->pop);
1391 static void __time_auto_update(void *data)
1393 setting_retm_if(data == NULL, "Data parameter is NULL");
1394 SettingTimeUG *ad = (SettingTimeUG *) data;
1396 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1397 SETTING_ON_OFF_BTN_ON, &err);
1399 setting_disable_genlist_item(ad->data_tz->item);
1402 if (ad->data_time) {
1403 ad->data_time->isItemDisableFlag = FALSE;
1404 setting_disable_evas_object(ad->data_time->eo_check);
1405 setting_disable_genlist_item(ad->data_time->item);
1407 __update_time_via_sim_card(ad);
1411 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1413 SETTING_TRACE_BEGIN;
1415 retm_if(data == NULL, "Data parameter is NULL");
1416 SettingTimeUG *ad = NULL;
1417 Setting_GenGroupItem_Data *list_item =
1418 (Setting_GenGroupItem_Data *) data;
1419 ad = list_item->userdata;
1420 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1422 ad->chk_auto = ad->data_auto->eo_check;
1424 ad->chk_dst = ad->data_dst->eo_check;
1426 if (ad->data_time) {
1427 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1431 if (obj == ad->chk_auto) {
1433 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1436 (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1437 elm_check_state_set(ad->chk_auto, 0);
1440 setting_enable_genlist_item(ad->data_tz->item);
1443 if (ad->data_time) {
1444 ad->data_time->isItemDisableFlag = FALSE;
1445 setting_enable_evas_object(ad->data_time->eo_check);
1446 setting_enable_genlist_item(ad->data_time->item);
1450 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1452 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1453 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1454 setting_time_reboot_resp_cb,
1456 dgettext("sys_string",
1458 _("IDS_COM_SK_CANCEL"));
1460 __time_auto_update(ad);
1465 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1468 SETTING_TRACE_BEGIN;
1470 setting_retm_if(data == NULL, "Data parameter is NULL");
1472 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1473 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1474 elm_genlist_item_selected_set(item, 0);
1475 Setting_GenGroupItem_Data *list_item =
1476 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1478 SettingTimeUG *ad = (SettingTimeUG *) data;
1479 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1481 if (ad->data_time && ad->data_time != list_item) {
1482 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1485 if (ad->data_tz == list_item) {
1486 ad->is_datefield_selected = EINA_FALSE;
1487 if (1 == setting_time_check_automatic_time_update_state()) {
1488 setting_create_simple_popup(ad, ad->win_get,
1489 NULL, _(AUTO_TIME_UPDATE_ON));
1491 setting_time_main_launch_worldclock_sg(ad);
1494 } else if (ad->data_time == list_item) {
1495 ad->is_datefield_selected = EINA_TRUE;
1496 if (1 == setting_time_check_automatic_time_update_state()) {
1497 setting_create_simple_popup(ad, ad->win_get,
1498 NULL, _(AUTO_TIME_UPDATE_ON));
1500 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1502 } else if (ad->data_auto == list_item) {
1503 ad->is_datefield_selected = EINA_FALSE;
1504 int old_status = elm_check_state_get(list_item->eo_check);
1506 list_item->chk_status = !old_status;
1507 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1509 if (!list_item->chk_status) {
1511 setting_set_bool_slp_key
1512 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1513 SETTING_ON_OFF_BTN_OFF, &err);
1516 setting_enable_genlist_item(ad->data_tz->item);
1519 if (ad->data_time) {
1520 ad->data_time->isItemDisableFlag = FALSE;
1521 setting_enable_evas_object(ad->data_time->eo_check);
1522 setting_enable_genlist_item(ad->data_time->item);
1526 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1528 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1529 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1530 setting_time_reboot_resp_cb,
1532 dgettext("sys_string", "IDS_COM_SK_OK"),
1533 _("IDS_COM_SK_CANCEL"));
1535 __time_auto_update(ad);
1540 else if (ad->data_time_fmt == list_item
1541 || ad->data_date_fmt == list_item
1542 || ad->data_firstday_week_fmt == list_item) {
1543 ad->is_datefield_selected = EINA_FALSE;
1544 bool status = !elm_genlist_item_expanded_get(item);
1545 elm_genlist_item_expanded_set(item, status);
1550 void setting_time_main_btn_update_ok_cb(void *cb)
1552 SETTING_TRACE_BEGIN;
1553 SettingTimeUG *ad = (SettingTimeUG *) cb;
1554 int err; /* error check */
1555 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1556 SETTING_ON_OFF_BTN_ON, &err);
1557 elm_check_state_set(ad->data_auto->eo_check, 1);
1558 ad->data_auto->chk_status = 1;
1560 sysman_request_reboot();
1562 /* We'd better check return value from sysman_request_reboot() function. */
1563 /* It will return 0 on success or -1 if failed. */
1567 void setting_time_main_btn_update_cancel_cb(void *cb)
1569 SETTING_TRACE_BEGIN;
1570 SettingTimeUG *ad = (SettingTimeUG *) cb;
1572 int err; /* error check */
1574 retm_if(cb == NULL, "Data parameter is NULL");
1575 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1576 SETTING_ON_OFF_BTN_OFF, &err);
1577 elm_check_state_set(ad->data_auto->eo_check, 0);
1578 ad->data_auto->chk_status = 0;
1583 static UChar *uastrcpy(const char *chars)
1587 len = safeStrLen(chars);
1588 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1591 u_uastrcpy(str, chars);
1596 static int get_timezone_isdst(int* isdst)
1598 SETTING_TRACE_BEGIN;
1602 enum { BUFFERSIZE = 1024 };
1603 char buf[BUFFERSIZE];
1604 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1610 /* handle error condition */
1614 ts = localtime(&ctime);
1616 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
1619 SETTING_TRACE(" == tz_path = %s", buf);
1620 SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst);
1621 *isdst = ts->tm_isdst;
1623 return SETTING_RETURN_SUCCESS;
1627 static void ICU_set_timezone(const char *timezone)
1629 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1630 UErrorCode ec = U_ZERO_ERROR;
1631 UChar *str = uastrcpy(timezone);
1633 ucal_setDefaultTimeZone(str, &ec);
1634 if (U_SUCCESS(ec)) {
1635 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1637 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1644 static void setting_time_main_controlbar_lbtn_label_set(
1645 Evas_Object *controlbar,
1648 SETTING_TRACE_BEGIN;
1649 setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
1650 setting_retm_if(label == NULL, "label parameter is NULL");
1652 Evas_Object *eo_lbtn = NULL;
1653 Elm_Object_Item *first_item = NULL;
1655 first_item = elm_toolbar_first_item_get(controlbar);
1656 setting_retm_if(first_item == NULL, "get first_item failed");
1658 eo_lbtn = elm_object_item_part_content_get(first_item, "object");
1659 setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
1661 elm_object_text_set(eo_lbtn, label);
1666 * ex) timezone : Asia/Seoul --> returns "+09"
1670 static void get_gmt_offset(char *str_buf, int size)
1672 // timezone string +/-<n> ex. +9, -1
1673 time_t t = time(0); // get unix time. sec.
1676 data = localtime(&t); // save time as structure.
1677 setting_retm_if(!data, "data is NULL");
1678 data->tm_isdst = 0; // summer time, not applied.
1679 time_t a = mktime(data);
1682 data->tm_isdst = 0; // summer time, not applied.
1683 time_t b = mktime(data);
1685 int gmtoffset_hour = (a-b)/3600; // result : hour.
1686 int gmtoffset_min = ((a-b)%3600)/60; // result : min.
1687 if(gmtoffset_min != 0) {
1691 snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
1692 SETTING_TRACE("szTimezone is of a valid format: GMT: %s", str_buf);
1697 static char* get_timezone_str()
1699 SETTING_TRACE_BEGIN;
1701 enum { BUFFERSIZE = 1024 };
1702 char buf[BUFFERSIZE];
1703 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1709 /* handle error condition */
1711 return g_strdup(buf+20); //Asia/Seoul
1714 static char* get_city_name_result()
1720 // in_str = "Asia/Seoul"
1721 static bool get_city_name(char* tzname)
1723 sqlite3 *pSQLite3 = NULL;
1724 char *szErrMsg = NULL;
1726 int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
1729 printf( "Can't open database: %s\n", sqlite3_errmsg( pSQLite3 ));
1730 sqlite3_close( pSQLite3 );
1736 printf("Database opened!!\n");
1737 char query_str[256];
1738 snprintf(query_str, 256, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1739 printf("%s \n", query_str);
1740 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1744 sqlite3_free( szErrMsg );
1745 sqlite3_close( pSQLite3 );
1746 printf("Database close!!\n");
1750 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1753 printf("%s\n", argv[i] ? argv[i] : "NULL");
1754 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1760 int main(int argc, char* argv[])
1764 // exporting - current status
1765 if ( (argc == 2) && (0 == strcmp(argv[1], "export"))) {
1768 else if ( (argc == 2) && (0 == strcmp(argv[1], "timezone_init"))) {
1770 //////////////////////////////////////////////////////////////////////////
1771 char* tz_path_zone_city = get_timezone_str();
1772 bool ret = get_city_name(tz_path_zone_city);
1774 printf(">>>>>> RESULT : %s \n", get_city_name_result());
1776 //////////////////////////////////////////////////////////////////////////
1781 ret = setting_cfg_create();