X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=setting-time%2Fsrc%2Fsetting-time-main.c;h=ba12d4f2333ae31aaf72178e145183d99cf81824;hb=6151ed4c66187a774b1d7786fe3fa3792d0216d4;hp=fec3b1073c8c96fcaf48bcfb674d55a4f2757770;hpb=c35af098e3c887695db0d7d503c3a2169ecfc394;p=apps%2Fcore%2Fpreloaded%2Fsettings.git diff --git a/setting-time/src/setting-time-main.c b/setting-time/src/setting-time-main.c index fec3b10..ba12d4f 100755 --- a/setting-time/src/setting-time-main.c +++ b/setting-time/src/setting-time-main.c @@ -29,6 +29,9 @@ #include #include +#include +#include + #include #include #include @@ -50,7 +53,7 @@ static bool get_city_name(char* tzname); static char* s_result; static int query_callback(void *NotUsed, int argc, char **argv, char **azColName); - +static bool setting_update_timezone(SettingTimeUG *ad); static int setting_time_main_create(void *cb); static int setting_time_main_destroy(void *cb); @@ -67,9 +70,15 @@ setting_view setting_view_time_main = { static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj, void *event_info); -#if TIME_CHANGED_HEYNOTY_CALLBACK -void time_changed_callback(void *data) +bool __update_timezone_idler(SettingTimeUG *ad) { + setting_update_timezone(ad); + ad->update_timezone_idler = NULL; + return 0; +} + +void time_changed_callback(keynode_t *key, void *data) { + SETTING_TRACE_DEBUG("time and timezone have been changed: TIME_CHANGED_HEYNOTY_CALLBACK"); SettingTimeUG *ad = (SettingTimeUG *)data; @@ -78,6 +87,7 @@ void time_changed_callback(void *data) SETTING_TRACE("FAIL: setting_time_update_db(ad)\n"); } + SETTING_TRACE("ad->is_datefield_selected:%d", ad->is_datefield_selected) if(EINA_TRUE == ad->is_datefield_selected) { /* Timezone is not changed and a selected value of the datefield is already changed */ SETTING_TRACE("Datefield is selected\n"); @@ -85,11 +95,9 @@ void time_changed_callback(void *data) } tzset(); - // vconfset to update timezone char pTZPath[__MAX_PATH_SIZE]; ssize_t nLen = readlink(SETTING_TZONE_SYMLINK_PATH, pTZPath, sizeof(pTZPath)-1); - if (nLen != -1) { pTZPath[nLen] = '\0'; } else { @@ -101,16 +109,25 @@ void time_changed_callback(void *data) SETTING_TRACE("__setting_set_city_tzone ERROR"); return; } - - setting_time_main_update(data); - char *timezone = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID); setting_retm_if(timezone == NULL, "get vonf failed"); - ICU_set_timezone(timezone); FREE(timezone); + + // update timezone + if (ad->update_timezone_idler) { + ecore_idler_del(ad->update_timezone_idler); + ad->update_timezone_idler = NULL; + } + ad->update_timezone_idler = + ecore_idler_add((Ecore_Task_Cb) __update_timezone_idler, ad); + // update time + if (ad->refresh_time_idler) { + ecore_idler_del(ad->refresh_time_idler); + ad->refresh_time_idler = NULL; + } + ad->refresh_time_idler = ecore_idler_add(setting_update_datefield, ad); } -#endif void setting_time_update_time_date_format_string(SettingTimeUG *ad) { @@ -193,12 +210,6 @@ bool setting_update_timezone(SettingTimeUG *ad) return 0; } -bool __update_timezone_idler(SettingTimeUG *ad) -{ - setting_update_timezone(ad); - ad->update_timezone_idler = NULL; - return 0; -} static void setting_time_main_int_vconf_change_cb(keynode_t *key, void *data) { @@ -310,7 +321,6 @@ static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj, /* local time -> gmtime */ time_t the_time = mktime(&_tm); /* represent local time */ - ad->changed_time = the_time; if ( (time(NULL)/ONE_MINUTE) == (the_time/ONE_MINUTE) ) { @@ -341,7 +351,7 @@ static void setting_time_main_datefield_change_cb(void *data, Evas_Object *obj, Eina_Bool __refresh_date_timer(void *data) { - SETTING_TRACE_BEGIN; + //SETTING_TRACE_BEGIN; SettingTimeUG *ad = data; if (ad->data_time) { time_t ctime = time(NULL); @@ -349,7 +359,13 @@ Eina_Bool __refresh_date_timer(void *data) struct tm *ts = localtime_r(&ctime, &ts_ret); retv_if(!ts, 1); - elm_datetime_value_set(ad->data_time->eo_check, &ts_ret); + struct tm ui_time; + elm_datetime_value_get(ad->data_time->eo_check, &ui_time); + if ( (ctime/ONE_MINUTE) != (mktime(&ui_time)/ONE_MINUTE) ) + { + SETTING_TRACE("To refresh the UI element after 1 minute passed.\t in %s", __FUNCTION__); + elm_datetime_value_set(ad->data_time->eo_check, &ts_ret); + } } return 1; } @@ -448,6 +464,50 @@ static void __setting_time_main_exp_cb(void *data, Evas_Object *obj, } } +/** + * layyout create - remove a conformant + */ +Evas_Object *setting_create_win_layout2(Evas_Object *win_layout, + Evas_Object *win_obj) +{ + Evas_Object *layout = NULL; + //Evas_Object *conform = elm_conformant_add(win_obj); + /* Base Layout */ + layout = elm_layout_add(win_obj); + setting_retvm_if(layout == NULL, FALSE, "layout == NULL"); + + elm_layout_theme_set(layout, "layout", "application", "default"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win_obj, layout); + //elm_win_resize_object_add(win_obj, conform); + //elm_object_content_set(conform, layout); + + Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list"); + elm_object_part_content_set(layout, "elm.swallow.bg", bg); + evas_object_show(layout); + //evas_object_show(conform); + return layout; +} + + + +Evas_Object *setting_create_layout_navi_bar2(Evas_Object *win_layout, Evas_Object *win_obj, char *title_str, char *lbutton_str, char *rbutton_str, char *mbutton_str, setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb, setting_call_back_func mbutton_click_cb, void *cb_data, Evas_Object *eo_view, /*any container obj constructed on any evas obj */ + Evas_Object **navi_bar, + Evas_Object **titleobj) +{ + + Evas_Object *layout = setting_create_win_layout2(win_layout, win_obj); + *navi_bar = setting_create_navi_bar(layout); + + setting_create_navi_bar_buttons(title_str, + lbutton_str, rbutton_str, mbutton_str, + lbutton_click_cb, rbutton_click_cb, + mbutton_click_cb, cb_data, eo_view /*content */ , + *navi_bar, NULL); + return layout; +} + static int setting_time_main_create(void *cb) { SETTING_TRACE_BEGIN; @@ -479,6 +539,7 @@ static int setting_time_main_create(void *cb) ad->caller = caller; if (ad->caller) { + /* for setup wizard */ char *lbtn_str = (char *)g_strdup(l_btn); bool same_flag = FALSE; if (0 == safeStrCmp(l_btn, _("IDS_COM_BODY_BACK"))) { @@ -486,7 +547,7 @@ static int setting_time_main_create(void *cb) same_flag = TRUE; } - Evas_Object *controllbar = NULL; + //Evas_Object *controllbar = NULL; scroller = elm_genlist_add(ad->win_main_layout); elm_object_style_set(scroller, "dialogue"); @@ -499,28 +560,50 @@ static int setting_time_main_create(void *cb) elm_genlist_clear(scroller); ad->ly_main = - setting_create_layout_navi_bar(ad->win_main_layout, + setting_create_layout_navi_bar2(ad->win_main_layout, ad->win_get, title, NULL, NULL, NULL, NULL, NULL, NULL, ad, scroller, &ad->navi_bar, - &controllbar); + NULL); + /* left button */ + Evas_Object *lbtn_obj = elm_button_add(ad->win_main_layout); + if(lbtn_obj == NULL) + return SETTING_DRAW_ERR_FAIL_SCROLLER; - elm_toolbar_item_append(controllbar, IMG_PREVIOUS, l_btn, l_button_cb, ad); - elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE); - elm_object_item_disabled_set(elm_toolbar_item_append(controllbar, NULL, "", NULL, NULL), EINA_TRUE); - elm_toolbar_item_append(controllbar, IMG_NEXT, r_btn, r_button_cb, ad); + Evas_Object *licon_obj = elm_icon_add(ad->win_main_layout); + if(licon_obj == NULL) + return SETTING_DRAW_ERR_FAIL_SCROLLER; + elm_icon_file_set(licon_obj, IMG_PREVIOUS, NULL); + + elm_object_style_set(lbtn_obj, "naviframe/toolbar/default"); + elm_object_text_set(lbtn_obj, l_btn); + elm_object_part_content_set(lbtn_obj, "elm.swallow.content", licon_obj); + evas_object_smart_callback_add(lbtn_obj, "clicked", l_button_cb, ad); - if (same_flag) { - setting_time_main_controlbar_lbtn_label_set(controllbar, - lbtn_str); - } - if (lbtn_str) { - G_FREE(lbtn_str); - } + /* right button */ + Evas_Object *rbtn_obj = elm_button_add(ad->win_main_layout); + if(rbtn_obj == NULL) + return SETTING_DRAW_ERR_FAIL_SCROLLER; + Evas_Object *ricon_obj = elm_icon_add(ad->win_main_layout); + if(ricon_obj == NULL) + return SETTING_DRAW_ERR_FAIL_SCROLLER; + elm_icon_file_set(ricon_obj, IMG_NEXT, NULL); + + elm_object_style_set(rbtn_obj, "naviframe/toolbar/default"); + elm_object_text_set(rbtn_obj, r_btn); + elm_object_part_content_set(rbtn_obj, "elm.swallow.content", ricon_obj); + evas_object_smart_callback_add(rbtn_obj, "clicked", r_button_cb, ad); + + Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar); + if(navi_it) + { + elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn_obj); + elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn_obj); + } } else { l_btn = _("IDS_COM_BODY_BACK"); title = _("IDS_ST_BODY_DATE_AND_TIME"); @@ -546,6 +629,57 @@ static int setting_time_main_create(void *cb) &err); bool auto_flag = value; + if(auto_flag) //do special process only when auto mode + { + //to read TAPI vconfs + int ret = 0; + int t_nitz = 0; + int t_offset = 0; + ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz); + ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset); + char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE); + if (ret == 0 && !isEmptyStr(tzpath)) + { + //1.to update timezone + char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1]; + safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4); + g_strlcat(tz_path, tzpath, sizeof(tz_path)); + SETTING_TRACE("full tz_path:%s", tz_path); + ret = sysman_set_timezone(tz_path); + if (ret < 0) { + SETTING_TRACE("tzpath is not valid."); + } else + SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path); + if (!__setting_set_city_tzone(tzpath)) { + SETTING_TRACE("__setting_set_city_tzone ERROR") + } + if (get_city_name(tzpath)) { + SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result()); + } + char* city = get_city_name_result(); + SETTING_TRACE("city:%s", city); + ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city); + + // 2.to set current time + int t_uptime = 0; + FILE *fp = fopen("/proc/uptime", "r"); + if (fp) { + if (!fscanf(fp, "%d", &t_uptime)) { + SETTING_TRACE_ERROR("fscanf error"); + } + fclose(fp); + fp = NULL; + } else { + SETTING_TRACE_ERROR("fopen error"); + } + + SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime); + time_t t_current = t_nitz + t_uptime - t_offset; + SETTING_TRACE("t_current:%d", t_current); + ret = sysman_set_datetime(t_current); + } + } + /* UI automatic */ if (!isEmulBin()) { ad->data_auto = @@ -569,7 +703,7 @@ static int setting_time_main_create(void *cb) ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); } - appcore_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH); + setting_set_i18n("worldclock", SETTING_TIME_SHARE_LOCAL_PATH); char time_zone_sub_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3] = { 0, }; char *pa_timezone = NULL; @@ -592,9 +726,13 @@ static int setting_time_main_create(void *cb) if (ret) { SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result()); } - char* cityname_id = get_city_name_result(); + char* cityname_id = _(get_city_name_result()); + SETTING_TRACE("cityname_id:%s", cityname_id); + if (cityname_id && 0 != safeStrCmp(cityname_id, "NULL")) + ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", cityname_id, _(str_buf)); + else + ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT +09", _("IDS_WCL_BODY_CITYNAME_SEOUL")); - ret = snprintf(time_zone_sub_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _(cityname_id), _(str_buf)); FREE(pa_city); FREE(pa_timezone); retv_if(ret < 0, 0); @@ -720,32 +858,7 @@ static int setting_time_main_create(void *cb) } setting_view_time_main.is_create = 1; - -#if TIME_CHANGED_HEYNOTY_CALLBACK - /* ---------------------------------------------------------------- */ - /* heynoti registration */ - /* ---------------------------------------------------------------- */ - ad->noti_fd = heynoti_init(); - - if (ad->noti_fd == -1) { - SETTING_TRACE("heynoti_init FAIL"); - return SETTING_RETURN_FAIL; - } else { - SETTING_TRACE("heynoti_init OK"); - } - - if (-1 == heynoti_subscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback, (void *)ad)) { - SETTING_TRACE("heynoti_subscribe FAIL"); - } else { - SETTING_TRACE("heynoti_subscribe OK"); - } - - if (-1 == heynoti_attach_handler(ad->noti_fd)) { - SETTING_TRACE("heynoti_attach_handler FAIL"); - } else { - SETTING_TRACE("heynoti_attach_handler OK"); - } -#endif + vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, time_changed_callback, (void *)ad); /* register vconf key to get event callback for converting 12/24H */ ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, @@ -773,16 +886,6 @@ static int setting_time_main_destroy(void *cb) SettingTimeUG *ad = (SettingTimeUG *) cb; -#if TIME_CHANGED_HEYNOTY_CALLBACK - /* Closing heynoti */ - if (ad->noti_fd != -1)//first need to check the fd validation - { - heynoti_unsubscribe(ad->noti_fd, SETTING_TIME_CHANGED, time_changed_callback); - //heynoti_detach_handler() will be done in heynoti_close(). - heynoti_close(ad->noti_fd); - ad->noti_fd = -1; - } -#endif if (ad->update_timer) { ecore_timer_del(ad->update_timer); ad->update_timer = NULL; @@ -803,6 +906,10 @@ static int setting_time_main_destroy(void *cb) ecore_idler_del(ad->refresh_time_idler); ad->refresh_time_idler = NULL; } + + vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, + time_changed_callback); + vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, setting_time_main_int_vconf_change_cb); vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATE_FORMAT_INT, @@ -916,6 +1023,7 @@ setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug, } else { SETTING_TRACE("tzpath : %s", tzpath ); } + SETTING_TRACE("city : %s", city ); /* --------------------------------------------------------------------- */ char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1]; @@ -942,7 +1050,8 @@ setting_time_main_launch_worldclock_result_ug_cb(ui_gadget_h ug, // update the display for timezone setting_update_timezone(ad); - heynoti_publish(SETTING_TIME_CHANGED); + static int t_event_val = -1; + vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val); SETTING_TRACE_END; } @@ -1029,7 +1138,13 @@ Eina_Bool setting_update_datefield(void *cb) retvm_if(cb == NULL, EINA_FALSE, "Data parameter is NULL"); SettingTimeUG *ad = (SettingTimeUG *) cb; - __refresh_date_timer(ad); + //__refresh_date_timer(ad); + if (ad->data_time) { + time_t ctime = time(NULL); + struct tm ts_ret; + struct tm *ts = localtime_r(&ctime, &ts_ret); + if (ts) elm_datetime_value_set(ad->data_time->eo_check, &ts_ret); + } ad->refresh_time_idler = NULL; return 0; } @@ -1127,6 +1242,85 @@ static void setting_time_reboot_resp_cb(void *data, Evas_Object *obj, ad->pop = NULL; } } +static void __time_auto_update(void *data) +{ + setting_retm_if(data == NULL, "Data parameter is NULL"); + SettingTimeUG *ad = (SettingTimeUG *) data; + int err; + setting_set_bool_slp_key(BOOL_SLP_SETTING_AUTOMATIC_TIME_UPDATE, + SETTING_ON_OFF_BTN_ON, &err); + if (ad->data_tz) { + setting_disable_genlist_item(ad->data_tz->item); + } + + if (ad->data_time) { + ad->data_time->isItemDisableFlag = FALSE; + setting_disable_evas_object(ad->data_time->eo_check); + setting_disable_genlist_item(ad->data_time->item); + } + + int ret = 0; + + int t_nitz = 0; + int t_offset = 0; + ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_GMT, &t_nitz); + ret += vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &t_offset); + char *tzpath = vconf_get_str(VCONFKEY_TELEPHONY_NITZ_ZONE); + if (ret != 0 || isEmptyStr(tzpath)) + { + setting_create_simple_popup(ad, ad->win_get, + NULL, _("TAPI doesn't support this sim card to update time automatically!")); + return; + } + ret = 0;//reset.. + + // a.time zone + SETTING_TRACE("tz_path:%s", tzpath); + + char tz_path[MAX_COMMON_BUFFER_LEN / 4 + 1]; + safeCopyStr(tz_path, SETTING_TIME_ZONEINFO_PATH, MAX_COMMON_BUFFER_LEN / 4); + g_strlcat(tz_path, tzpath, sizeof(tz_path)); + SETTING_TRACE("full tz_path:%s", tz_path); + ret = sysman_set_timezone(tz_path); + if (ret < 0) { + SETTING_TRACE("tzpath is not valid."); + return; + } else + SETTING_TRACE("sysman_set_timezone - successful : %s \n", tz_path); + if (!__setting_set_city_tzone(tzpath)) { + SETTING_TRACE("__setting_set_city_tzone ERROR") + return; + } + if (get_city_name(tzpath)) { + SETTING_TRACE(">>>>>> RESULT : %s", get_city_name_result()); + } + char* city = get_city_name_result(); + SETTING_TRACE("city:%s", city); + ret = vconf_set_str(VCONFKEY_SETAPPL_CITYNAME_INDEX_INT, city); + setting_retm_if(ret != 0, "set vconf failed"); + setting_update_timezone(ad); + + // b.TIME AND DATE + int t_uptime = 0; + FILE *fp = fopen("/proc/uptime", "r"); + fscanf(fp, "%d", &t_uptime); + SETTING_TRACE("t_nitz:%d, t_offset:%d, t_uptime:%d", t_nitz, t_offset, t_uptime); + time_t t_current = t_nitz + t_uptime - t_offset; + SETTING_TRACE("t_current:%d", t_current); + ret = sysman_set_datetime(t_current); + setting_retm_if(ret == -1, "sysman_set_datetime call failed"); + //ad->changed_time = t_current; + if (ad->data_time) { + struct tm ts_ret; + struct tm *ts = localtime_r(&t_current, &ts_ret); + ret_if(!ts); + elm_datetime_value_set(ad->data_time->eo_check, &ts_ret); + } + + // event notification + static int t_event_val = -1; + vconf_set_int (VCONFKEY_SYSTEM_TIME_CHANGED, t_event_val); +} static void setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info) @@ -1168,6 +1362,7 @@ setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info) } } else { +#if UN_SUPPORT_TIME_DYNAMIC_UPDATE ad->pop = setting_create_popup_with_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"), @@ -1176,11 +1371,12 @@ setting_time_main_chk_btn_cb(void *data, Evas_Object *obj, void *event_info) dgettext("sys_string", "IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL")); +#else + __time_auto_update(ad); +#endif } } } - - static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info) { @@ -1242,6 +1438,7 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * } } else { + #if UN_SUPPORT_TIME_DYNAMIC_UPDATE ad->pop = setting_create_popup_with_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_RESTART_PHONE_TO_USE_AUTOMATIC_UPDATE_Q"), @@ -1249,6 +1446,9 @@ static void setting_time_main_mouse_up_Gendial_list_cb(void *data, Evas_Object * 0, 2, dgettext("sys_string", "IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL")); + #else + __time_auto_update(ad); + #endif } } else if (!safeStrCmp("IDS_ST_BODY_TIME_FORMAT", list_item->keyStr) @@ -1383,7 +1583,6 @@ static void setting_time_main_controlbar_lbtn_label_set( */ static void get_gmt_offset(char *str_buf, int size) { - SETTING_TRACE(" before GMT processing : %s", str_buf); // timezone string +/- ex. +9, -1 time_t t = time(0); // get unix time. sec.