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>
32 #include <unicode/udat.h>
33 #include <unicode/ustring.h>
34 #include <unicode/uloc.h>
35 #include <unicode/ucal.h>
36 #include <unicode/utmscale.h>
39 #define PROGRESS_POPUP_SHOW 0
42 static UChar *uastrcpy(const char *chars);
43 static void ICU_set_timezone(const char *timezone);
44 static int get_timezone_isdst(int* isdst);
45 static void get_gmt_offset(char *str_buf, int size);
47 static char* get_timezone_str();
48 static char* get_city_name_result();
49 static bool get_city_name(char* tzname);
51 static char* s_result;
52 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName);
53 static bool setting_update_timezone(SettingTimeUG *ad);
55 static int setting_time_main_create(void *cb);
56 static int setting_time_main_destroy(void *cb);
57 static int setting_time_main_update(void *cb);
58 static int setting_time_main_cleanup(void *cb);
60 setting_view setting_view_time_main = {
61 .create = setting_time_main_create,
62 .destroy = setting_time_main_destroy,
63 .update = setting_time_main_update,
64 .cleanup = setting_time_main_cleanup,
67 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
70 bool __update_timezone_idler(SettingTimeUG *ad)
72 setting_update_timezone(ad);
73 ad->update_timezone_idler = NULL;
76 #if TIME_CHANGED_HEYNOTY_CALLBACK
77 void time_changed_callback(void *data)
79 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
80 SettingTimeUG *ad = (SettingTimeUG *)data;
82 int ret = setting_time_update_cb(ad);
84 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
87 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
88 if(EINA_TRUE == ad->is_datefield_selected) {
89 /* Timezone is not changed and a selected value of the datefield is already changed */
90 SETTING_TRACE("Datefield is selected\n");
95 // vconfset to update timezone
96 char pTZPath[__MAX_PATH_SIZE];
97 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
101 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
105 if (!__setting_set_city_tzone(&pTZPath[20])) {
106 SETTING_TRACE("__setting_set_city_tzone ERROR");
109 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
110 setting_retm_if(timezone == NULL, "get vonf failed");
111 ICU_set_timezone(timezone);
115 if (ad->update_timezone_idler) {
116 ecore_idler_del(ad->update_timezone_idler);
117 ad->update_timezone_idler = NULL;
119 ad->update_timezone_idler =
120 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
122 if (ad->refresh_time_idler) {
123 ecore_idler_del(ad->refresh_time_idler);
124 ad->refresh_time_idler = NULL;
126 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 /* ***************************************************
272 ***************************************************/
273 static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
278 ret_if(data == NULL);
279 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
280 SettingTimeUG *ad = list_item->userdata;
282 if (EINA_FALSE == ad->is_datefield_selected) {
283 SETTING_TRACE("Datefield is not selected\n");
287 // If auto update is on, don't anything while the datefield has been updated (i.e., time runs)
288 if (1 == setting_time_check_automatic_time_update_state()) {
289 SETTING_TRACE("AUTO_TIME ON: no action");
293 // otherwise, we apply a new date which has been changed by a user
297 elm_datetime_value_get(obj, &_tm);
299 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
300 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
301 if (2037 < _tm.tm_year) {
302 setting_create_simple_popup(ad, ad->win_get,
303 NULL, _(ERR_BIGGER_THAN_2037));
306 #if SUPPORT_SCREEN_PROTECTED /* if not lock the current state, after set the time, the screen will become dimmed */
307 pm_lock_state(LCD_NORMAL, STAY_CUR_STATE, 0);
312 if (get_timezone_isdst(&isdst) == SETTING_RETURN_SUCCESS) {
313 _tm.tm_isdst = isdst;
316 SETTING_TRACE_ERROR("get_timezone_isdst() failed");
320 /* local time -> gmtime */
321 time_t the_time = mktime(&_tm); /* represent local time */
323 if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
325 SETTING_TRACE("Time is not changed\n");
326 //current time didn't change
330 #if PROGRESS_POPUP_SHOW
331 // remove popup if created
332 if (ad->pop_progress) {
333 evas_object_del(ad->pop_progress);
334 ad->pop_progress = NULL;
339 setting_create_popup_with_progressbar(ad, ad->win_get, "pending_list",
340 NULL, NULL, NULL, 0, TRUE, TRUE);
343 // invoke API to change time
344 int ret = sysman_set_datetime(the_time);
345 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
350 Eina_Bool __refresh_date_timer(void *data)
352 //SETTING_TRACE_BEGIN;
353 SettingTimeUG *ad = data;
355 time_t ctime = time(NULL);
357 struct tm *ts = localtime_r(&ctime, &ts_ret);
361 elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
362 if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
364 SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
365 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
371 static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
374 ret_if(NULL == data || NULL == event_info);
376 SettingTimeUG *ad = (SettingTimeUG *) data;
377 Elm_Object_Item *parentItem = event_info; /* parent item */
378 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
379 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
382 if (data_parentItem == ad->data_time_fmt) {
384 rgd = elm_radio_add(scroller);
385 elm_radio_value_set(rgd, -1);
386 setting_create_Gendial_exp_sub_field(scroller,
387 &(ad->itc_1icon_1text_sub),
388 NULL, NULL, parentItem,
389 SWALLOW_Type_1RADIO, rgd,
390 VCONFKEY_TIME_FORMAT_12,
391 "IDS_COM_BODY_12_HOURS",
394 setting_create_Gendial_exp_sub_field(scroller,
395 &(ad->itc_1icon_1text_sub),
396 NULL, NULL, parentItem,
397 SWALLOW_Type_1RADIO, rgd,
398 VCONFKEY_TIME_FORMAT_24,
399 "IDS_ST_BODY_24_HOURS",
402 setting_update_chk_status(rgd,
403 data_parentItem->int_slp_setting_binded);
405 } else if (data_parentItem == ad->data_date_fmt) {
406 rgd = elm_radio_add(scroller);
407 elm_radio_value_set(rgd, -1);
408 setting_create_Gendial_exp_sub_field(scroller,
409 &(ad->itc_1icon_1text_sub),
410 NULL, NULL, parentItem,
411 SWALLOW_Type_1RADIO, rgd,
412 SETTING_DATE_FORMAT_DD_MM_YYYY,
413 "IDS_ST_BODY_DDMMYYYY_DOT",
416 setting_create_Gendial_exp_sub_field(scroller,
417 &(ad->itc_1icon_1text_sub),
418 NULL, NULL, parentItem,
419 SWALLOW_Type_1RADIO, rgd,
420 SETTING_DATE_FORMAT_MM_DD_YYYY,
421 "IDS_ST_BODY_MM_DD_YYYY_DOT",
424 setting_create_Gendial_exp_sub_field(scroller,
425 &(ad->itc_1icon_1text_sub),
426 NULL, NULL, parentItem,
427 SWALLOW_Type_1RADIO, rgd,
428 SETTING_DATE_FORMAT_YYYY_MM_DD,
429 "IDS_COM_BODY_YYYYMMDD",
432 setting_create_Gendial_exp_sub_field(scroller,
433 &(ad->itc_1icon_1text_sub),
434 NULL, NULL, parentItem,
435 SWALLOW_Type_1RADIO, rgd,
436 SETTING_DATE_FORMAT_YYYY_DD_MM,
437 "IDS_ST_BODY_YYYY_DD_MM_DOT",
440 setting_update_chk_status(rgd,
441 data_parentItem->int_slp_setting_binded);
443 } else if (data_parentItem == ad->data_firstday_week_fmt) {
444 rgd = elm_radio_add(scroller);
445 elm_radio_value_set(rgd, -1);
446 setting_create_Gendial_exp_sub_field(scroller,
447 &(ad->itc_1icon_1text_sub),
448 NULL, rgd, parentItem,
449 SWALLOW_Type_1RADIO, rgd,
450 SETTING_WEEKOFDAY_FORMAT_SUNDAY,
451 "IDS_ST_BODY_SUNDAY", NULL);
453 setting_create_Gendial_exp_sub_field(scroller,
454 &(ad->itc_1icon_1text_sub),
455 NULL, rgd, parentItem,
456 SWALLOW_Type_1RADIO, rgd,
457 SETTING_WEEKOFDAY_FORMAT_MONDAY,
458 "IDS_ST_BODY_MONDAY", NULL);
460 setting_update_chk_status(rgd,
461 data_parentItem->int_slp_setting_binded);
465 static int setting_time_main_create(void *cb)
468 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
470 SettingTimeUG *ad = (SettingTimeUG *) cb;
474 char *title = _("IDS_ST_BODY_DATE_AND_TIME");
476 ad->is_datefield_selected = EINA_FALSE;
478 setting_call_back_func l_button_cb = NULL;
479 setting_call_back_func r_button_cb = NULL;
481 service_h service = ad->bundle_data;
483 service_get_extra_data(service, "caller", &caller);
484 service_get_extra_data(service, "lbutton", &l_btn);
486 l_button_cb = setting_time_main_click_softkey_caller_exist_left_cb;
487 service_get_extra_data(service, "title", &title);
488 service_get_extra_data(service, "rbutton", &r_btn);
490 r_button_cb = setting_time_main_click_softkey_caller_exist_right_cb;
492 Evas_Object *scroller; /* scroller is a genlist */
496 char *lbtn_str = (char *)g_strdup(l_btn);
497 bool same_flag = FALSE;
498 if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
499 l_btn = (char *)dgettext("sys_string", "IDS_COM_BODY_BACK");
503 Evas_Object *controllbar = NULL;
505 scroller = elm_genlist_add(ad->win_main_layout);
506 elm_object_style_set(scroller, "dialogue");
507 if(scroller == NULL) {
508 SETTING_TRACE_ERROR("Cannot set scroller object as contento of layout");
509 // free allocated data before return.
511 return SETTING_DRAW_ERR_FAIL_SCROLLER;
514 elm_genlist_clear(scroller);
516 setting_create_layout_navi_bar(ad->win_main_layout,
525 elm_toolbar_item_append(controllbar, IMG_PREVIOUS, l_btn, l_button_cb, ad);
526 elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE);
527 elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE);
528 elm_toolbar_item_append(controllbar, IMG_NEXT, r_btn, r_button_cb, ad);
531 setting_time_main_controlbar_lbtn_label_set(controllbar,
539 l_btn = _("IDS_COM_BODY_BACK");
540 title = _("IDS_ST_BODY_DATE_AND_TIME");
542 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
545 setting_time_main_click_softkey_left_cb,
549 ad->scrl_main = scroller;
554 Elm_Object_Item *item;
556 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
557 ELM_GENLIST_ITEM_NONE, NULL, NULL);
558 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
559 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
561 bool auto_flag = value;
563 if(auto_flag) //do special process only when auto mode
565 //to read TAPI vconfs
569 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
570 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
571 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
572 if (ret == 0 && !isEmptyStr(tzpath))
574 //1.to update timezone
575 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
576 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
577 g_strlcat(tz_path, tzpath, sizeof(tz_path));
578 SETTING_TRACE("full tz_path:%s", tz_path);
579 ret = sysman_set_timezone(tz_path);
581 SETTING_TRACE("tzpath is not valid.");
583 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
584 if (!__setting_set_city_tzone(tzpath)) {
585 SETTING_TRACE("__setting_set_city_tzone ERROR")
587 if (get_city_name(tzpath)) {
588 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
590 char* city = get_city_name_result();
591 SETTING_TRACE("city:%s", city);
592 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
594 // 2.to set current time
596 FILE *fp = fopen("/proc/uptime", "r");
597 fscanf(fp, "%d", &t_uptime);
598 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
599 time_t t_current = t_nitz + t_uptime - t_offset;
600 SETTING_TRACE("t_current:%d", t_current);
601 ret = sysman_set_datetime(t_current);
608 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
609 setting_time_main_mouse_up_Gendial_list_cb,
610 ad, SWALLOW_Type_1TOGGLE, NULL,
612 "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
613 setting_time_main_chk_btn_cb);
615 ad->data_auto->userdata = ad;
617 SETTING_TRACE_ERROR("ad->data_auto is NULL");
620 setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
621 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
622 NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
624 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
625 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
628 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
630 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
631 char *pa_timezone = NULL;
632 char *pa_city = NULL;
634 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT); // IDS_WCL_BODY_CITYNAME_SEOUL
635 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT); // "Asia/Seoul"
637 if ((pa_timezone != NULL) && (_(pa_city) != NULL)) {
639 // don't use hard coded value
640 // get value from current timezone
642 char str_buf[GMT_BUF_SIZE] = {0, };
643 get_gmt_offset(str_buf, GMT_BUF_SIZE);
645 char* timezone_str = get_timezone_str();
647 bool ret = get_city_name(timezone_str);
649 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
651 char* cityname_id = get_city_name_result();
653 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(cityname_id), _(str_buf));
659 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
663 /* UI create time zone */
665 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
666 setting_time_main_mouse_up_Gendial_list_cb,
667 ad, SWALLOW_Type_INVALID, NULL,
668 NULL, 0, "IDS_ST_BODY_TIME_ZONE",
669 time_zone_sub_str, NULL);
671 ad->data_tz->userdata = ad;
673 SETTING_TRACE_ERROR("ad->data_tz is NULL");
676 /* create DATE_AND_TIME */
679 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
681 if (ret == SETTING_RETURN_FAIL) {
682 value = VCONFKEY_TIME_FORMAT_12;
684 bool is_12hours = (value == VCONFKEY_TIME_FORMAT_12 ? TRUE : FALSE);
685 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
687 setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
688 if (ret == SETTING_RETURN_FAIL)
689 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
691 /* UI format string */
693 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
694 setting_time_main_mouse_up_Gendial_list_cb,
695 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
696 NULL, NULL, is_12hours,
697 "IDS_ST_BODY_DATE_AND_TIME",
698 date_format_str[value],
699 setting_time_main_datefield_change_cb);
701 ad->data_time->userdata = ad;
702 ad->data_time->isItemDisableFlag = auto_flag;
704 SETTING_TRACE_ERROR("ad->data_time is NULL");
706 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
707 ELM_GENLIST_ITEM_NONE, NULL, NULL);
708 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
710 /* UI create "Time format" */
711 setting_enable_expandable_genlist(scroller, ad,
712 __setting_time_main_exp_cb, NULL);
714 char* pa_time_format = get_pa_time_format_str();
715 ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
716 &(ad->itc_2text_3_parent),
717 setting_time_main_mouse_up_Gendial_list_cb,
718 ad, SWALLOW_Type_INVALID,
719 "IDS_ST_BODY_TIME_FORMAT",
721 if (ad->data_time_fmt) {
722 ad->data_time_fmt->int_slp_setting_binded =
723 INT_SLP_SETTING_REGIONFORMAT_TIME1224;
725 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
727 G_FREE(pa_time_format);
729 #if APPLIED_DATATIME_DATA_FORMAT
730 char* pa_date_format = get_pa_date_format_str();
731 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
732 &(ad->itc_2text_3_parent),
733 setting_time_main_mouse_up_Gendial_list_cb,
734 ad, SWALLOW_Type_INVALID,
735 "IDS_ST_BODY_DATE_FORMAT",
737 if (ad->data_date_fmt) {
738 ad->data_date_fmt->int_slp_setting_binded =
739 INT_SLP_SETTING_DATE_FORMAT;
741 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
743 G_FREE(pa_date_format);
746 #if APPLIED_DATATIME_FIRSTDAY_WEEK
747 char* pa_week = get_pa_week_format_str();
748 ad->data_firstday_week_fmt =
749 setting_create_Gendial_exp_parent_field(scroller,
750 &(ad->itc_2text_3_parent),
751 setting_time_main_mouse_up_Gendial_list_cb,
752 ad, SWALLOW_Type_INVALID,
753 "IDS_CLD_BODY_FIRST_DAY_OF_WEEK",
755 if (ad->data_firstday_week_fmt) {
756 ad->data_firstday_week_fmt->int_slp_setting_binded =
757 INT_SLP_SETTING_WEEK_FORMAT;
759 SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
764 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
765 ELM_GENLIST_ITEM_NONE, NULL, NULL);
766 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
771 setting_disable_genlist_item(ad->data_tz->item);
774 setting_disable_genlist_item(ad->data_time->item);
778 setting_view_time_main.is_create = 1;
780 #if TIME_CHANGED_HEYNOTY_CALLBACK
781 /* ---------------------------------------------------------------- */
782 /* heynoti registration */
783 /* ---------------------------------------------------------------- */
784 ad->noti_fd = heynoti_init();
786 if (ad->noti_fd == -1) {
787 SETTING_TRACE("heynoti_init FAIL");
788 return SETTING_RETURN_FAIL;
790 SETTING_TRACE("heynoti_init OK");
793 if (-1 == heynoti_subscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback, (void *)ad)) {
794 SETTING_TRACE("heynoti_subscribe FAIL");
796 SETTING_TRACE("heynoti_subscribe OK");
799 if (-1 == heynoti_attach_handler(ad->noti_fd)) {
800 SETTING_TRACE("heynoti_attach_handler FAIL");
802 SETTING_TRACE("heynoti_attach_handler OK");
806 /* register vconf key to get event callback for converting 12/24H */
807 ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
808 setting_time_main_int_vconf_change_cb, ad);
809 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
810 (char *)VCONFKEY_REGIONFORMAT_TIME1224, ret);
812 /* register vconf key to get event callback for date format */
813 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
814 setting_time_main_int_vconf_change_cb, ad);
815 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
816 (char *)VCONFKEY_SETAPPL_DATE_FORMAT_INT, ret);
818 /* to avoid update time-diff, every per 3s to update. */
819 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
821 return SETTING_RETURN_SUCCESS;
824 static int setting_time_main_destroy(void *cb)
828 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
830 SettingTimeUG *ad = (SettingTimeUG *) cb;
832 #if TIME_CHANGED_HEYNOTY_CALLBACK
833 /* Closing heynoti */
834 if (ad->noti_fd != -1)//first need to check the fd validation
836 heynoti_unsubscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback);
837 //heynoti_detach_handler() will be done in heynoti_close().
838 heynoti_close(ad->noti_fd);
842 if (ad->update_timer) {
843 ecore_timer_del(ad->update_timer);
844 ad->update_timer = NULL;
847 #if PROGRESS_POPUP_SHOW
848 if (ad->pop_progress) {
849 evas_object_del(ad->pop_progress);
850 ad->pop_progress = NULL;
854 if (ad->update_timezone_idler) {
855 ecore_idler_del(ad->update_timezone_idler);
856 ad->update_timezone_idler = NULL;
858 if (ad->refresh_time_idler) {
859 ecore_idler_del(ad->refresh_time_idler);
860 ad->refresh_time_idler = NULL;
862 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
863 setting_time_main_int_vconf_change_cb);
864 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
865 setting_time_main_int_vconf_change_cb);
867 if (ad->ly_main != NULL) {
868 evas_object_del(ad->ly_main);
869 setting_view_time_main.is_create = 0;
872 return SETTING_RETURN_SUCCESS;
875 static int setting_time_main_update(void *cb)
878 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
880 SettingTimeUG *ad = (SettingTimeUG *) cb;
882 if (ad->ly_main != NULL) {
883 evas_object_show(ad->ly_main);
885 if (ad->update_timezone_idler) {
886 ecore_idler_del(ad->update_timezone_idler);
887 ad->update_timezone_idler = NULL;
889 ad->update_timezone_idler =
890 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
892 if (ad->refresh_time_idler) {
893 ecore_idler_del(ad->refresh_time_idler);
894 ad->refresh_time_idler = NULL;
896 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
898 return SETTING_RETURN_SUCCESS;
901 static int setting_time_main_cleanup(void *cb)
904 return SETTING_RETURN_SUCCESS;
908 /* ***************************************************
912 ****************************************************/
914 int setting_time_check_automatic_time_update_state()
922 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
929 static int __setting_set_city_tzone(const char* pTZPath)
931 // let's get city & timezone string from pTZPath
933 char szTimezone[GMT_BUF_SIZE] = {0,};
934 char* pStr = strdup(pTZPath);
936 // 2. timezone string +/-<n> ex. +9, -1
937 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
939 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, szTimezone);
942 SETTING_TRACE("set vconf failed");
947 /** @todo replace with vconf ID */
948 ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
955 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
956 service_h result, void *priv)
960 retm_if(priv == NULL, "Data parameter is NULL");
962 SettingTimeUG *ad = (SettingTimeUG *) priv;
966 service_get_extra_data(result, "city", &city);
967 service_get_extra_data(result, "tzpath", &tzpath);
970 SETTING_TRACE("tzpath from worldclock UG is null.");
973 SETTING_TRACE("tzpath : %s", tzpath );
975 SETTING_TRACE("city : %s", city );
977 /* --------------------------------------------------------------------- */
978 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
979 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
980 g_strlcat(tz_path, tzpath, sizeof(tz_path));
981 SETTING_TRACE("full tz_path:%s", tz_path);
983 int ret = sysman_set_timezone(tz_path);
985 SETTING_TRACE("tzpath is not valid.");
988 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
990 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
991 setting_retm_if(ret != 0, "set vconf failed");
993 // parse city and GMT offset from tzpath and system time property
994 // set the strings in vconf which will be used while updating display of timezone
995 if (!__setting_set_city_tzone(tzpath)) {
996 SETTING_TRACE("__setting_set_city_tzone ERROR")
1000 // update the display for timezone
1001 setting_update_timezone(ad);
1002 heynoti_publish(SETTING_TIME_CHANGED);
1006 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
1009 SETTING_TRACE_BEGIN;
1010 /* if(ug) ug_destroy(ug); */
1011 /* restore the '<-' button on the navigate bar */
1013 SettingTimeUG *ad = (SettingTimeUG *) priv;
1016 ad->ug_loading = NULL;
1018 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1020 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1022 if (back_btn != NULL) {
1023 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1028 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1032 SETTING_TRACE_BEGIN;
1033 SettingTimeUG *ad = (SettingTimeUG *) priv;
1039 base = (Evas_Object *) ug_get_layout(ug);
1044 case UG_MODE_FULLVIEW:
1045 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1047 elm_win_resize_object_add(ad->win_get, base);
1048 evas_object_show(base);
1057 void setting_time_main_launch_worldclock_sg(void *data)
1059 SETTING_TRACE_BEGIN;
1061 retm_if(data == NULL, "Data parameter is NULL");
1063 SettingTimeUG *ad = (SettingTimeUG *) data;
1065 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1066 setting_retm_if(!cbs, "calloc failed");
1067 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1068 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1069 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1070 cbs->priv = (void *)ad;
1072 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1074 ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1075 if (NULL == ad->ug_loading) { /* error handling */
1083 Eina_Bool setting_update_datefield(void *cb)
1085 SETTING_TRACE_BEGIN;
1086 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1087 SettingTimeUG *ad = (SettingTimeUG *) cb;
1089 //__refresh_date_timer(ad);
1090 if (ad->data_time) {
1091 time_t ctime = time(NULL);
1093 struct tm *ts = localtime_r(&ctime, &ts_ret);
1094 if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1096 ad->refresh_time_idler = NULL;
1100 /* ***************************************************
1104 ****************************************************/
1107 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1110 SETTING_TRACE_BEGIN;
1111 retm_if(data == NULL, "Data parameter is NULL");
1113 SettingTimeUG *ad = (SettingTimeUG *) data;
1115 /* Send destroy request */
1116 ug_destroy_me(ad->ug);
1119 /* ***************************************************
1123 ****************************************************/
1126 setting_time_main_click_softkey_caller_exist_left_cb(void *data,
1130 SETTING_TRACE_BEGIN;
1132 retm_if(data == NULL, "Data parameter is NULL");
1134 SettingTimeUG *ad = (SettingTimeUG *) data;
1136 /* Create Bundle and send message */
1138 if (service_create(&svc))
1141 service_add_extra_data(svc, "result", "lbutton_click");
1142 ug_send_result(ad->ug, svc);
1144 service_destroy(svc);
1146 /* Send destroy request */
1147 ug_destroy_me(ad->ug);
1151 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1155 SETTING_TRACE_BEGIN;
1157 retm_if(data == NULL, "Data parameter is NULL");
1159 SettingTimeUG *ad = (SettingTimeUG *) data;
1161 /* Create Bundle and send message */
1163 if (service_create(&svc))
1166 service_add_extra_data(svc, "result", "rbutton_click");
1167 ug_send_result(ad->ug, svc);
1169 service_destroy(svc);
1171 /* Send destroy request */
1172 ug_destroy_me(ad->ug);
1175 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
1178 SETTING_TRACE_BEGIN;
1179 int response_type = btn_type(obj);
1180 if (POPUP_RESPONSE_OK == response_type) {
1181 setting_time_main_btn_update_ok_cb(data);
1182 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1183 setting_time_main_btn_update_cancel_cb(data);
1186 SettingTimeUG *ad = data;
1189 evas_object_del(ad->pop);
1193 static void __time_auto_update(void *data)
1195 setting_retm_if(data == NULL, "Data parameter is NULL");
1196 SettingTimeUG *ad = (SettingTimeUG *) data;
1198 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1199 SETTING_ON_OFF_BTN_ON, &err);
1201 setting_disable_genlist_item(ad->data_tz->item);
1204 if (ad->data_time) {
1205 ad->data_time->isItemDisableFlag = FALSE;
1206 setting_disable_evas_object(ad->data_time->eo_check);
1207 setting_disable_genlist_item(ad->data_time->item);
1214 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
1215 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
1216 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
1217 if (ret != 0 || isEmptyStr(tzpath))
1219 setting_create_simple_popup(ad, ad->win_get,
1220 NULL, _("TAPI doesn't support this sim card to update time automatically!"));
1226 SETTING_TRACE("tz_path:%s", tzpath);
1228 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
1229 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1230 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1231 SETTING_TRACE("full tz_path:%s", tz_path);
1232 ret = sysman_set_timezone(tz_path);
1234 SETTING_TRACE("tzpath is not valid.");
1237 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
1238 if (!__setting_set_city_tzone(tzpath)) {
1239 SETTING_TRACE("__setting_set_city_tzone ERROR")
1242 if (get_city_name(tzpath)) {
1243 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
1245 char* city = get_city_name_result();
1246 SETTING_TRACE("city:%s", city);
1247 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1248 setting_retm_if(ret != 0, "set vconf failed");
1249 setting_update_timezone(ad);
1253 FILE *fp = fopen("/proc/uptime", "r");
1254 fscanf(fp, "%d", &t_uptime);
1255 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
1256 time_t t_current = t_nitz + t_uptime - t_offset;
1257 SETTING_TRACE("t_current:%d", t_current);
1258 ret = sysman_set_datetime(t_current);
1259 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
1260 //ad->changed_time = t_current;
1261 if (ad->data_time) {
1263 struct tm *ts = localtime_r(&t_current, &ts_ret);
1265 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1268 // c.heynoti_publish
1269 heynoti_publish(SETTING_TIME_CHANGED);
1273 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1275 SETTING_TRACE_BEGIN;
1277 retm_if(data == NULL, "Data parameter is NULL");
1278 SettingTimeUG *ad = NULL;
1279 Setting_GenGroupItem_Data *list_item =
1280 (Setting_GenGroupItem_Data *) data;
1281 ad = list_item->userdata;
1282 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1284 ad->chk_auto = ad->data_auto->eo_check;
1286 ad->chk_dst = ad->data_dst->eo_check;
1288 if (ad->data_time) {
1289 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1293 if (obj == ad->chk_auto) {
1295 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1298 (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1299 elm_check_state_set(ad->chk_auto, 0);
1302 setting_enable_genlist_item(ad->data_tz->item);
1305 if (ad->data_time) {
1306 ad->data_time->isItemDisableFlag = FALSE;
1307 setting_enable_evas_object(ad->data_time->eo_check);
1308 setting_enable_genlist_item(ad->data_time->item);
1312 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1314 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1315 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1316 setting_time_reboot_resp_cb,
1318 dgettext("sys_string",
1320 _("IDS_COM_SK_CANCEL"));
1322 __time_auto_update(ad);
1329 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1332 SETTING_TRACE_BEGIN;
1334 setting_retm_if(data == NULL, "Data parameter is NULL");
1336 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1337 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1338 elm_genlist_item_selected_set(item, 0);
1339 Setting_GenGroupItem_Data *list_item =
1340 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1342 SettingTimeUG *ad = (SettingTimeUG *) data;
1343 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1345 if (ad->data_time && 0 != safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) {
1346 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1349 if (!safeStrCmp("IDS_ST_BODY_TIME_ZONE", list_item->keyStr)) {
1350 ad->is_datefield_selected = EINA_FALSE;
1351 if (1 == setting_time_check_automatic_time_update_state()) {
1352 setting_create_simple_popup(ad, ad->win_get,
1353 NULL, _(AUTO_TIME_UPDATE_ON));
1355 setting_time_main_launch_worldclock_sg(ad);
1358 } else if (!safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) {
1359 ad->is_datefield_selected = EINA_TRUE;
1360 if (1 == setting_time_check_automatic_time_update_state()) {
1361 setting_create_simple_popup(ad, ad->win_get,
1362 NULL, _(AUTO_TIME_UPDATE_ON));
1364 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1366 } else if (!safeStrCmp("IDS_ST_BODY_AUTOMATIC_UPDATE", list_item->keyStr)) {
1367 ad->is_datefield_selected = EINA_FALSE;
1368 int old_status = elm_check_state_get(list_item->eo_check);
1370 list_item->chk_status = !old_status;
1371 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1373 if (!list_item->chk_status) {
1375 setting_set_bool_slp_key
1376 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1377 SETTING_ON_OFF_BTN_OFF, &err);
1380 setting_enable_genlist_item(ad->data_tz->item);
1383 if (ad->data_time) {
1384 ad->data_time->isItemDisableFlag = FALSE;
1385 setting_enable_evas_object(ad->data_time->eo_check);
1386 setting_enable_genlist_item(ad->data_time->item);
1390 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1392 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1393 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1394 setting_time_reboot_resp_cb,
1396 dgettext("sys_string", "IDS_COM_SK_OK"),
1397 _("IDS_COM_SK_CANCEL"));
1399 __time_auto_update(ad);
1403 } else if (!safeStrCmp("IDS_ST_BODY_TIME_FORMAT", list_item->keyStr)
1404 || !safeStrCmp("IDS_ST_BODY_DATE_FORMAT", list_item->keyStr)
1405 || !safeStrCmp("IDS_CLD_BODY_FIRST_DAY_OF_WEEK", list_item->keyStr)) {
1406 ad->is_datefield_selected = EINA_FALSE;
1407 bool status = !elm_genlist_item_expanded_get(item);
1408 elm_genlist_item_expanded_set(item, status);
1413 void setting_time_main_btn_update_ok_cb(void *cb)
1415 SETTING_TRACE_BEGIN;
1416 SettingTimeUG *ad = (SettingTimeUG *) cb;
1417 int err; /* error check */
1418 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1419 SETTING_ON_OFF_BTN_ON, &err);
1420 elm_check_state_set(ad->data_auto->eo_check, 1);
1421 ad->data_auto->chk_status = 1;
1423 sysman_request_reboot();
1425 /* We'd better check return value from sysman_request_reboot() function. */
1426 /* It will return 0 on success or -1 if failed. */
1430 void setting_time_main_btn_update_cancel_cb(void *cb)
1432 SETTING_TRACE_BEGIN;
1433 SettingTimeUG *ad = (SettingTimeUG *) cb;
1435 int err; /* error check */
1437 retm_if(cb == NULL, "Data parameter is NULL");
1438 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1439 SETTING_ON_OFF_BTN_OFF, &err);
1440 elm_check_state_set(ad->data_auto->eo_check, 0);
1441 ad->data_auto->chk_status = 0;
1446 static UChar *uastrcpy(const char *chars)
1450 len = safeStrLen(chars);
1451 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1454 u_uastrcpy(str, chars);
1459 static int get_timezone_isdst(int* isdst)
1461 SETTING_TRACE_BEGIN;
1465 enum { BUFFERSIZE = 1024 };
1466 char buf[BUFFERSIZE];
1467 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1473 /* handle error condition */
1477 ts = localtime(&ctime);
1479 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
1482 SETTING_TRACE(" == tz_path = %s", buf);
1483 SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst);
1484 *isdst = ts->tm_isdst;
1486 return SETTING_RETURN_SUCCESS;
1490 static void ICU_set_timezone(const char *timezone)
1492 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1493 UErrorCode ec = U_ZERO_ERROR;
1494 UChar *str = uastrcpy(timezone);
1496 ucal_setDefaultTimeZone(str, &ec);
1497 if (U_SUCCESS(ec)) {
1498 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1500 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1507 static void setting_time_main_controlbar_lbtn_label_set(
1508 Evas_Object *controlbar,
1511 SETTING_TRACE_BEGIN;
1512 setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
1513 setting_retm_if(label == NULL, "label parameter is NULL");
1515 Evas_Object *eo_lbtn = NULL;
1516 Elm_Object_Item *first_item = NULL;
1518 first_item = elm_toolbar_first_item_get(controlbar);
1519 setting_retm_if(first_item == NULL, "get first_item failed");
1521 eo_lbtn = elm_object_item_part_content_get(first_item, "object");
1522 setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
1524 elm_object_text_set(eo_lbtn, label);
1529 * ex) timezone : Asia/Seoul --> returns "+09"
1533 static void get_gmt_offset(char *str_buf, int size)
1535 SETTING_TRACE(" before GMT processing : %s", str_buf);
1536 // timezone string +/-<n> ex. +9, -1
1537 time_t t = time(0); // get unix time. sec.
1540 data = localtime(&t); // save time as structure.
1541 setting_retm_if(!data, "data is NULL");
1542 data->tm_isdst = 0; // summer time, not applied.
1543 time_t a = mktime(data);
1546 data->tm_isdst = 0; // summer time, not applied.
1547 time_t b = mktime(data);
1549 int gmtoffset_hour = (a-b)/3600; // result : hour.
1550 int gmtoffset_min = ((a-b)%3600)/60; // result : min.
1551 if(gmtoffset_min != 0) {
1555 snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
1556 SETTING_TRACE("szTimezone is of a valid format: GMT: %s", str_buf);
1561 static char* get_timezone_str()
1563 SETTING_TRACE_BEGIN;
1565 enum { BUFFERSIZE = 1024 };
1566 char buf[BUFFERSIZE];
1567 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1573 /* handle error condition */
1575 return g_strdup(buf+20); //Asia/Seoul
1578 static char* get_city_name_result()
1584 // in_str = "Asia/Seoul"
1585 static bool get_city_name(char* tzname)
1587 sqlite3 *pSQLite3 = NULL;
1588 char *szErrMsg = NULL;
1590 int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
1593 printf( "Can't open database: %s\n", sqlite3_errmsg( pSQLite3 ));
1594 sqlite3_close( pSQLite3 );
1600 printf("Database opened!!\n");
1601 char query_str[256];
1602 snprintf(query_str, 256, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1603 printf("%s \n", query_str);
1604 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1608 sqlite3_free( szErrMsg );
1609 sqlite3_close( pSQLite3 );
1610 printf("Database close!!\n");
1614 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1617 printf("%s\n", argv[i] ? argv[i] : "NULL");
1618 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1624 int main(int argc, char* argv[])
1628 // exporting - current status
1629 if ( (argc == 2) && (0 == strcmp(argv[1], "export"))) {
1632 else if ( (argc == 2) && (0 == strcmp(argv[1], "timezone_init"))) {
1634 //////////////////////////////////////////////////////////////////////////
1635 char* tz_path_zone_city = get_timezone_str();
1636 bool ret = get_city_name(tz_path_zone_city);
1638 printf(">>>>>> RESULT : %s \n", get_city_name_result());
1640 //////////////////////////////////////////////////////////////////////////
1645 ret = setting_cfg_create();