2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <vconf-keys.h>
19 #include <unicode/ucal.h>
20 #include <unicode/uloc.h>
21 #include <unicode/udat.h>
22 #include <unicode/ustring.h>
23 #include <unicode/udatpg.h>
24 #include <unicode/utmscale.h>
25 #include <unicode/ucol.h>
26 #include <package-manager.h>
27 #include <pkgmgr-info.h>
30 #include "setting-clock.h"
33 #include "setting_view_toast.h"
35 #include "setting_data_vconf.h"
37 static void _datetime_auto_sync_cb(void *data, Evas_Object *obj, void *event_info);
38 static void _datetime_date_cb(void *data, Evas_Object *obj, void *event_info);
39 static void _datetime_time_cb(void *data, Evas_Object *obj, void *event_info);
40 static char *get_timezone_str();
41 static UChar *uastrcpy(const char *chars);
42 static void ICU_set_timezone(const char *timezone);
44 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
45 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
46 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
47 static void _page_show(void *data, Evas *e, Evas_Object *obj, void *event_info);
49 static struct _clock_menu_item clock_menu_its[] = {
50 { "IDS_ST_BODY_CLOCK_TYPE_ABB", 1, _clock_type_cb },
51 #ifndef FEATURE_SETTING_SDK
52 { "IDS_ST_BODY_DATE_AND_TIME_ABB", 0, _dt_cb },
53 { "IDS_ST_BODY_HOURLY_ALERT_ABB", 0, _hourly_alert_cb },
57 static struct _dt_menu_item dt_menu_its[] = {
58 { "IDS_ST_BODY_AUTO_SYNC_ABB2", "IDS_ST_BODY_SYNC_WITH_PHONE_ABB", _datetime_auto_sync_cb },
59 { "IDS_ST_BODY_SET_DATE_ABB2", "", _datetime_date_cb },
60 { "IDS_SMEMO_BUTTON_SET_TIME_ABB", "", _datetime_time_cb },
63 static Elm_Object_Item *auto_sync_item = NULL;
64 static Elm_Object_Item *date_item = NULL;
65 static Elm_Object_Item *time_item = NULL;
66 static Evas_Object *g_date_time_genlist = NULL;
67 static Evas_Object *g_clock_genlist = NULL;
68 static Evas_Object *auto_sync_check = NULL;
69 static Evas_Object *g_clock_scroller = NULL;
70 static Evas_Object *g_clock_box = NULL;
71 /*pkgmgr_client *pc_clock = NULL; */
72 /*pkgmgr_client *pc_clock2 = NULL; */
73 static UCollator *coll = NULL;
75 static int clock_idx = 0;
76 static int is_alert_mode_type = 0;
77 static appdata *temp_ad = NULL;
79 static int _clock_type_compare_cb(const void *d1, const void *d2);
82 Evas_Object *_elm_min_set(Evas_Object *obj, Evas_Object *parent, Evas_Coord w, Evas_Coord h)
84 Evas_Object *table, *rect;
86 table = elm_table_add(parent);
88 rect = evas_object_rectangle_add(evas_object_evas_get(table));
89 evas_object_size_hint_min_set(rect, w, h);
90 evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
91 evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
92 elm_table_pack(table, rect, 0, 0, 1, 1);
93 evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
94 evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
95 elm_table_pack(table, obj, 0, 0, 1, 1);
100 static Clock_Type_Item *_get_selected_clock()
102 Clock_Type_Item *pitem = NULL;
107 pkgid = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE);
109 if (pkgid && strlen(pkgid)) {
110 Eina_List *list = NULL;
111 for (i = 0; i < 3; i++) {
112 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
114 if (!strcmp(pkgid, pitem->pkgid)) {
115 /*DBG("pkgid for selected idleclock is %s", pitem->pkgid); */
126 static void update_clock_list(void *data, Eina_Bool reload, Eina_Bool show)
131 ERR("appdata is null!!");
135 Evas_Object *page_layout = NULL;
136 Evas_Object *box = g_clock_box;
144 Clock_Type_Item *selected = _get_selected_clock();
145 Clock_Type_Item *pitem = NULL;
146 Eina_List *list = NULL;
148 for (i = 0; i < 3; i++) {
149 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
151 page_layout = elm_layout_add(box);
152 /*elm_layout_file_set(page_layout, EDJE_PATH, "setting/bg_thumbnail"); */
153 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
154 evas_object_size_hint_weight_set(page_layout, 0, 0);
155 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
156 evas_object_show(page_layout);
158 Evas_Object *clock_layout = elm_layout_add(page_layout);
159 elm_layout_file_set(clock_layout, EDJE_PATH, "setting-test/clock-type");
160 evas_object_size_hint_weight_set(clock_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
161 evas_object_size_hint_align_set(clock_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
162 evas_object_show(clock_layout);
164 /*clock bg wallpaper */
166 vconf_get_int("db/wms/home_bg_mode", &bg_mode);
168 char *bg_color = NULL;
169 int R = 0x00, G = 0x00, B = 0x00;
170 bg_color = vconf_get_str("db/wms/home_bg_palette");
171 colorstr_to_decimal(bg_color, &R, &G, &B);
172 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
173 Evas_Object *color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
174 evas_object_color_set(color_page, R, G, B, 255);
175 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
176 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
177 elm_object_part_content_set(clock_layout, "clock-color", color_page);
179 char *bg_wallpaper = NULL;
180 bg_wallpaper = vconf_get_str(VCONFKEY_BGSET);
181 Evas_Object *wall_page = elm_image_add(clock_layout);
182 elm_image_file_set(wall_page, bg_wallpaper, NULL);
183 evas_object_size_hint_weight_set(wall_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
184 evas_object_size_hint_align_set(wall_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
185 elm_object_part_content_set(clock_layout, "clock-wallpaper", wall_page);
189 Evas_Object *page = elm_image_add(clock_layout);
190 elm_image_file_set(page, pitem->icon, NULL);
191 evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
192 evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
195 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
196 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, (void *)pitem->pkgid);
197 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
199 elm_object_part_content_set(clock_layout, "clock-image", page);
200 if (pitem == selected) {
201 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
203 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
206 elm_object_part_content_set(page_layout, "elm.icon", clock_layout);
208 elm_box_pack_end(box, page_layout);
215 _page_show(NULL, NULL, g_clock_scroller, NULL);
219 static int _clock_appinfo_cb(pkgmgrinfo_appinfo_h handle, void *data)
224 ERR("appdata is null!!");
229 pkgmgrinfo_appinfo_h tmp_handle;
232 r = pkgmgrinfo_appinfo_get_appid(handle, &appid);
233 if (r < 0 || !appid) {
234 ERR("pkgmgrinfo_appinfo_get_appid error");
237 r = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
238 if (r != PMINFO_R_OK) {
239 ERR("pkgmgrinfo_appinfo_get_appinfo error");
243 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY, &clockapp);
244 if (r != PMINFO_R_OK) {
245 ERR("pkgmgrinfo_appinfo_is_category_exist error");
250 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY2, &clockapp);
251 if (r != PMINFO_R_OK) {
252 ERR("pkgmgrinfo_appinfo_is_category_exist error");
259 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
265 static int _clock_app_event_cb(int req_id, const char *pkg_type, const char *pkgid,
266 const char *key, const char *val, const void *pmsg, void *data)
271 ERR("appdata is null!!");
275 if (!pkgid || !key || !val) {
276 ERR("pkgid or key or val is null");
281 if (!strncmp(key, "end", 3) && !strncmp(val, "ok", 2)) {
282 DBG("end install/update for some pkgid");
284 pkgmgrinfo_pkginfo_h handle;
286 ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
287 if (ret != PMINFO_R_OK)
289 ret = pkgmgrinfo_appinfo_get_list(handle, PMINFO_UI_APP, _clock_appinfo_cb , data);
290 if (ret != PMINFO_R_OK) {
291 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
294 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
300 static int _clock_app_uninstall_event_cb(int req_id, const char *pkg_type, const char *pkgid,
301 const char *key, const char *val, const void *pmsg, void *data)
306 ERR("appdata is null!!");
310 if (!pkgid || !key || !val) {
311 ERR("pkgid or key or val is null");
316 if (!strncmp(key, "end", 3) && !strncmp(val, "ok", 2)) {
317 DBG("end uninstall for some pkgid");
318 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
323 static void update_clock_list_cb(keynode_t *key, void *data)
328 ERR("appdata is null!!");
333 vconf = vconf_keynode_get_name(key);
335 if (vconf && !strcmp(vconf, VCONFKEY_WMS_CLOCKS_SET_IDLE)) {
336 update_clock_list(ad, EINA_FALSE, EINA_TRUE);
338 update_clock_list(ad, EINA_FALSE, EINA_FALSE);
342 static int _clock_check_appinfo(void *data, char *appid)
347 ERR("appdata is null!!");
351 pkgmgrinfo_appinfo_h tmp_handle;
354 r = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
355 if (r != PMINFO_R_OK) {
356 ERR("pkgmgrinfo_appinfo_get_appinfo error");
360 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY, &clockapp);
361 if (r != PMINFO_R_OK) {
362 ERR("pkgmgrinfo_appinfo_is_category_exist error");
367 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY2, &clockapp);
368 if (r != PMINFO_R_OK) {
369 ERR("pkgmgrinfo_appinfo_is_category_exist error");
375 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
381 static void change_clock_app_state_cb(keynode_t *key, void *data)
386 ERR("appdata is null!!");
390 char appid[256] = {0, };
391 char type[7] = {0, };
395 value = vconf_get_str(VCONFKEY_AIL_INFO_STATE);
397 if (value && (strlen(value + 7) < 256)) {
398 strcpy(appid, value + 7);
399 strncpy(type, value, 6);
401 if (!strncmp(type, "delete", 6)) {
402 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
403 } else if (!strncmp(type, "create", 6) || !strncmp(type, "update", 6)) {
404 _clock_check_appinfo(ad, appid);
409 void initialize_clock(void *data)
414 ERR("appdata is null!!");
417 UErrorCode status = U_ZERO_ERROR;
422 const char *lang = vconf_get_str(VCONFKEY_LANGSET);
423 coll = ucol_open(lang, &status);
425 int event_type = PMINFO_CLIENT_STATUS_INSTALL | PMINFO_CLIENT_STATUS_UPGRADE;
429 pkgmgr_client_free(pc_clock);
434 ad->pc_clock = pkgmgr_client_new(PMINFO_LISTENING);
435 pkgmgr_client_set_status_type(ad->pc_clock, event_type);
436 pkgmgr_client_listen_status(ad->pc_clock, _clock_app_event_cb, ad);
439 int event_type2 = PMINFO_CLIENT_STATUS_UNINSTALL;
442 pkgmgr_client_free(pc_clock2);
446 if (!ad->pc_clock2) {
447 ad->pc_clock2 = pkgmgr_client_new(PC_LISTENING);
448 pkgmgr_client_set_status_type(ad->pc_clock2, event_type2);
449 pkgmgr_client_listen_status(ad->pc_clock2, _clock_app_uninstall_event_cb, ad);
455 register_vconf_changing("db/wms/home_bg_mode", update_clock_list_cb, ad);
456 register_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb, ad);
457 register_vconf_changing(VCONFKEY_AIL_INFO_STATE, change_clock_app_state_cb, ad);
460 void _clear_clock_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
462 auto_sync_item = NULL;
465 g_date_time_genlist = NULL;
466 g_clock_genlist = NULL;
468 g_clock_scroller = NULL;
471 is_alert_mode_type = 0;
475 pkgmgr_client_free(pc_clock);
479 pkgmgr_client_free(pc_clock2);
488 _clocklist_destroy();
490 unregister_vconf_changing("db/wms/home_bg_mode", update_clock_list_cb);
491 unregister_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb);
492 unregister_vconf_changing(VCONFKEY_AIL_INFO_STATE, change_clock_app_state_cb);
494 is_running_clock = 0;
497 static void _layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
499 clock_page_data *pd = data;
503 ret = feedback_deinitialize();
504 if (ret != FEEDBACK_ERROR_NONE) {
505 DBG("feedback_deinitialize failed");
509 static Eina_Bool animator_cb(void *data)
511 clock_page_data *pd = (clock_page_data *)data;
513 elm_mapbuf_enabled_set(pd->mapbuf[0], EINA_TRUE);
515 return ECORE_CALLBACK_CANCEL;
518 static int _set_clock_type(char *pkgid)
520 if (!pkgid || !strlen(pkgid)) {
521 ERR("pkgid is NULL");
524 unregister_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb);
525 vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, pkgid);
526 /*DBG("Setting - package name: %s", pkgid); */
531 static int prev_x = 0;
532 static int touch_mode = NONE;
534 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
536 touch_mode = TOUCH_DOWN;
538 Evas_Event_Mouse_Down *ev = event_info;
539 prev_x = ev->canvas.x;
542 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
544 if (touch_mode == TOUCH_MOVE)
547 char *pkgid = (char *)data;
552 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
555 if (_set_clock_type(pkgid)) {
556 if (temp_ad != NULL) {
557 elm_naviframe_item_pop(temp_ad->nf);
560 /* automatic freed!! */
561 struct _toast_data *toast = _create_toast(temp_ad, _("IDS_ST_TPOP_CLOCK_CHANGED"));
563 _show_toast(temp_ad, toast);
566 if (g_clock_genlist) {
567 elm_genlist_realized_items_update(g_clock_genlist);
570 DBG("Setting - Clock type is wrong!!");
575 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
577 Evas_Event_Mouse_Move *ev = event_info;
579 int cur_x = ev->cur.canvas.x;
580 if (abs(cur_x - prev_x) > 15) {
581 /* todo : confirm and remove */
582 touch_mode = TOUCH_MOVE;
586 static void _page_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
590 Clock_Type_Item *pitem = _get_selected_clock();
594 DBG("name : %s, index : %d", pitem->name, pitem->index);
598 elm_scroller_region_get(obj, NULL, NULL, &w, &h);
599 printf("%d %d\n", w, h);
601 elm_scroller_page_show(obj, page, 0);
604 static Evas_Object *_create_index(Evas_Object *parent)
606 Evas_Object *layout, *scroller, *box, *page_layout, *mapbuf, *table;
607 Evas_Coord w = 0, h = 0;
613 layout = elm_layout_add(parent);
617 clock_page_data *pd = calloc(1, sizeof(clock_page_data));
621 /*elm_layout_file_set(layout, EDJE_PATH, "setting-test/index"); */
622 elm_layout_file_set(layout, EDJE_PATH, "scroller_custom_layout");
623 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
624 elm_object_part_text_set(layout, "clock.text22", _get_selected_clock()->name);
626 evas_object_show(layout);
627 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
629 /* Create Scroller */
630 scroller = elm_scroller_add(layout);
631 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
632 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
633 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
634 elm_scroller_page_relative_set(scroller, 1.0, 0.0);
635 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
636 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
637 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
638 elm_object_part_content_set(layout, "scroller", scroller);
639 elm_object_style_set(scroller, "effect");
640 evas_object_show(scroller);
641 g_clock_scroller = scroller;
644 box = elm_box_add(scroller);
645 elm_box_horizontal_set(box, EINA_TRUE);
646 elm_object_content_set(scroller, box);
647 evas_object_show(box);
650 Clock_Type_Item *selected = _get_selected_clock();
651 Clock_Type_Item *pitem = NULL;
652 Eina_List *list = NULL;
654 for (i = 0; i < 3; i++) {
655 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
657 page_layout = elm_layout_add(box);
658 /*elm_layout_file_set(page_layout, EDJE_PATH, "setting/bg_thumbnail"); */
659 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
660 evas_object_size_hint_weight_set(page_layout, 0, 0);
661 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
662 evas_object_show(page_layout);
664 Evas_Object *clock_layout = elm_layout_add(page_layout);
665 elm_layout_file_set(clock_layout, EDJE_PATH, "setting-test/clock-type");
666 evas_object_size_hint_weight_set(clock_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
667 evas_object_size_hint_align_set(clock_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
669 evas_object_show(clock_layout);
671 /*clock bg wallpaper */
673 vconf_get_int("db/wms/home_bg_mode", &bg_mode);
675 char *bg_color = NULL;
676 int R = 0x00, G = 0x00, B = 0x00;
677 bg_color = vconf_get_str("db/wms/home_bg_palette");
678 colorstr_to_decimal(bg_color, &R, &G, &B);
679 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
680 Evas_Object *color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
681 evas_object_color_set(color_page, R, G, B, 255);
682 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
683 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
684 elm_object_part_content_set(clock_layout, "clock-color", color_page);
686 char *bg_wallpaper = NULL;
687 bg_wallpaper = vconf_get_str(VCONFKEY_BGSET);
688 Evas_Object *wall_page = elm_image_add(clock_layout);
689 elm_image_file_set(wall_page, bg_wallpaper, NULL);
690 evas_object_size_hint_weight_set(wall_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
691 evas_object_size_hint_align_set(wall_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
692 elm_object_part_content_set(clock_layout, "clock-wallpaper", wall_page);
696 Evas_Object *page = elm_image_add(clock_layout);
697 elm_image_file_set(page, pitem->icon, NULL);
698 evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
699 evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
702 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
703 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, (void *)pitem->pkgid);
704 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
706 elm_object_part_content_set(clock_layout, "clock-image", page);
707 if (pitem == selected) {
708 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
710 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
713 elm_object_part_content_set(page_layout, "elm.icon", clock_layout);
716 /* mapbuf for page 1 */
717 mapbuf = elm_mapbuf_add(box);
718 evas_object_size_hint_weight_set(mapbuf, 0, 0);
719 evas_object_size_hint_align_set(mapbuf, 0, EVAS_HINT_FILL);
720 evas_object_show(mapbuf);
721 elm_object_content_set(mapbuf, page_layout);
722 pd->mapbuf[pitem->index] = mapbuf;
724 elm_win_screen_size_get(elm_widget_top_get(parent), NULL, NULL, &w, &h);
725 table = _elm_min_set(page_layout, box, w, h);
726 evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
727 evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
728 evas_object_show(table);
729 elm_box_pack_end(box, table);
733 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _page_show, NULL);
736 ret = feedback_initialize();
737 if (ret != FEEDBACK_ERROR_NONE) {
738 DBG("feedback_initialize failed");
741 /*ecore_animator_add(animator_cb, pd); */
746 static int _category_app_list_cb(pkgmgrinfo_appinfo_h handle, void *user_data)
754 char *m_value = NULL;
755 int type = CLOCKTYPE_INVALID;
757 pkgmgrinfo_appinfo_h tmp_handle;
759 ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
761 if (ret < 0 || !appid) {
762 ERR("pkgmgrinfo_appinfo_get_appid error");
765 ret = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
766 if (ret != PMINFO_R_OK) {
767 ERR("pkgmgrinfo_appinfo_get_appinfo error");
770 ret = pkgmgrinfo_appinfo_get_pkgid(tmp_handle, &pkgid);
771 if (ret != PMINFO_R_OK) {
772 ERR("pkgmgrinfo_appinfo_get_pkgid error");
773 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
776 ret = pkgmgrinfo_appinfo_get_label(tmp_handle, &name);
777 if (ret != PMINFO_R_OK) {
778 INFO("pkgmgrinfo_appinfo_get_label error");
779 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
781 ret = pkgmgrinfo_appinfo_get_icon(tmp_handle, &icon);
782 if (ret != PMINFO_R_OK) {
783 INFO("pkgmgrinfo_appinfo_get_icon error");
784 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
786 ret = pkgmgrinfo_appinfo_is_preload(tmp_handle, &preload);
787 if (ret != PMINFO_R_OK) {
788 INFO("pkgmgrinfo_appinfo_is_preload error or 3rd party");
790 ret = pkgmgrinfo_appinfo_get_metadata_value(tmp_handle, "clocktype", &m_value);
791 if (ret != PMINFO_R_OK) {
792 INFO("pkgmgrinfo_appinfo_get_metadata_value error or 3rd party");
795 Clock_Type_Item *pitem = NULL;
796 pitem = (Clock_Type_Item *)calloc(1, sizeof(Clock_Type_Item));
797 setting_retvm_if(NULL == pitem, SETTING_RETURN_FAIL, "pitem is NULL");
798 memset(pitem, 0x0, sizeof(Clock_Type_Item));
800 pitem->appid = strdup(appid);
801 pitem->pkgid = strdup(pkgid);
802 pitem->name = strdup(name);
803 pitem->icon = strdup(icon);
805 if (m_value && strlen(m_value) > 0) {
806 if (!strcmp(m_value, "function")) {
807 type = CLOCKTYPE_FUNCTION;
808 } else if (!strcmp(m_value, "style")) {
809 type = CLOCKTYPE_STYLE;
812 type = CLOCKTYPE_3RD;
817 case CLOCKTYPE_FUNCTION:
818 g_clock_list[0] = eina_list_sorted_insert(g_clock_list[0], _clock_type_compare_cb, pitem);
820 case CLOCKTYPE_STYLE:
821 g_clock_list[1] = eina_list_sorted_insert(g_clock_list[1], _clock_type_compare_cb, pitem);
824 g_clock_list[2] = eina_list_sorted_insert(g_clock_list[2], _clock_type_compare_cb, pitem);
827 g_clock_list[2] = eina_list_sorted_insert(g_clock_list[2], _clock_type_compare_cb, pitem);
831 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
835 Evas_Object *_clock_type_cb(void *data)
837 /*elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); */
840 Evas_Object *layout_inner = NULL;
841 Elm_Object_Item *it = NULL;
843 ad = (appdata *)data;
849 layout_inner = _create_index(ad->nf);
850 /*it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL); */
851 /*elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE); */
856 void _hourly_alert_cb(void *data, Evas_Object *obj, void *event_info)
858 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
860 _show_hourly_alert_list(data);
863 static char *_date_format_get()
868 char *date_fmt[] = { "%d%m%Y", "%m%d%Y", "%Y%m%d", "%Y%d%m" };
870 ret = vconf_get_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, &date_val);
872 return strdup(date_fmt[date_val]);
875 static char *_time_format_get()
880 char *time_fmt[] = { "%d%m%Y%I:%M%p", "%d%m%Y%H:%M" };
882 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
886 else if (time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
887 is_hour24 = time_val - 1;
889 return strdup(time_fmt[is_hour24]);
892 static char *_datetime_format_get()
894 char *dt_fmt, *region_fmt, *lang, *temp_fmt = NULL;
895 char buf[256] = {0,};
896 int time_val = 0, is_hour24 = 0, ret;
898 lang = getenv("LANGUAGE");
899 setenv("LANGUAGE", "en_US", 1);
901 temp_fmt = vconf_get_str(VCONFKEY_REGIONFORMAT);
903 DBG("Setting - %s", temp_fmt);
905 region_fmt = replace(temp_fmt, "utf8", "UTF-8");
907 DBG("Setting - %s", region_fmt);
909 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
912 else if (time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
913 is_hour24 = time_val - 1;
916 snprintf(buf, sizeof(buf), "%s_DTFMT_24HR", region_fmt);
918 snprintf(buf, sizeof(buf), "%s_DTFMT_12HR", region_fmt);
920 dt_fmt = dgettext("dt_fmt", buf);
922 if (!lang || !strcmp(lang, ""))
923 unsetenv("LANGUAGE");
925 setenv("LANGUAGE", lang, 1);
927 return strdup(dt_fmt);
930 static void _vconf_date_format_changed_cb(keynode_t *node, void *data)
932 ICU_set_timezone(get_timezone_str());
933 Evas_Object *datetime = (Evas_Object *) data;
934 char *dt_fmt = _date_format_get();
935 elm_datetime_format_set(datetime, dt_fmt);
939 static void _vconf_time_format_changed_cb(keynode_t *node, void *data)
941 ICU_set_timezone(get_timezone_str());
942 Evas_Object *datetime = (Evas_Object *) data;
943 char *dt_fmt = _time_format_get();
944 elm_datetime_format_set(datetime, dt_fmt);
948 static void _vconf_datetime_format_changed_cb(keynode_t *node, void *data)
950 Evas_Object *datetime = (Evas_Object *) data;
951 char *dt_fmt = _datetime_format_get();
952 elm_datetime_format_set(datetime, dt_fmt);
956 static Eina_Bool _clear_date_changed_cb(void *data, Elm_Object_Item *it)
958 unregister_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, _vconf_date_format_changed_cb);
959 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb);
964 static Eina_Bool _clear_time_changed_cb(void *data, Elm_Object_Item *it)
966 unregister_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_time_format_changed_cb);
967 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb);
972 static Evas_Object *_create_scroller(Evas_Object *parent)
974 Evas_Object *scroller = elm_scroller_add(parent);
975 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
976 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
977 evas_object_show(scroller);
982 void _dt_cb(void *data, Evas_Object *obj, void *event_info)
984 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
986 _show_date_and_time_list(data);
989 char *_gl_clock_title_get(void *data, Evas_Object *obj, const char *part)
991 char buf[1024] = {0, };
992 Item_Data *id = data;
993 int index = id->index;
995 if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
996 snprintf(buf, sizeof(buf) - 1, "%s", _(clock_menu_its[index % 3].name));
997 } else if (!strcmp(part, "elm.text.2")) {
999 Clock_Type_Item *selected_clock = _get_selected_clock();
1000 if (selected_clock) {
1001 snprintf(buf, sizeof(buf) - 1, "%s", selected_clock->name);
1003 } else if (index == 1) {
1005 } else if (index == 2) {
1006 char *_houly_alert_str[] = { "IDS_ST_BODY_OFF_M_STATUS", "IDS_ST_BODY_ON_M_STATUS" };
1008 vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &clock_menu_its[index % 3].type_num);
1009 snprintf(buf, sizeof(buf) - 1, "%s", _(_houly_alert_str[clock_menu_its[index % 3].type_num]));
1016 static void _clock_gl_del(void *data, Evas_Object *obj)
1018 Item_Data *id = data;
1023 Evas_Object *_create_clock_list(void *data)
1027 DBG("%s", "_create_clock_list - appdata is null");
1030 Evas_Object *genlist = NULL;
1031 Elm_Genlist_Item_Class *itc_tmp;
1032 struct _clock_menu_item *menu_its = NULL;
1035 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1036 itc->item_style = "2text";
1037 itc->func.text_get = _gl_clock_title_get;
1038 itc->func.del = _clock_gl_del;
1040 Elm_Genlist_Item_Class *itc_date_time = elm_genlist_item_class_new();
1041 itc_date_time->item_style = "1text";
1042 itc_date_time->func.text_get = _gl_clock_title_get;
1043 itc_date_time->func.del = _clock_gl_del;
1045 Evas_Object *layout = elm_layout_add(ad->nf);
1046 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1047 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1049 genlist = elm_genlist_add(layout);
1050 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1052 menu_its = clock_menu_its;
1055 count = sizeof(clock_menu_its) / sizeof(clock_menu_its[0]);
1056 for (idx = 0; idx < count; idx++) {
1058 itc_tmp = itc_date_time;
1063 Item_Data *id = calloc(sizeof(Item_Data), 1);
1066 id->item = elm_genlist_item_append(
1067 genlist, /* genlist object */
1068 itc_tmp, /* item class */
1071 ELM_GENLIST_ITEM_NONE,
1072 menu_its[idx].func, /* call back */
1076 elm_genlist_item_class_free(itc);
1077 elm_genlist_item_class_free(itc_date_time);
1079 g_clock_genlist = genlist;
1081 elm_object_part_content_set(layout, "elm.genlist", genlist);
1086 char *_get_str_from_icu(const char *pattern)
1088 char *locale_tmp = vconf_get_str(VCONFKEY_REGIONFORMAT);
1089 char locale[32] = {0,};
1092 if (strlen(locale_tmp) < 32)
1093 strcpy(locale, locale_tmp);
1095 if (locale[0] != '\0') {
1096 p = strstr(locale, ".UTF-8");
1102 char *ret_str = NULL;
1103 UChar Pattern[256] = { 0, };
1104 UErrorCode status = U_ZERO_ERROR;
1105 UDateFormat *formatter = NULL;
1107 UChar formatted[256] = { 0, };
1108 char formattedString[256] = { 0, };
1110 u_uastrncpy(Pattern, pattern, strlen(pattern));
1112 UDate date = ucal_getNow();
1114 udat_open(UDAT_IGNORE, UDAT_IGNORE, locale_tmp, NULL, -1, Pattern, -1, &status);
1115 int32_t formattedCapacity = (int32_t)(sizeof(formatted) / sizeof((formatted)[0]));
1116 (void)udat_format(formatter, date, formatted, formattedCapacity, NULL, &status);
1117 u_austrcpy(formattedString, formatted);
1118 DBG("str from icu is %s", formattedString);
1120 udat_close(formatter);
1122 ret_str = strdup(formattedString);
1126 char *_get_date_str()
1131 char *date_fmt[] = { "dd/MM/y", "MM/dd/y", "y/MM/dd", "y/dd/MM" };
1133 ret = vconf_get_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, &date_val);
1135 return _get_str_from_icu(date_fmt[date_val]);
1138 char *_get_time_str()
1143 char *time_fmt[] = { "hh:mm a", "HH:mm" };
1145 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
1149 else if (time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
1150 is_hour24 = time_val - 1;
1152 return _get_str_from_icu(time_fmt[is_hour24]);
1155 char *_gl_date_and_time_title_get(void *data, Evas_Object *obj, const char *part)
1157 char buf[1024] = {0,};
1158 Item_Data *id = data;
1159 int index = id->index;
1161 char expression[32];
1162 int auto_update = 0;
1163 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &auto_update);
1165 if (!strcmp(part, "elm.text.1")) {
1167 snprintf(buf, sizeof(buf) - 1, "%s", _(dt_menu_its[index % 3].name));
1170 strcpy(expression, "<font color=#515151>%s</font>");
1172 strcpy(expression, "%s");
1174 snprintf(buf, sizeof(buf) - 1, expression, _(dt_menu_its[index % 3].name));
1176 } else if (!strcmp(part, "elm.text.2")) {
1178 snprintf(buf, sizeof(buf) - 1, "%s", _(dt_menu_its[index % 3].date_or_time));
1181 strcpy(expression, "<font color=#515151>%s</font>");
1183 strcpy(expression, "%s");
1186 if (index == 1) { /* Date */
1187 char *date_buf = NULL;
1188 date_buf = _get_date_str();
1189 snprintf(buf, sizeof(buf) - 1, expression, date_buf);
1191 } else if (index == 2) { /* Time */
1192 char *time_buf = NULL;
1193 time_buf = _get_time_str();
1194 snprintf(buf, sizeof(buf) - 1, expression, time_buf);
1203 static Evas_Object *_gl_dt_auto_sync_check_get(void *data, Evas_Object *obj, const char *part)
1205 Evas_Object *check = NULL;
1207 int is_auto_update = 0;
1209 DT_Item_Data *id = data;
1210 int index = id->index;
1212 if (!strcmp(part, "elm.icon")) {
1214 check = elm_check_add(obj);
1215 if (vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_update) < 0) {
1216 DBG("Setting - auto time update's vconf get fail");
1218 elm_check_state_set(check, (is_auto_update) ? EINA_TRUE : EINA_FALSE);
1219 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1220 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1222 auto_sync_check = check;
1230 static void _dt_gl_del(void *data, Evas_Object *obj)
1232 DT_Item_Data *id = data;
1236 auto_sync_check = NULL;
1237 auto_sync_item = NULL;
1242 static void change_datetime_format_cb(keynode_t *key, void *data)
1246 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
1250 DBG("Setting - time_format : %d", time_val);
1251 ICU_set_timezone(get_timezone_str());
1253 int is_auto_sync = 0;
1254 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1257 elm_genlist_item_update(date_item);
1258 /*elm_object_item_disabled_set(date_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE ); */
1261 elm_genlist_item_update(time_item);
1262 /*elm_object_item_disabled_set(time_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE ); */
1266 static Eina_Bool _clear_datetime_changed_cb(void *data, Elm_Object_Item *it)
1268 unregister_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, change_datetime_format_cb);
1269 unregister_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, change_datetime_format_cb);
1270 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, change_datetime_format_cb);
1275 void _show_date_and_time_list(void *data)
1279 DBG("%s", "_create_dt_list - appdata is null");
1282 Evas_Object *genlist = NULL;
1283 Evas_Object *layout = NULL;
1284 Elm_Object_Item *nf_it = NULL;
1285 struct _dt_menu_item *menu_its = NULL;
1289 ICU_set_timezone(get_timezone_str());
1291 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &auto_sync);
1293 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1294 itc->item_style = "2text.1icon.1";
1295 itc->func.text_get = _gl_date_and_time_title_get;
1296 itc->func.content_get = _gl_dt_auto_sync_check_get;
1297 itc->func.del = _dt_gl_del;
1299 layout = elm_layout_add(ad->nf);
1300 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1301 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1303 genlist = elm_genlist_add(layout);
1304 elm_genlist_block_count_set(genlist, 14);
1305 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1306 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1308 menu_its = dt_menu_its;
1310 for (idx = 0; idx < CLOCK_DATE_AND_TIME_COUNT; idx++) {
1311 DT_Item_Data *id = calloc(sizeof(DT_Item_Data), 1);
1314 id->item = elm_genlist_item_append(
1315 genlist, /* genlist object */
1316 itc, /* item class */
1319 ELM_GENLIST_ITEM_NONE,
1320 menu_its[idx].func, /* call back */
1325 auto_sync_item = id->item;
1328 date_item = id->item;
1331 time_item = id->item;
1336 elm_genlist_item_class_free(itc);
1338 g_date_time_genlist = genlist;
1340 elm_object_part_content_set(layout, "elm.genlist", genlist);
1342 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
1343 elm_naviframe_item_pop_cb_set(nf_it, _clear_datetime_changed_cb, ad);
1344 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1346 /* time format changing cb */
1347 register_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, change_datetime_format_cb, NULL);
1348 register_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, change_datetime_format_cb, NULL);
1349 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, change_datetime_format_cb, NULL);
1352 static void _set_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1354 if (!data || !obj) return;
1359 elm_datetime_value_get(ad->datetime, &currtime);
1361 currtime.tm_isdst = -1;
1362 currtime.tm_sec = 0;
1364 time_t t = mktime(&currtime);
1366 int ret = deviced_set_datetime(t);
1368 elm_naviframe_item_pop(ad->nf);
1370 /* automatic freed!! */
1371 Toast_Data *toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGING_TIME_AND_DATE_SETTINGS_MAY_AFFECT_SOME_FUNCTIONS"));
1373 _show_toast(ad, toast);
1376 if (g_date_time_genlist) {
1377 elm_genlist_realized_items_update(g_date_time_genlist);
1381 static void _cancle_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1388 elm_naviframe_item_pop(ad->nf);
1390 if (ad->dt_genlist_item_of_time != NULL) {
1391 elm_genlist_item_update(ad->dt_genlist_item_of_time);
1394 if (ad->dt_genlist_item_of_date != NULL) {
1395 elm_genlist_item_update(ad->dt_genlist_item_of_date);
1399 static void _datetime_auto_sync_cb(void *data, Evas_Object *obj, void *event_info)
1401 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1403 int is_auto_sync = 0;
1405 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1407 is_auto_sync = !is_auto_sync;
1409 vconf_set_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, is_auto_sync);
1411 DBG("Setting - Auto sync : %s", is_auto_sync ? "TRUE" : "FALSE");
1413 if (auto_sync_check) {
1414 elm_check_state_set(auto_sync_check, (is_auto_sync) ? EINA_TRUE : EINA_FALSE);
1418 elm_genlist_item_update(date_item);
1419 /*elm_object_item_disabled_set(date_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE ); */
1422 elm_genlist_item_update(time_item);
1423 /*elm_object_item_disabled_set(time_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE ); */
1427 static void _datetime_date_cb(void *data, Evas_Object *obj, void *event_info)
1429 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1431 int is_auto_sync = 0;
1432 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1437 Evas_Object *scroller;
1438 Evas_Object *layout, *btn;
1439 Evas_Object *datetime, *datetime_field, *datetime_button;
1440 Elm_Object_Item *it;
1442 appdata *ad = (appdata *)data;
1447 ad->dt_genlist_item_of_date = (Elm_Object_Item *)event_info;
1449 scroller = _create_scroller(ad->nf);
1450 evas_object_data_set(scroller, "appdata", ad);
1452 layout = elm_layout_add(scroller);
1453 elm_layout_file_set(layout, EDJE_PATH, "setting-test/datetime");
1454 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1456 datetime = elm_datetime_add(layout);
1457 elm_object_style_set(datetime, "datepicker_layout");
1458 elm_object_part_content_set(layout, "content", datetime);
1460 ad->datetime = datetime;
1463 dt_fmt = _date_format_get();
1464 elm_datetime_format_set(datetime, dt_fmt);
1466 register_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, _vconf_date_format_changed_cb, datetime);
1467 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb, datetime);
1470 btn = elm_button_add(layout);
1471 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL_ABB2"));
1472 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1473 elm_object_part_content_set(layout, "btn1", btn);
1474 evas_object_smart_callback_add(btn, "clicked", _cancle_clicked_cb, ad);
1476 btn = elm_button_add(layout);
1477 elm_object_text_set(btn, _("IDS_COM_SK_SET_ABB"));
1478 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1479 elm_object_part_content_set(layout, "btn2", btn);
1480 evas_object_smart_callback_add(btn, "clicked", _set_clicked_cb, ad);
1482 elm_object_content_set(scroller, layout);
1484 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, scroller, NULL);
1485 elm_naviframe_item_pop_cb_set(it, _clear_date_changed_cb, ad);
1486 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1489 static void _datetime_time_cb(void *data, Evas_Object *obj, void *event_info)
1491 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1493 int is_auto_sync = 0;
1494 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1499 Evas_Object *scroller;
1500 Evas_Object *layout, *btn;
1501 Evas_Object *datetime, *datetime_field, *datetime_button;
1502 Evas_Object *radio, *rdg;
1503 Elm_Object_Item *it;
1505 appdata *ad = (appdata *)data;
1510 ad->dt_genlist_item_of_time = (Elm_Object_Item *)event_info;
1512 scroller = _create_scroller(ad->nf);
1513 evas_object_data_set(scroller, "appdata", ad);
1515 layout = elm_layout_add(scroller);
1516 elm_layout_file_set(layout, EDJE_PATH, "setting-test/datetime");
1517 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1519 datetime = elm_datetime_add(layout);
1520 elm_object_style_set(datetime, "timepicker_layout");
1521 elm_object_part_content_set(layout, "content", datetime);
1523 ad->datetime = datetime;
1526 dt_fmt = _time_format_get();
1527 elm_datetime_format_set(datetime, dt_fmt);
1528 DBG("datetime time format : %s", dt_fmt);
1530 register_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_time_format_changed_cb, datetime);
1531 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_time_format_changed_cb, datetime);
1534 btn = elm_button_add(layout);
1535 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL_ABB2"));
1536 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1537 elm_object_part_content_set(layout, "btn1", btn);
1538 evas_object_smart_callback_add(btn, "clicked", _cancle_clicked_cb, ad);
1540 btn = elm_button_add(layout);
1541 elm_object_text_set(btn, _("IDS_COM_SK_SET_ABB"));
1542 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1543 elm_object_part_content_set(layout, "btn2", btn);
1544 evas_object_smart_callback_add(btn, "clicked", _set_clicked_cb, ad);
1546 elm_object_content_set(scroller, layout);
1548 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, scroller, NULL);
1549 elm_naviframe_item_pop_cb_set(it, _clear_time_changed_cb, ad);
1550 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1553 static void _alert_gl_del(void *data, Evas_Object *obj)
1555 Alert_Item_Data *id = data;
1560 char *_gl_alert_title_get(void *data, Evas_Object *obj, const char *part)
1562 char buf[1024] = {0,};
1563 Alert_Item_Data *id = data;
1564 int index = id->index;
1566 char *temps[] = { "IDS_ST_BODY_ON_M_STATUS", "IDS_ST_BODY_OFF_M_STATUS" };
1568 if (!strcmp(part, "elm.text")) {
1569 snprintf(buf, sizeof(buf) - 1, "%s", _(temps[index]));
1575 Evas_Object *_gl_alert_ridio_get(void *data, Evas_Object *obj, const char *part)
1577 Evas_Object *radio = NULL;
1578 Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
1579 Alert_Item_Data *id = data;
1580 int index = id->index;
1582 if (!strcmp(part, "elm.icon")) {
1583 radio = elm_radio_add(obj);
1584 elm_radio_state_value_set(radio, id->index);
1585 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
1586 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1587 elm_radio_group_add(radio, radio_main);
1590 vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &is_alert_mode_type);
1592 is_alert_mode_type = !is_alert_mode_type;
1594 if (is_alert_mode_type == id->index) {
1595 elm_radio_value_set(radio_main, is_alert_mode_type);
1603 static void _hourly_gl_cb(void *data, Evas_Object *obj, void *event_info)
1605 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1607 is_alert_mode_type = (int)data;
1609 elm_naviframe_item_pop(temp_ad->nf);
1610 if (!temp_ad->alert_rdg) {
1611 evas_object_del(temp_ad->alert_rdg);
1612 temp_ad->alert_rdg = NULL;
1616 clock_menu_its[2].type_num = is_alert_mode_type;
1617 vconf_set_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, !is_alert_mode_type);
1619 if (g_clock_genlist) {
1620 elm_genlist_realized_items_update(g_clock_genlist);
1626 void _show_hourly_alert_list(void *data)
1630 DBG("%s", "_create_alert_list - appdata is null");
1633 Evas_Object *genlist = NULL;
1634 Elm_Object_Item *nf_it = NULL;
1638 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1639 itc->item_style = "1text.1icon.1";
1640 itc->func.text_get = _gl_alert_title_get;
1641 itc->func.content_get = _gl_alert_ridio_get;
1642 itc->func.del = _alert_gl_del;
1644 Evas_Object *layout = elm_layout_add(ad->nf);
1645 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1646 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1648 genlist = elm_genlist_add(layout);
1649 elm_genlist_block_count_set(genlist, 14);
1650 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1651 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1653 Alert_Item_Data *id = calloc(sizeof(Alert_Item_Data), 1);
1656 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _hourly_gl_cb, (void *)0);
1659 Alert_Item_Data *id2 = calloc(sizeof(Alert_Item_Data), 1);
1662 id2->item = elm_genlist_item_append(genlist, itc, id2, NULL, ELM_GENLIST_ITEM_NONE, _hourly_gl_cb, (void *)1);
1665 ad->alert_rdg = elm_radio_add(genlist);
1666 elm_radio_state_value_set(ad->alert_rdg, 3);
1667 elm_radio_value_set(ad->alert_rdg, is_alert_mode_type);
1669 evas_object_data_set(genlist, "radio_main", ad->alert_rdg);
1671 elm_genlist_item_class_free(itc);
1673 elm_object_part_content_set(layout, "elm.genlist", genlist);
1675 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
1676 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1680 void _clocklist_load()
1682 if (g_clock_list[0] || g_clock_list[1] || g_clock_list[2]) {
1683 _clocklist_destroy();
1686 pkgmgrinfo_appinfo_filter_h handle = NULL;
1688 if (pkgmgrinfo_appinfo_filter_create(&handle) != PMINFO_R_OK) {
1689 ERR("pkgmgrinfo_appinfo_filter_create error");
1693 if (pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, IDLE_CLOCK_CATEGROY)
1695 ERR("pkgmgrinfo_appinfo_filter_add_string error");
1696 pkgmgrinfo_appinfo_filter_destroy(handle);
1700 if (pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, IDLE_CLOCK_CATEGROY2)
1702 ERR("pkgmgrinfo_appinfo_filter_add_string error");
1703 pkgmgrinfo_appinfo_filter_destroy(handle);
1707 if (pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _category_app_list_cb, NULL)
1709 ERR("pkgmgrinfo_appinfo_filter_foreach_appinfo error");
1710 pkgmgrinfo_appinfo_filter_destroy(handle);
1714 pkgmgrinfo_appinfo_filter_destroy(handle);
1716 Clock_Type_Item *pitem = NULL;
1717 Eina_List *list = NULL;
1720 for (i = 0; i < 3; i++) {
1721 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
1722 pitem->index = clock_idx++;
1728 void _clocklist_destroy()
1730 Clock_Type_Item *pitem = NULL;
1731 Eina_List *list = NULL;
1735 for (i = 0; i < 3; i++) {
1736 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
1743 g_clock_list[0] = eina_list_free(g_clock_list[0]);
1744 g_clock_list[1] = eina_list_free(g_clock_list[1]);
1745 g_clock_list[2] = eina_list_free(g_clock_list[2]);
1748 static int _clock_type_compare_cb(const void *d1, const void *d2)
1750 UChar clock1[256] = { 0, };
1751 UChar clock2[256] = { 0, };
1753 Clock_Type_Item *r1 = (Clock_Type_Item *) d1;
1754 Clock_Type_Item *r2 = (Clock_Type_Item *) d2;
1756 u_uastrcpy(clock1, r1->name);
1757 u_uastrcpy(clock2, r2->name);
1759 /*const char *lang = vconf_get_str(VCONFKEY_LANGSET); */
1760 /*UErrorCode status = U_ZERO_ERROR; */
1761 /*UCollator *coll = ucol_open(lang, &status); */
1762 UCollationResult ret = ucol_strcoll(coll, clock1, -1, clock2, -1);
1764 /*ucol_close(coll); */
1778 static char *get_timezone_str()
1781 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf) - 1);
1786 /* handle error condition */
1788 return strdup(buf + 20);
1791 static UChar *uastrcpy(const char *chars)
1796 if (!chars) return NULL;
1798 len = strlen(chars);
1799 str = (UChar *) malloc(sizeof(UChar) * (len + 1));
1802 u_uastrcpy(str, chars);
1806 static void ICU_set_timezone(const char *timezone)
1808 DBG("ICU_set_timezone = %s ", timezone);
1809 UErrorCode ec = U_ZERO_ERROR;
1810 UChar *str = uastrcpy(timezone);
1812 ucal_setDefaultTimeZone(str, &ec);
1813 if (U_SUCCESS(ec)) {
1814 DBG("ucal_setDefaultTimeZone() SUCCESS ");
1816 ERR("ucal_setDefaultTimeZone() FAILED : %s ", u_errorName(ec));