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>
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 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
73 bool __update_timezone_idler(SettingTimeUG *ad)
75 setting_update_timezone(ad);
76 ad->update_timezone_idler = NULL;
80 void time_changed_callback(keynode_t *key, void *data) {
82 SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK");
83 SettingTimeUG *ad = (SettingTimeUG *)data;
85 int ret = setting_time_update_cb(ad);
87 SETTING_TRACE("FAIL: setting_time_update_db(ad)\n");
90 SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected)
91 if(EINA_TRUE == ad->is_datefield_selected) {
92 /* Timezone is not changed and a selected value of the datefield is already changed */
93 SETTING_TRACE("Datefield is selected\n");
98 // vconfset to update timezone
99 char pTZPath[__MAX_PATH_SIZE];
100 ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1);
102 pTZPath[nLen] = '\0';
104 SETTING_TRACE("parse error for SETTING_TZONE_SYMLINK_PATH");
108 if (!__setting_set_city_tzone(&pTZPath[20])) {
109 SETTING_TRACE("__setting_set_city_tzone ERROR");
112 char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
113 setting_retm_if(timezone == NULL, "get vonf failed");
114 ICU_set_timezone(timezone);
118 if (ad->update_timezone_idler) {
119 ecore_idler_del(ad->update_timezone_idler);
120 ad->update_timezone_idler = NULL;
122 ad->update_timezone_idler =
123 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
125 if (ad->refresh_time_idler) {
126 ecore_idler_del(ad->refresh_time_idler);
127 ad->refresh_time_idler = NULL;
129 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
132 void setting_time_update_time_date_format_string(SettingTimeUG *ad)
142 char time_str[MAX_ARGS];
145 ts = localtime_r(&ctime, &ts_ret);
148 /* set time in particular format */
149 ret = setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224, &value, &err);
150 if (ret == SETTING_RETURN_FAIL)
151 value = VCONFKEY_TIME_FORMAT_12;
154 case VCONFKEY_TIME_FORMAT_12:
157 strftime(time_str, MAX_ARGS, "%l:%M %p ", &ts_ret);
161 case VCONFKEY_TIME_FORMAT_24:
163 strftime(time_str, MAX_ARGS, "%H:%M", &ts_ret);
172 elm_object_item_data_set(ad->data_time->item, ad->data_time);
173 elm_genlist_item_update(ad->data_time->item);
177 bool setting_update_timezone(SettingTimeUG *ad)
179 /* SETTING_TRACE_BEGIN; */
180 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
181 char *pa_timezone = NULL;
182 char *pa_city = NULL;
186 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT);
187 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT);
189 //if ((pa_timezone != NULL) && (_(pa_city) != NULL && safeStrCmp(_(pa_city), "NULL"))) {
190 if ((pa_timezone != NULL) && (_(pa_city) != NULL )) {
191 /* SETTING_TRACE_DEBUG("*** timezone: %s *** ", timezone); */
192 /* SETTING_TRACE_DEBUG("*** city: %s *** ", _(city)); */
193 /* SETTING_TRACE_DEBUG("*** ret: %d, dst: %d *** ", ret, dst); */
195 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(pa_city), pa_timezone);
196 //ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", pa_timezone, _(pa_city));
200 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
203 SETTING_TRACE("ad->data_tz:%p", ad->data_tz);
206 ad->data_tz->sub_desc = (char *)g_strdup(time_zone_sub_str);
207 elm_object_item_data_set(ad->data_tz->item, ad->data_tz);
208 elm_genlist_item_update(ad->data_tz->item);
214 static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data)
216 /* SETTING_TRACE_BEGIN; */
217 ret_if(NULL == data);
218 SettingTimeUG *ad = data;
219 int status = vconf_keynode_get_int(key);
220 char *vconf_name = vconf_keynode_get_name(key);
221 /* SETTING_TRACE("vconf_name:%s", vconf_name); */
223 if (!safeStrCmp(vconf_name, VCONFKEY_REGIONFORMAT_TIME1224)) {
226 /* VCONFKEY_REGIONFORMAT_TIME1224 1:12H 2:24H */
227 if (status <= 2 && status > 0) /* 1, 2 */
228 --status; /* set to 0 or 1 */
230 status = 0; /* set 12H */
232 /* TODO assert 1 or 0 */
233 ad->data_time->chk_status = !status;
235 char datefield_format[MAX_DATETIME_FORMAT_LEN + 1] = {0, };
237 const char *time_format = NULL;
238 if (ad->data_time->chk_status)//12 hours
240 time_format = "%I : %M %p";
242 time_format = "%H : %M";
245 //get date format from datefiled itself, if elm_datetime_add() supports set date-format via ICU.
246 #ifdef SUPPORT_DATEFIELD_DATE_FORMAT_AUTOSET
247 const char *old_format = elm_datetime_format_get(ad->data_time->eo_check);
248 snprintf(datefield_format, MAX_DATE_FORMAT_LEN + 1, //add one space " "
250 safeStrNCat(datefield_format, time_format, MAX_DATETIME_FORMAT_LEN);
251 SETTING_TRACE("datefield_format:%s", datefield_format);
253 int value = SETTING_DATE_FORMAT_DD_MM_YYYY;
256 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
257 int ret = setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
258 if (ret == SETTING_RETURN_FAIL)
259 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
261 snprintf(datefield_format, MAX_DATETIME_FORMAT_LEN,
262 "%s %s", date_format_str[value], time_format);
265 elm_datetime_format_set(ad->data_time->eo_check, datefield_format);
270 /* ***************************************************
274 ***************************************************/
275 static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj,
280 ret_if(data == NULL);
281 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
282 SettingTimeUG *ad = list_item->userdata;
284 if (EINA_FALSE == ad->is_datefield_selected) {
285 SETTING_TRACE("Datefield is not selected\n");
289 // If auto update is on, don't anything while the datefield has been updated (i.e., time runs)
290 if (1 == setting_time_check_automatic_time_update_state()) {
291 SETTING_TRACE("AUTO_TIME ON: no action");
295 // otherwise, we apply a new date which has been changed by a user
299 elm_datetime_value_get(obj, &_tm);
301 SETTING_TRACE("year : %d, month : %d, day : %d, hour : %d, min : %d",
302 _tm.tm_year, _tm.tm_mon, _tm.tm_mday, _tm.tm_hour, _tm.tm_min);
303 if (2037 < _tm.tm_year) {
304 setting_create_simple_popup(ad, ad->win_get,
305 NULL, _(ERR_BIGGER_THAN_2037));
308 #if SUPPORT_SCREEN_PROTECTED /* if not lock the current state, after set the time, the screen will become dimmed */
309 pm_lock_state(LCD_NORMAL, STAY_CUR_STATE, 0);
314 if (get_timezone_isdst(&isdst) == SETTING_RETURN_SUCCESS) {
315 _tm.tm_isdst = isdst;
318 SETTING_TRACE_ERROR("get_timezone_isdst() failed");
322 /* local time -> gmtime */
323 time_t the_time = mktime(&_tm); /* represent local time */
325 if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) )
327 SETTING_TRACE("Time is not changed\n");
328 //current time didn't change
332 #if PROGRESS_POPUP_SHOW
333 // remove popup if created
334 if (ad->pop_progress) {
335 evas_object_del(ad->pop_progress);
336 ad->pop_progress = NULL;
341 setting_create_popup_with_progressbar(ad, ad->win_get, "pending_list",
342 NULL, NULL, NULL, 0, TRUE, TRUE);
345 // invoke API to change time
346 int ret = sysman_set_datetime(the_time);
347 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
352 Eina_Bool __refresh_date_timer(void *data)
354 //SETTING_TRACE_BEGIN;
355 SettingTimeUG *ad = data;
357 time_t ctime = time(NULL);
359 struct tm *ts = localtime_r(&ctime, &ts_ret);
363 elm_datetime_value_get(ad->data_time->eo_check, &ui_time);
364 if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) )
366 SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__);
367 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
373 static void __setting_time_main_exp_cb(void *data, Evas_Object *obj,
376 ret_if(NULL == data || NULL == event_info);
378 SettingTimeUG *ad = (SettingTimeUG *) data;
379 Elm_Object_Item *parentItem = event_info; /* parent item */
380 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
381 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
384 if (data_parentItem == ad->data_time_fmt) {
386 rgd = elm_radio_add(scroller);
387 elm_radio_value_set(rgd, -1);
388 setting_create_Gendial_exp_sub_field(scroller,
389 &(ad->itc_1icon_1text_sub),
390 NULL, NULL, parentItem,
391 SWALLOW_Type_1RADIO, rgd,
392 VCONFKEY_TIME_FORMAT_12,
393 "IDS_COM_BODY_12_HOURS",
396 setting_create_Gendial_exp_sub_field(scroller,
397 &(ad->itc_1icon_1text_sub),
398 NULL, NULL, parentItem,
399 SWALLOW_Type_1RADIO, rgd,
400 VCONFKEY_TIME_FORMAT_24,
401 "IDS_ST_BODY_24_HOURS",
404 setting_update_chk_status(rgd,
405 data_parentItem->int_slp_setting_binded);
407 } else if (data_parentItem == ad->data_date_fmt) {
408 rgd = elm_radio_add(scroller);
409 elm_radio_value_set(rgd, -1);
410 setting_create_Gendial_exp_sub_field(scroller,
411 &(ad->itc_1icon_1text_sub),
412 NULL, NULL, parentItem,
413 SWALLOW_Type_1RADIO, rgd,
414 SETTING_DATE_FORMAT_DD_MM_YYYY,
415 "IDS_ST_BODY_DDMMYYYY_DOT",
418 setting_create_Gendial_exp_sub_field(scroller,
419 &(ad->itc_1icon_1text_sub),
420 NULL, NULL, parentItem,
421 SWALLOW_Type_1RADIO, rgd,
422 SETTING_DATE_FORMAT_MM_DD_YYYY,
423 "IDS_ST_BODY_MM_DD_YYYY_DOT",
426 setting_create_Gendial_exp_sub_field(scroller,
427 &(ad->itc_1icon_1text_sub),
428 NULL, NULL, parentItem,
429 SWALLOW_Type_1RADIO, rgd,
430 SETTING_DATE_FORMAT_YYYY_MM_DD,
431 "IDS_COM_BODY_YYYYMMDD",
434 setting_create_Gendial_exp_sub_field(scroller,
435 &(ad->itc_1icon_1text_sub),
436 NULL, NULL, parentItem,
437 SWALLOW_Type_1RADIO, rgd,
438 SETTING_DATE_FORMAT_YYYY_DD_MM,
439 "IDS_ST_BODY_YYYY_DD_MM_DOT",
442 setting_update_chk_status(rgd,
443 data_parentItem->int_slp_setting_binded);
445 } else if (data_parentItem == ad->data_firstday_week_fmt) {
446 rgd = elm_radio_add(scroller);
447 elm_radio_value_set(rgd, -1);
448 setting_create_Gendial_exp_sub_field(scroller,
449 &(ad->itc_1icon_1text_sub),
450 NULL, rgd, parentItem,
451 SWALLOW_Type_1RADIO, rgd,
452 SETTING_WEEKOFDAY_FORMAT_SUNDAY,
453 "IDS_ST_BODY_SUNDAY", NULL);
455 setting_create_Gendial_exp_sub_field(scroller,
456 &(ad->itc_1icon_1text_sub),
457 NULL, rgd, parentItem,
458 SWALLOW_Type_1RADIO, rgd,
459 SETTING_WEEKOFDAY_FORMAT_MONDAY,
460 "IDS_ST_BODY_MONDAY", NULL);
462 setting_update_chk_status(rgd,
463 data_parentItem->int_slp_setting_binded);
467 static int setting_time_main_create(void *cb)
470 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
472 SettingTimeUG *ad = (SettingTimeUG *) cb;
476 char *title = _("IDS_ST_BODY_DATE_AND_TIME");
478 ad->is_datefield_selected = EINA_FALSE;
480 setting_call_back_func l_button_cb = NULL;
481 setting_call_back_func r_button_cb = NULL;
483 service_h service = ad->bundle_data;
485 service_get_extra_data(service, "caller", &caller);
486 service_get_extra_data(service, "lbutton", &l_btn);
488 l_button_cb = setting_time_main_click_softkey_caller_exist_left_cb;
489 service_get_extra_data(service, "title", &title);
490 service_get_extra_data(service, "rbutton", &r_btn);
492 r_button_cb = setting_time_main_click_softkey_caller_exist_right_cb;
494 Evas_Object *scroller; /* scroller is a genlist */
498 /* for setup wizard */
499 char *lbtn_str = (char *)g_strdup(l_btn);
500 bool same_flag = FALSE;
501 if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) {
502 l_btn = (char *)dgettext("sys_string", "IDS_COM_BODY_BACK");
506 Evas_Object *controllbar = NULL;
508 scroller = elm_genlist_add(ad->win_main_layout);
509 elm_object_style_set(scroller, "dialogue");
510 if(scroller == NULL) {
511 SETTING_TRACE_ERROR("Cannot set scroller object as contento of layout");
512 // free allocated data before return.
514 return SETTING_DRAW_ERR_FAIL_SCROLLER;
517 elm_genlist_clear(scroller);
519 setting_create_layout_navi_bar(ad->win_main_layout,
528 elm_toolbar_item_append(controllbar, IMG_PREVIOUS, l_btn, l_button_cb, ad);
529 elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE);
530 elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE);
531 elm_toolbar_item_append(controllbar, IMG_NEXT, r_btn, r_button_cb, ad);
534 setting_time_main_controlbar_lbtn_label_set(controllbar,
542 l_btn = _("IDS_COM_BODY_BACK");
543 title = _("IDS_ST_BODY_DATE_AND_TIME");
545 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
548 setting_time_main_click_softkey_left_cb,
552 ad->scrl_main = scroller;
557 Elm_Object_Item *item;
559 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
560 ELM_GENLIST_ITEM_NONE, NULL, NULL);
561 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
562 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, &value,
564 bool auto_flag = value;
566 if(auto_flag) //do special process only when auto mode
568 //to read TAPI vconfs
572 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
573 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
574 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
575 if (ret == 0 && !isEmptyStr(tzpath))
577 //1.to update timezone
578 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
579 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
580 g_strlcat(tz_path, tzpath, sizeof(tz_path));
581 SETTING_TRACE("full tz_path:%s", tz_path);
582 ret = sysman_set_timezone(tz_path);
584 SETTING_TRACE("tzpath is not valid.");
586 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
587 if (!__setting_set_city_tzone(tzpath)) {
588 SETTING_TRACE("__setting_set_city_tzone ERROR")
590 if (get_city_name(tzpath)) {
591 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
593 char* city = get_city_name_result();
594 SETTING_TRACE("city:%s", city);
595 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
597 // 2.to set current time
599 FILE *fp = fopen("/proc/uptime", "r");
600 fscanf(fp, "%d", &t_uptime);
601 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
602 time_t t_current = t_nitz + t_uptime - t_offset;
603 SETTING_TRACE("t_current:%d", t_current);
604 ret = sysman_set_datetime(t_current);
611 setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
612 setting_time_main_mouse_up_Gendial_list_cb,
613 ad, SWALLOW_Type_1TOGGLE, NULL,
615 "IDS_ST_BODY_AUTOMATIC_UPDATE", NULL,
616 setting_time_main_chk_btn_cb);
618 ad->data_auto->userdata = ad;
620 SETTING_TRACE_ERROR("ad->data_auto is NULL");
623 setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
624 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
625 NULL, NULL, 0, SETTING_TIME_AUTO_UPDATE_DESC, NULL,
627 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
628 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
631 setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH);
633 char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, };
634 char *pa_timezone = NULL;
635 char *pa_city = NULL;
637 pa_city = vconf_get_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT); // IDS_WCL_BODY_CITYNAME_SEOUL
638 pa_timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_INT); // "Asia/Seoul"
640 if ((pa_timezone != NULL) && (_(pa_city) != NULL)) {
642 // don't use hard coded value
643 // get value from current timezone
645 char str_buf[GMT_BUF_SIZE] = {0, };
646 get_gmt_offset(str_buf, GMT_BUF_SIZE);
648 char* timezone_str = get_timezone_str();
650 bool ret = get_city_name(timezone_str);
652 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
654 char* cityname_id = get_city_name_result();
656 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(cityname_id), _(str_buf));
662 ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL"));
666 /* UI create time zone */
668 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
669 setting_time_main_mouse_up_Gendial_list_cb,
670 ad, SWALLOW_Type_INVALID, NULL,
671 NULL, 0, "IDS_ST_BODY_TIME_ZONE",
672 time_zone_sub_str, NULL);
674 ad->data_tz->userdata = ad;
676 SETTING_TRACE_ERROR("ad->data_tz is NULL");
679 /* create DATE_AND_TIME */
682 setting_get_int_slp_key(INT_SLP_SETTING_REGIONFORMAT_TIME1224,
684 if (ret == SETTING_RETURN_FAIL) {
685 value = VCONFKEY_TIME_FORMAT_12;
687 bool is_12hours = (value == VCONFKEY_TIME_FORMAT_12 ? TRUE : FALSE);
688 char *date_format_str[] = { "%d %b %Y", "%b %d %Y", "%Y %b %d", "%Y %d %b" };
690 setting_get_int_slp_key(INT_SLP_SETTING_DATE_FORMAT, &value, &err);
691 if (ret == SETTING_RETURN_FAIL)
692 value = SETTING_DATE_FORMAT_DD_MM_YYYY;
694 /* UI format string */
696 setting_create_Gendial_field_def(scroller, &(ad->itc_layout),
697 setting_time_main_mouse_up_Gendial_list_cb,
698 ad, SWALLOW_Type_LAYOUT_DATEFIELD,
699 NULL, NULL, is_12hours,
700 "IDS_ST_BODY_DATE_AND_TIME",
701 date_format_str[value],
702 setting_time_main_datefield_change_cb);
704 ad->data_time->userdata = ad;
705 ad->data_time->isItemDisableFlag = auto_flag;
707 SETTING_TRACE_ERROR("ad->data_time is NULL");
709 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
710 ELM_GENLIST_ITEM_NONE, NULL, NULL);
711 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
713 /* UI create "Time format" */
714 setting_enable_expandable_genlist(scroller, ad,
715 __setting_time_main_exp_cb, NULL);
717 char* pa_time_format = get_pa_time_format_str();
718 ad->data_time_fmt = setting_create_Gendial_exp_parent_field(scroller,
719 &(ad->itc_2text_3_parent),
720 setting_time_main_mouse_up_Gendial_list_cb,
721 ad, SWALLOW_Type_INVALID,
722 "IDS_ST_BODY_TIME_FORMAT",
724 if (ad->data_time_fmt) {
725 ad->data_time_fmt->int_slp_setting_binded =
726 INT_SLP_SETTING_REGIONFORMAT_TIME1224;
728 SETTING_TRACE_ERROR("ad->data_time_fmt is NULL");
730 G_FREE(pa_time_format);
732 #if APPLIED_DATATIME_DATA_FORMAT
733 char* pa_date_format = get_pa_date_format_str();
734 ad->data_date_fmt = setting_create_Gendial_exp_parent_field(scroller,
735 &(ad->itc_2text_3_parent),
736 setting_time_main_mouse_up_Gendial_list_cb,
737 ad, SWALLOW_Type_INVALID,
738 "IDS_ST_BODY_DATE_FORMAT",
740 if (ad->data_date_fmt) {
741 ad->data_date_fmt->int_slp_setting_binded =
742 INT_SLP_SETTING_DATE_FORMAT;
744 SETTING_TRACE_ERROR("ad->data_date_fmt is NULL");
746 G_FREE(pa_date_format);
749 #if APPLIED_DATATIME_FIRSTDAY_WEEK
750 char* pa_week = get_pa_week_format_str();
751 ad->data_firstday_week_fmt =
752 setting_create_Gendial_exp_parent_field(scroller,
753 &(ad->itc_2text_3_parent),
754 setting_time_main_mouse_up_Gendial_list_cb,
755 ad, SWALLOW_Type_INVALID,
756 "IDS_CLD_BODY_FIRST_DAY_OF_WEEK",
758 if (ad->data_firstday_week_fmt) {
759 ad->data_firstday_week_fmt->int_slp_setting_binded =
760 INT_SLP_SETTING_WEEK_FORMAT;
762 SETTING_TRACE_ERROR("ad->data_firstday_week_fmt is NULL");
767 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
768 ELM_GENLIST_ITEM_NONE, NULL, NULL);
769 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
774 setting_disable_genlist_item(ad->data_tz->item);
777 setting_disable_genlist_item(ad->data_time->item);
781 setting_view_time_main.is_create = 1;
782 vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad);
784 /* register vconf key to get event callback for converting 12/24H */
785 ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
786 setting_time_main_int_vconf_change_cb, ad);
787 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
788 (char *)VCONFKEY_REGIONFORMAT_TIME1224, ret);
790 /* register vconf key to get event callback for date format */
791 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
792 setting_time_main_int_vconf_change_cb, ad);
793 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
794 (char *)VCONFKEY_SETAPPL_DATE_FORMAT_INT, ret);
796 /* to avoid update time-diff, every per 3s to update. */
797 ad->update_timer = ecore_timer_add(3, (Ecore_Task_Cb) __refresh_date_timer, ad);
799 return SETTING_RETURN_SUCCESS;
802 static int setting_time_main_destroy(void *cb)
806 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
808 SettingTimeUG *ad = (SettingTimeUG *) cb;
810 if (ad->update_timer) {
811 ecore_timer_del(ad->update_timer);
812 ad->update_timer = NULL;
815 #if PROGRESS_POPUP_SHOW
816 if (ad->pop_progress) {
817 evas_object_del(ad->pop_progress);
818 ad->pop_progress = NULL;
822 if (ad->update_timezone_idler) {
823 ecore_idler_del(ad->update_timezone_idler);
824 ad->update_timezone_idler = NULL;
826 if (ad->refresh_time_idler) {
827 ecore_idler_del(ad->refresh_time_idler);
828 ad->refresh_time_idler = NULL;
831 vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
832 time_changed_callback);
834 vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224,
835 setting_time_main_int_vconf_change_cb);
836 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT,
837 setting_time_main_int_vconf_change_cb);
839 if (ad->ly_main != NULL) {
840 evas_object_del(ad->ly_main);
841 setting_view_time_main.is_create = 0;
844 return SETTING_RETURN_SUCCESS;
847 static int setting_time_main_update(void *cb)
850 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
852 SettingTimeUG *ad = (SettingTimeUG *) cb;
854 if (ad->ly_main != NULL) {
855 evas_object_show(ad->ly_main);
857 if (ad->update_timezone_idler) {
858 ecore_idler_del(ad->update_timezone_idler);
859 ad->update_timezone_idler = NULL;
861 ad->update_timezone_idler =
862 ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad);
864 if (ad->refresh_time_idler) {
865 ecore_idler_del(ad->refresh_time_idler);
866 ad->refresh_time_idler = NULL;
868 ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad);
870 return SETTING_RETURN_SUCCESS;
873 static int setting_time_main_cleanup(void *cb)
876 return SETTING_RETURN_SUCCESS;
880 /* ***************************************************
884 ****************************************************/
886 int setting_time_check_automatic_time_update_state()
894 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
901 static int __setting_set_city_tzone(const char* pTZPath)
903 // let's get city & timezone string from pTZPath
905 char szTimezone[GMT_BUF_SIZE] = {0,};
906 char* pStr = strdup(pTZPath);
908 // 2. timezone string +/-<n> ex. +9, -1
909 get_gmt_offset(szTimezone, GMT_BUF_SIZE);
911 int ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_INT, szTimezone);
914 SETTING_TRACE("set vconf failed");
919 /** @todo replace with vconf ID */
920 ret = vconf_set_str(VCONFKEY_SETAPPL_TIMEZONE_ID, pStr);
927 setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug,
928 service_h result, void *priv)
932 retm_if(priv == NULL, "Data parameter is NULL");
934 SettingTimeUG *ad = (SettingTimeUG *) priv;
938 service_get_extra_data(result, "city", &city);
939 service_get_extra_data(result, "tzpath", &tzpath);
942 SETTING_TRACE("tzpath from worldclock UG is null.");
945 SETTING_TRACE("tzpath : %s", tzpath );
947 SETTING_TRACE("city : %s", city );
949 /* --------------------------------------------------------------------- */
950 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
951 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
952 g_strlcat(tz_path, tzpath, sizeof(tz_path));
953 SETTING_TRACE("full tz_path:%s", tz_path);
955 int ret = sysman_set_timezone(tz_path);
957 SETTING_TRACE("tzpath is not valid.");
960 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
962 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
963 setting_retm_if(ret != 0, "set vconf failed");
965 // parse city and GMT offset from tzpath and system time property
966 // set the strings in vconf which will be used while updating display of timezone
967 if (!__setting_set_city_tzone(tzpath)) {
968 SETTING_TRACE("__setting_set_city_tzone ERROR")
972 // update the display for timezone
973 setting_update_timezone(ad);
974 //heynoti_publish(SETTING_TIME_CHANGED);
975 static int t_event_val = -1;
976 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
980 void setting_time_main_launch_worldclock_destroy_ug_cb(ui_gadget_h ug,
984 /* if(ug) ug_destroy(ug); */
985 /* restore the '<-' button on the navigate bar */
987 SettingTimeUG *ad = (SettingTimeUG *) priv;
990 ad->ug_loading = NULL;
992 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
994 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
996 if (back_btn != NULL) {
997 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1002 void setting_time_main_launch_worldclock_layout_ug_cb(ui_gadget_h ug,
1006 SETTING_TRACE_BEGIN;
1007 SettingTimeUG *ad = (SettingTimeUG *) priv;
1013 base = (Evas_Object *) ug_get_layout(ug);
1018 case UG_MODE_FULLVIEW:
1019 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1021 elm_win_resize_object_add(ad->win_get, base);
1022 evas_object_show(base);
1031 void setting_time_main_launch_worldclock_sg(void *data)
1033 SETTING_TRACE_BEGIN;
1035 retm_if(data == NULL, "Data parameter is NULL");
1037 SettingTimeUG *ad = (SettingTimeUG *) data;
1039 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1040 setting_retm_if(!cbs, "calloc failed");
1041 cbs->layout_cb = setting_time_main_launch_worldclock_layout_ug_cb;
1042 cbs->result_cb = setting_time_main_launch_worldclock_result_ug_cb;
1043 cbs->destroy_cb = setting_time_main_launch_worldclock_destroy_ug_cb;
1044 cbs->priv = (void *)ad;
1046 SETTING_TRACE("to load ug[%s]", "worldclock-efl");
1048 ug_create(ad->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs);
1049 if (NULL == ad->ug_loading) { /* error handling */
1057 Eina_Bool setting_update_datefield(void *cb)
1059 SETTING_TRACE_BEGIN;
1060 retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL");
1061 SettingTimeUG *ad = (SettingTimeUG *) cb;
1063 //__refresh_date_timer(ad);
1064 if (ad->data_time) {
1065 time_t ctime = time(NULL);
1067 struct tm *ts = localtime_r(&ctime, &ts_ret);
1068 if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1070 ad->refresh_time_idler = NULL;
1074 /* ***************************************************
1078 ****************************************************/
1081 setting_time_main_click_softkey_left_cb(void *data, Evas_Object *obj,
1084 SETTING_TRACE_BEGIN;
1085 retm_if(data == NULL, "Data parameter is NULL");
1087 SettingTimeUG *ad = (SettingTimeUG *) data;
1089 /* Send destroy request */
1090 ug_destroy_me(ad->ug);
1093 /* ***************************************************
1097 ****************************************************/
1100 setting_time_main_click_softkey_caller_exist_left_cb(void *data,
1104 SETTING_TRACE_BEGIN;
1106 retm_if(data == NULL, "Data parameter is NULL");
1108 SettingTimeUG *ad = (SettingTimeUG *) data;
1110 /* Create Bundle and send message */
1112 if (service_create(&svc))
1115 service_add_extra_data(svc, "result", "lbutton_click");
1116 ug_send_result(ad->ug, svc);
1118 service_destroy(svc);
1120 /* Send destroy request */
1121 ug_destroy_me(ad->ug);
1125 setting_time_main_click_softkey_caller_exist_right_cb(void *data,
1129 SETTING_TRACE_BEGIN;
1131 retm_if(data == NULL, "Data parameter is NULL");
1133 SettingTimeUG *ad = (SettingTimeUG *) data;
1135 /* Create Bundle and send message */
1137 if (service_create(&svc))
1140 service_add_extra_data(svc, "result", "rbutton_click");
1141 ug_send_result(ad->ug, svc);
1143 service_destroy(svc);
1145 /* Send destroy request */
1146 ug_destroy_me(ad->ug);
1149 static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj,
1152 SETTING_TRACE_BEGIN;
1153 int response_type = btn_type(obj);
1154 if (POPUP_RESPONSE_OK == response_type) {
1155 setting_time_main_btn_update_ok_cb(data);
1156 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1157 setting_time_main_btn_update_cancel_cb(data);
1160 SettingTimeUG *ad = data;
1163 evas_object_del(ad->pop);
1167 static void __time_auto_update(void *data)
1169 setting_retm_if(data == NULL, "Data parameter is NULL");
1170 SettingTimeUG *ad = (SettingTimeUG *) data;
1172 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1173 SETTING_ON_OFF_BTN_ON, &err);
1175 setting_disable_genlist_item(ad->data_tz->item);
1178 if (ad->data_time) {
1179 ad->data_time->isItemDisableFlag = FALSE;
1180 setting_disable_evas_object(ad->data_time->eo_check);
1181 setting_disable_genlist_item(ad->data_time->item);
1188 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz);
1189 ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset);
1190 char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE);
1191 if (ret != 0 || isEmptyStr(tzpath))
1193 setting_create_simple_popup(ad, ad->win_get,
1194 NULL, _("TAPI doesn't support this sim card to update time automatically!"));
1200 SETTING_TRACE("tz_path:%s", tzpath);
1202 char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1];
1203 safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4);
1204 g_strlcat(tz_path, tzpath, sizeof(tz_path));
1205 SETTING_TRACE("full tz_path:%s", tz_path);
1206 ret = sysman_set_timezone(tz_path);
1208 SETTING_TRACE("tzpath is not valid.");
1211 SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path);
1212 if (!__setting_set_city_tzone(tzpath)) {
1213 SETTING_TRACE("__setting_set_city_tzone ERROR")
1216 if (get_city_name(tzpath)) {
1217 SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result());
1219 char* city = get_city_name_result();
1220 SETTING_TRACE("city:%s", city);
1221 ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city);
1222 setting_retm_if(ret != 0, "set vconf failed");
1223 setting_update_timezone(ad);
1227 FILE *fp = fopen("/proc/uptime", "r");
1228 fscanf(fp, "%d", &t_uptime);
1229 SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime);
1230 time_t t_current = t_nitz + t_uptime - t_offset;
1231 SETTING_TRACE("t_current:%d", t_current);
1232 ret = sysman_set_datetime(t_current);
1233 setting_retm_if(ret == -1, "sysman_set_datetime call failed");
1234 //ad->changed_time = t_current;
1235 if (ad->data_time) {
1237 struct tm *ts = localtime_r(&t_current, &ts_ret);
1239 elm_datetime_value_set(ad->data_time->eo_check, &ts_ret);
1242 // c.heynoti_publish
1243 static int t_event_val = -1;
1244 vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val);
1248 setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
1250 SETTING_TRACE_BEGIN;
1252 retm_if(data == NULL, "Data parameter is NULL");
1253 SettingTimeUG *ad = NULL;
1254 Setting_GenGroupItem_Data *list_item =
1255 (Setting_GenGroupItem_Data *) data;
1256 ad = list_item->userdata;
1257 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1259 ad->chk_auto = ad->data_auto->eo_check;
1261 ad->chk_dst = ad->data_dst->eo_check;
1263 if (ad->data_time) {
1264 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1268 if (obj == ad->chk_auto) {
1270 setting_get_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1273 (void) setting_set_bool_slp_key (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, SETTING_ON_OFF_BTN_OFF, &err);
1274 elm_check_state_set(ad->chk_auto, 0);
1277 setting_enable_genlist_item(ad->data_tz->item);
1280 if (ad->data_time) {
1281 ad->data_time->isItemDisableFlag = FALSE;
1282 setting_enable_evas_object(ad->data_time->eo_check);
1283 setting_enable_genlist_item(ad->data_time->item);
1287 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1289 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1290 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1291 setting_time_reboot_resp_cb,
1293 dgettext("sys_string",
1295 _("IDS_COM_SK_CANCEL"));
1297 __time_auto_update(ad);
1302 static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1305 SETTING_TRACE_BEGIN;
1307 setting_retm_if(data == NULL, "Data parameter is NULL");
1309 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1310 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1311 elm_genlist_item_selected_set(item, 0);
1312 Setting_GenGroupItem_Data *list_item =
1313 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1315 SettingTimeUG *ad = (SettingTimeUG *) data;
1316 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1318 if (ad->data_time && 0 != safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) {
1319 elm_object_focus_set(ad->data_time->eo_check, EINA_FALSE);
1322 if (!safeStrCmp("IDS_ST_BODY_TIME_ZONE", list_item->keyStr)) {
1323 ad->is_datefield_selected = EINA_FALSE;
1324 if (1 == setting_time_check_automatic_time_update_state()) {
1325 setting_create_simple_popup(ad, ad->win_get,
1326 NULL, _(AUTO_TIME_UPDATE_ON));
1328 setting_time_main_launch_worldclock_sg(ad);
1331 } else if (!safeStrCmp("IDS_ST_BODY_DATE_AND_TIME", list_item->keyStr)) {
1332 ad->is_datefield_selected = EINA_TRUE;
1333 if (1 == setting_time_check_automatic_time_update_state()) {
1334 setting_create_simple_popup(ad, ad->win_get,
1335 NULL, _(AUTO_TIME_UPDATE_ON));
1337 /* setting_view_change(&setting_view_time_main, &setting_view_time_time, ad); */
1339 } else if (!safeStrCmp("IDS_ST_BODY_AUTOMATIC_UPDATE", list_item->keyStr)) {
1340 ad->is_datefield_selected = EINA_FALSE;
1341 int old_status = elm_check_state_get(list_item->eo_check);
1343 list_item->chk_status = !old_status;
1344 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1346 if (!list_item->chk_status) {
1348 setting_set_bool_slp_key
1349 (BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1350 SETTING_ON_OFF_BTN_OFF, &err);
1353 setting_enable_genlist_item(ad->data_tz->item);
1356 if (ad->data_time) {
1357 ad->data_time->isItemDisableFlag = FALSE;
1358 setting_enable_evas_object(ad->data_time->eo_check);
1359 setting_enable_genlist_item(ad->data_time->item);
1363 #if UN_SUPPORT_TIME_DYNAMIC_UPDATE
1365 setting_create_popup_with_btn(ad, ad->win_get, NULL,
1366 _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"),
1367 setting_time_reboot_resp_cb,
1369 dgettext("sys_string", "IDS_COM_SK_OK"),
1370 _("IDS_COM_SK_CANCEL"));
1372 __time_auto_update(ad);
1376 } else if (!safeStrCmp("IDS_ST_BODY_TIME_FORMAT", list_item->keyStr)
1377 || !safeStrCmp("IDS_ST_BODY_DATE_FORMAT", list_item->keyStr)
1378 || !safeStrCmp("IDS_CLD_BODY_FIRST_DAY_OF_WEEK", list_item->keyStr)) {
1379 ad->is_datefield_selected = EINA_FALSE;
1380 bool status = !elm_genlist_item_expanded_get(item);
1381 elm_genlist_item_expanded_set(item, status);
1386 void setting_time_main_btn_update_ok_cb(void *cb)
1388 SETTING_TRACE_BEGIN;
1389 SettingTimeUG *ad = (SettingTimeUG *) cb;
1390 int err; /* error check */
1391 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1392 SETTING_ON_OFF_BTN_ON, &err);
1393 elm_check_state_set(ad->data_auto->eo_check, 1);
1394 ad->data_auto->chk_status = 1;
1396 sysman_request_reboot();
1398 /* We'd better check return value from sysman_request_reboot() function. */
1399 /* It will return 0 on success or -1 if failed. */
1403 void setting_time_main_btn_update_cancel_cb(void *cb)
1405 SETTING_TRACE_BEGIN;
1406 SettingTimeUG *ad = (SettingTimeUG *) cb;
1408 int err; /* error check */
1410 retm_if(cb == NULL, "Data parameter is NULL");
1411 setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE,
1412 SETTING_ON_OFF_BTN_OFF, &err);
1413 elm_check_state_set(ad->data_auto->eo_check, 0);
1414 ad->data_auto->chk_status = 0;
1419 static UChar *uastrcpy(const char *chars)
1423 len = safeStrLen(chars);
1424 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1427 u_uastrcpy(str, chars);
1432 static int get_timezone_isdst(int* isdst)
1434 SETTING_TRACE_BEGIN;
1438 enum { BUFFERSIZE = 1024 };
1439 char buf[BUFFERSIZE];
1440 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1446 /* handle error condition */
1450 ts = localtime(&ctime);
1452 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
1455 SETTING_TRACE(" == tz_path = %s", buf);
1456 SETTING_TRACE(" == isdst = %d\n", ts->tm_isdst);
1457 *isdst = ts->tm_isdst;
1459 return SETTING_RETURN_SUCCESS;
1463 static void ICU_set_timezone(const char *timezone)
1465 SETTING_TRACE("ICU_set_timezone = %s ", timezone);
1466 UErrorCode ec = U_ZERO_ERROR;
1467 UChar *str = uastrcpy(timezone);
1469 ucal_setDefaultTimeZone(str, &ec);
1470 if (U_SUCCESS(ec)) {
1471 SETTING_TRACE("ucal_setDefaultTimeZone() SUCCESS ");
1473 SETTING_TRACE("ucal_setDefaultTimeZone() FAILED : %s ",
1480 static void setting_time_main_controlbar_lbtn_label_set(
1481 Evas_Object *controlbar,
1484 SETTING_TRACE_BEGIN;
1485 setting_retm_if(controlbar == NULL, "controlbar parameter is NULL");
1486 setting_retm_if(label == NULL, "label parameter is NULL");
1488 Evas_Object *eo_lbtn = NULL;
1489 Elm_Object_Item *first_item = NULL;
1491 first_item = elm_toolbar_first_item_get(controlbar);
1492 setting_retm_if(first_item == NULL, "get first_item failed");
1494 eo_lbtn = elm_object_item_part_content_get(first_item, "object");
1495 setting_retm_if(eo_lbtn == NULL, "get eo_lbtn failed");
1497 elm_object_text_set(eo_lbtn, label);
1502 * ex) timezone : Asia/Seoul --> returns "+09"
1506 static void get_gmt_offset(char *str_buf, int size)
1508 // timezone string +/-<n> ex. +9, -1
1509 time_t t = time(0); // get unix time. sec.
1512 data = localtime(&t); // save time as structure.
1513 setting_retm_if(!data, "data is NULL");
1514 data->tm_isdst = 0; // summer time, not applied.
1515 time_t a = mktime(data);
1518 data->tm_isdst = 0; // summer time, not applied.
1519 time_t b = mktime(data);
1521 int gmtoffset_hour = (a-b)/3600; // result : hour.
1522 int gmtoffset_min = ((a-b)%3600)/60; // result : min.
1523 if(gmtoffset_min != 0) {
1527 snprintf(str_buf, size, "%+d:%02u", gmtoffset_hour, gmtoffset_min);
1528 SETTING_TRACE("szTimezone is of a valid format: GMT: %s", str_buf);
1533 static char* get_timezone_str()
1535 SETTING_TRACE_BEGIN;
1537 enum { BUFFERSIZE = 1024 };
1538 char buf[BUFFERSIZE];
1539 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1545 /* handle error condition */
1547 return g_strdup(buf+20); //Asia/Seoul
1550 static char* get_city_name_result()
1556 // in_str = "Asia/Seoul"
1557 static bool get_city_name(char* tzname)
1559 sqlite3 *pSQLite3 = NULL;
1560 char *szErrMsg = NULL;
1562 int rst = sqlite3_open( "/opt/dbspace/.worldclock.db", &pSQLite3);
1565 printf( "Can't open database: %s\n", sqlite3_errmsg( pSQLite3 ));
1566 sqlite3_close( pSQLite3 );
1572 printf("Database opened!!\n");
1573 char query_str[256];
1574 snprintf(query_str, 256, "SELECT city FROM city_table where tz_path=\"%s\"", tzname);
1575 printf("%s \n", query_str);
1576 rst = sqlite3_exec(pSQLite3, query_str, query_callback, 0, &szErrMsg);
1580 sqlite3_free( szErrMsg );
1581 sqlite3_close( pSQLite3 );
1582 printf("Database close!!\n");
1586 static int query_callback(void *NotUsed, int argc, char **argv, char **azColName)
1589 printf("%s\n", argv[i] ? argv[i] : "NULL");
1590 s_result = g_strdup(argv[i] ? argv[i] : "NULL");
1596 int main(int argc, char* argv[])
1600 // exporting - current status
1601 if ( (argc == 2) && (0 == strcmp(argv[1], "export"))) {
1604 else if ( (argc == 2) && (0 == strcmp(argv[1], "timezone_init"))) {
1606 //////////////////////////////////////////////////////////////////////////
1607 char* tz_path_zone_city = get_timezone_str();
1608 bool ret = get_city_name(tz_path_zone_city);
1610 printf(">>>>>> RESULT : %s \n", get_city_name_result());
1612 //////////////////////////////////////////////////////////////////////////
1617 ret = setting_cfg_create();