2 * Copyright (c) 2010 Samsung Electronics, Inc.
5 * This software is a confidential and proprietary information
6 * of Samsung Electronics, Inc. ("Confidential Information"). You
7 * shall not disclose such Confidential Information and shall use
8 * it only in accordance with the terms of the license agreement
9 * you entered into with Samsung Electronics.
12 #include <vconf-keys.h>
13 #include <unicode/ucal.h>
14 #include <unicode/uloc.h>
15 #include <unicode/udat.h>
16 #include <unicode/ustring.h>
17 #include <unicode/udatpg.h>
18 #include <unicode/utmscale.h>
19 #include <unicode/ucol.h>
20 #include <package-manager.h>
21 #include <pkgmgr-info.h>
24 #include "setting-clock.h"
27 #include "setting_view_toast.h"
29 #include "setting_data_vconf.h"
31 static void _datetime_auto_sync_cb(void * data, Evas_Object * obj, void * event_info);
32 static void _datetime_date_cb(void *data, Evas_Object * obj, void *event_info);
33 static void _datetime_time_cb(void *data, Evas_Object * obj, void *event_info);
34 static char* get_timezone_str();
35 static UChar *uastrcpy(const char *chars);
36 static void ICU_set_timezone(const char *timezone);
38 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
39 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
40 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
41 static void _page_show(void *data, Evas * e, Evas_Object * obj, void *event_info);
43 static struct _clock_menu_item clock_menu_its[] = {
44 { "IDS_ST_BODY_CLOCK_TYPE_ABB", 1, _clock_type_cb },
45 #ifndef FEATURE_SETTING_SDK
46 { "IDS_ST_BODY_DATE_AND_TIME_ABB", 0, _dt_cb },
47 { "IDS_ST_BODY_HOURLY_ALERT_ABB", 0, _hourly_alert_cb },
51 static struct _dt_menu_item dt_menu_its[] = {
52 { "IDS_ST_BODY_AUTO_SYNC_ABB2", "IDS_ST_BODY_SYNC_WITH_PHONE_ABB", _datetime_auto_sync_cb },
53 { "IDS_ST_BODY_SET_DATE_ABB2", "", _datetime_date_cb },
54 { "IDS_SMEMO_BUTTON_SET_TIME_ABB", "", _datetime_time_cb },
57 static Elm_Object_Item * auto_sync_item = NULL;
58 static Elm_Object_Item * date_item = NULL;
59 static Elm_Object_Item * time_item = NULL;
60 static Evas_Object * g_date_time_genlist = NULL;
61 static Evas_Object * g_clock_genlist = NULL;
62 static Evas_Object * auto_sync_check = NULL;
63 static Evas_Object * g_clock_scroller = NULL;
64 static Evas_Object * g_clock_box = NULL;
65 //pkgmgr_client *pc_clock = NULL;
66 //pkgmgr_client *pc_clock2 = NULL;
67 static UCollator *coll = NULL;
69 static int clock_idx = 0;
70 static int is_alert_mode_type = 0;
71 static appdata * temp_ad = NULL;
73 static int _clock_type_compare_cb(const void *d1, const void *d2);
76 Evas_Object * _elm_min_set(Evas_Object *obj, Evas_Object *parent, Evas_Coord w, Evas_Coord h)
78 Evas_Object *table, *rect;
80 table = elm_table_add(parent);
82 rect = evas_object_rectangle_add(evas_object_evas_get(table));
83 evas_object_size_hint_min_set(rect, w, h);
84 evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
85 evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
86 elm_table_pack(table, rect, 0, 0, 1, 1);
87 evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
88 evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
89 elm_table_pack(table, obj, 0, 0, 1, 1);
94 static Clock_Type_Item *_get_selected_clock()
96 Clock_Type_Item *pitem = NULL;
101 pkgid = vconf_get_str(VCONFKEY_WMS_CLOCKS_SET_IDLE);
103 if (pkgid && strlen(pkgid)) {
104 Eina_List *list = NULL;
105 for(i = 0; i < 3; i++) {
106 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
108 if (!strcmp(pkgid, pitem->pkgid)) {
109 //DBG("pkgid for selected idleclock is %s", pitem->pkgid);
120 static void update_clock_list(void *data, Eina_Bool reload, Eina_Bool show)
125 ERR("appdata is null!!");
129 Evas_Object *page_layout = NULL;
130 Evas_Object *box = g_clock_box;
138 Clock_Type_Item *selected = _get_selected_clock();
139 Clock_Type_Item *pitem = NULL;
140 Eina_List *list = NULL;
142 for (i = 0; i < 3; i++) {
143 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
145 page_layout = elm_layout_add(box);
146 //elm_layout_file_set(page_layout, EDJE_PATH, "setting/bg_thumbnail");
147 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
148 evas_object_size_hint_weight_set(page_layout, 0, 0);
149 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
150 evas_object_show(page_layout);
152 Evas_Object * clock_layout = elm_layout_add(page_layout);
153 elm_layout_file_set(clock_layout, EDJE_PATH, "setting-test/clock-type");
154 evas_object_size_hint_weight_set(clock_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
155 evas_object_size_hint_align_set(clock_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
156 evas_object_show(clock_layout);
160 vconf_get_int("db/wms/home_bg_mode", &bg_mode);
163 char *bg_color = NULL;
164 int R = 0x00, G = 0x00, B = 0x00;
165 bg_color = vconf_get_str("db/wms/home_bg_palette");
166 colorstr_to_decimal(bg_color, &R, &G, &B);
167 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
168 Evas_Object *color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
169 evas_object_color_set(color_page, R, G, B, 255);
170 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
171 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
172 elm_object_part_content_set(clock_layout, "clock-color", color_page);
176 char *bg_wallpaper = NULL;
177 bg_wallpaper = vconf_get_str(VCONFKEY_BGSET);
178 Evas_Object * wall_page = elm_image_add(clock_layout);
179 elm_image_file_set(wall_page, bg_wallpaper, NULL);
180 evas_object_size_hint_weight_set(wall_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
181 evas_object_size_hint_align_set(wall_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
182 elm_object_part_content_set(clock_layout, "clock-wallpaper", wall_page);
186 Evas_Object * page = elm_image_add(clock_layout);
187 elm_image_file_set(page, pitem->icon, NULL);
188 evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
189 evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
192 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
193 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, (void*)pitem->pkgid);
194 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
196 elm_object_part_content_set(clock_layout, "clock-image", page);
197 if (pitem == selected) {
198 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
200 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
203 elm_object_part_content_set(page_layout, "elm.icon", clock_layout);
205 elm_box_pack_end(box, page_layout);
212 _page_show(NULL, NULL, g_clock_scroller, NULL);
216 static int _clock_appinfo_cb(pkgmgrinfo_appinfo_h handle, void *data)
221 ERR("appdata is null!!");
226 pkgmgrinfo_appinfo_h tmp_handle;
229 r = pkgmgrinfo_appinfo_get_appid(handle, &appid);
230 if(r < 0 || !appid) {
231 ERR("pkgmgrinfo_appinfo_get_appid error");
234 r = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
235 if (r != PMINFO_R_OK) {
236 ERR("pkgmgrinfo_appinfo_get_appinfo error");
240 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY, &clockapp);
241 if (r != PMINFO_R_OK) {
242 ERR("pkgmgrinfo_appinfo_is_category_exist error");
247 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY2, &clockapp);
248 if (r != PMINFO_R_OK) {
249 ERR("pkgmgrinfo_appinfo_is_category_exist error");
256 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
262 static int _clock_app_event_cb(int req_id, const char *pkg_type, const char *pkgid,
263 const char* key, const char *val, const void *pmsg, void *data)
268 ERR("appdata is null!!");
272 if (!pkgid || !key || !val) {
273 ERR("pkgid or key or val is null");
278 if (!strncmp(key, "end", 3) && !strncmp(val, "ok", 2)) {
279 DBG("end install/update for some pkgid");
281 pkgmgrinfo_pkginfo_h handle;
283 ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
284 if (ret != PMINFO_R_OK)
286 ret = pkgmgrinfo_appinfo_get_list(handle, PMINFO_UI_APP, _clock_appinfo_cb , data);
287 if (ret != PMINFO_R_OK) {
288 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
291 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
297 static int _clock_app_uninstall_event_cb(int req_id, const char *pkg_type, const char *pkgid,
298 const char* key, const char *val, const void *pmsg, void *data)
303 ERR("appdata is null!!");
307 if (!pkgid || !key || !val) {
308 ERR("pkgid or key or val is null");
313 if (!strncmp(key, "end", 3) && !strncmp(val, "ok", 2)) {
314 DBG("end uninstall for some pkgid");
315 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
319 static void update_clock_list_cb(keynode_t *key, void * data)
324 ERR("appdata is null!!");
329 vconf = vconf_keynode_get_name(key);
331 if (vconf && !strcmp(vconf, VCONFKEY_WMS_CLOCKS_SET_IDLE)) {
332 update_clock_list(ad, EINA_FALSE, EINA_TRUE);
334 update_clock_list(ad, EINA_FALSE, EINA_FALSE);
338 static int _clock_check_appinfo(void *data, char *appid)
343 ERR("appdata is null!!");
347 pkgmgrinfo_appinfo_h tmp_handle;
350 r = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
351 if (r != PMINFO_R_OK) {
352 ERR("pkgmgrinfo_appinfo_get_appinfo error");
356 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY, &clockapp);
357 if (r != PMINFO_R_OK) {
358 ERR("pkgmgrinfo_appinfo_is_category_exist error");
363 r = pkgmgrinfo_appinfo_is_category_exist(tmp_handle, IDLE_CLOCK_CATEGROY2, &clockapp);
364 if (r != PMINFO_R_OK) {
365 ERR("pkgmgrinfo_appinfo_is_category_exist error");
371 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
377 static void change_clock_app_state_cb(keynode_t *key, void * data)
382 ERR("appdata is null!!");
386 char appid[256] = {0, };
387 char type[7] = {0, };
391 value = vconf_get_str(VCONFKEY_AIL_INFO_STATE);
394 strcpy(appid, value + 7);
395 strncpy(type, value, 6);
397 if (!strncmp(type, "delete", 6)) {
398 update_clock_list(ad, EINA_TRUE, EINA_TRUE);
399 } else if (!strncmp(type, "create", 6) || !strncmp(type, "update", 6)) {
400 _clock_check_appinfo(ad, appid);
405 void initialize_clock(void *data)
410 ERR("appdata is null!!");
413 UErrorCode status = U_ZERO_ERROR;
418 const char *lang = vconf_get_str(VCONFKEY_LANGSET);
419 coll = ucol_open(lang, &status);
421 int event_type = PMINFO_CLIENT_STATUS_INSTALL | PMINFO_CLIENT_STATUS_UPGRADE;
425 pkgmgr_client_free(pc_clock);
430 ad->pc_clock = pkgmgr_client_new(PMINFO_LISTENING);
431 pkgmgr_client_set_status_type(ad->pc_clock, event_type);
432 pkgmgr_client_listen_status(ad->pc_clock, _clock_app_event_cb, ad);
435 int event_type2 = PMINFO_CLIENT_STATUS_UNINSTALL;
438 pkgmgr_client_free(pc_clock2);
442 if (!ad->pc_clock2) {
443 ad->pc_clock2 = pkgmgr_client_new(PC_LISTENING);
444 pkgmgr_client_set_status_type(ad->pc_clock2, event_type2);
445 pkgmgr_client_listen_status(ad->pc_clock2, _clock_app_uninstall_event_cb, ad);
451 register_vconf_changing("db/wms/home_bg_mode", update_clock_list_cb, ad);
452 register_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb, ad);
453 register_vconf_changing(VCONFKEY_AIL_INFO_STATE, change_clock_app_state_cb, ad);
456 void _clear_clock_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
458 auto_sync_item = NULL;
461 g_date_time_genlist = NULL;
462 g_clock_genlist = NULL;
464 g_clock_scroller = NULL;
467 is_alert_mode_type = 0;
471 pkgmgr_client_free(pc_clock);
475 pkgmgr_client_free(pc_clock2);
484 _clocklist_destroy();
486 unregister_vconf_changing("db/wms/home_bg_mode", update_clock_list_cb);
487 unregister_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb);
488 unregister_vconf_changing(VCONFKEY_AIL_INFO_STATE, change_clock_app_state_cb);
490 is_running_clock = 0;
493 static void _layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
495 clock_page_data *pd = data;
499 ret = feedback_deinitialize();
500 if(ret != FEEDBACK_ERROR_NONE){
501 DBG("feedback_deinitialize failed");
505 static Eina_Bool animator_cb(void *data)
507 clock_page_data *pd = (clock_page_data *)data;
509 elm_mapbuf_enabled_set(pd->mapbuf[0], EINA_TRUE);
511 return ECORE_CALLBACK_CANCEL;
514 static int _set_clock_type(char *pkgid)
516 if( !pkgid || !strlen(pkgid) ) {
517 ERR("pkgid is NULL");
520 unregister_vconf_changing(VCONFKEY_WMS_CLOCKS_SET_IDLE, update_clock_list_cb);
521 vconf_set_str(VCONFKEY_WMS_CLOCKS_SET_IDLE, pkgid);
522 //DBG("Setting - package name: %s", pkgid);
527 static int prev_x = 0;
528 static int touch_mode = NONE;
530 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
532 touch_mode = TOUCH_DOWN;
534 Evas_Event_Mouse_Down *ev = event_info;
535 prev_x = ev->canvas.x;
538 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
540 if( touch_mode == TOUCH_MOVE )
543 char *pkgid = (char *)data;
548 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
551 if(_set_clock_type(pkgid))
553 if( temp_ad != NULL )
555 elm_naviframe_item_pop(temp_ad->nf);
559 struct _toast_data * toast = _create_toast(temp_ad, _("IDS_ST_TPOP_CLOCK_CHANGED"));
562 _show_toast(temp_ad, toast);
565 if( g_clock_genlist )
567 elm_genlist_realized_items_update(g_clock_genlist);
572 DBG("Setting - Clock type is wrong!!");
577 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
579 Evas_Event_Mouse_Move *ev = event_info;
581 int cur_x = ev->cur.canvas.x;
582 if( abs(cur_x - prev_x) > 15)
584 // todo : confirm and remove
585 touch_mode = TOUCH_MOVE;
589 static void _page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
593 Clock_Type_Item *pitem = _get_selected_clock();
597 DBG("name : %s, index : %d", pitem->name, pitem->index);
601 elm_scroller_region_get(obj, NULL, NULL, &w, &h);
602 printf("%d %d\n",w,h);
604 elm_scroller_page_show(obj, page, 0);
607 static Evas_Object* _create_index(Evas_Object* parent)
609 Evas_Object *layout, *scroller, *box, *page_layout, *mapbuf, *table;
610 Evas_Coord w = 0, h = 0;
616 layout = elm_layout_add(parent);
620 clock_page_data *pd = calloc(1, sizeof(clock_page_data));
624 //elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
625 elm_layout_file_set(layout, EDJE_PATH, "scroller_custom_layout");
626 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
627 evas_object_show(layout);
628 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
630 /* Create Scroller */
631 scroller = elm_scroller_add(layout);
632 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
633 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
634 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
635 elm_scroller_page_relative_set(scroller, 1.0, 0.0);
636 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
637 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
638 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
639 elm_object_part_content_set(layout, "scroller", scroller);
640 elm_object_style_set(scroller, "effect");
641 evas_object_show(scroller);
642 g_clock_scroller = scroller;
645 box = elm_box_add(scroller);
646 elm_box_horizontal_set(box, EINA_TRUE);
647 elm_object_content_set(scroller, box);
648 evas_object_show(box);
651 Clock_Type_Item *selected = _get_selected_clock();
652 Clock_Type_Item *pitem = NULL;
653 Eina_List *list = NULL;
655 for (i = 0; i < 3; i++) {
656 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
658 page_layout = elm_layout_add(box);
659 //elm_layout_file_set(page_layout, EDJE_PATH, "setting/bg_thumbnail");
660 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
661 evas_object_size_hint_weight_set(page_layout, 0, 0);
662 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
663 evas_object_show(page_layout);
665 Evas_Object * clock_layout = elm_layout_add(page_layout);
666 elm_layout_file_set(clock_layout, EDJE_PATH, "setting-test/clock-type");
667 evas_object_size_hint_weight_set(clock_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
668 evas_object_size_hint_align_set(clock_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
669 evas_object_show(clock_layout);
673 vconf_get_int("db/wms/home_bg_mode", &bg_mode);
676 char *bg_color = NULL;
677 int R = 0x00, G = 0x00, B = 0x00;
678 bg_color = vconf_get_str("db/wms/home_bg_palette");
679 colorstr_to_decimal(bg_color, &R, &G, &B);
680 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
681 Evas_Object *color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
682 evas_object_color_set(color_page, R, G, B, 255);
683 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
684 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
685 elm_object_part_content_set(clock_layout, "clock-color", color_page);
689 char *bg_wallpaper = NULL;
690 bg_wallpaper = vconf_get_str(VCONFKEY_BGSET);
691 Evas_Object * wall_page = elm_image_add(clock_layout);
692 elm_image_file_set(wall_page, bg_wallpaper, NULL);
693 evas_object_size_hint_weight_set(wall_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
694 evas_object_size_hint_align_set(wall_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
695 elm_object_part_content_set(clock_layout, "clock-wallpaper", wall_page);
699 Evas_Object * page = elm_image_add(clock_layout);
700 elm_image_file_set(page, pitem->icon, NULL);
701 evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
702 evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
705 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
706 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, (void*)pitem->pkgid);
707 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
709 elm_object_part_content_set(clock_layout, "clock-image", page);
710 if (pitem == selected) {
711 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
713 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
716 elm_object_part_content_set(page_layout, "elm.icon", clock_layout);
720 mapbuf = elm_mapbuf_add(box);
721 evas_object_size_hint_weight_set(mapbuf, 0, 0);
722 evas_object_size_hint_align_set(mapbuf, 0, EVAS_HINT_FILL);
723 evas_object_show(mapbuf);
724 elm_object_content_set(mapbuf, page_layout);
725 pd->mapbuf[pitem->index] = mapbuf;
727 elm_win_screen_size_get(elm_widget_top_get(parent), NULL, NULL, &w, &h);
728 table = _elm_min_set(page_layout, box, w, h);
729 evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
730 evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
731 evas_object_show(table);
732 elm_box_pack_end(box, table);
736 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _page_show, NULL);
739 ret = feedback_initialize();
740 if(ret != FEEDBACK_ERROR_NONE){
741 DBG("feedback_initialize failed");
744 //ecore_animator_add(animator_cb, pd);
749 static int _category_app_list_cb(pkgmgrinfo_appinfo_h handle, void *user_data)
757 char *m_value = NULL;
758 int type = CLOCKTYPE_INVALID;
760 pkgmgrinfo_appinfo_h tmp_handle;
762 ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
764 if(ret < 0 || !appid) {
765 ERR("pkgmgrinfo_appinfo_get_appid error");
768 ret = pkgmgrinfo_appinfo_get_appinfo(appid, &tmp_handle);
769 if (ret != PMINFO_R_OK) {
770 ERR("pkgmgrinfo_appinfo_get_appinfo error");
773 ret = pkgmgrinfo_appinfo_get_pkgid(tmp_handle, &pkgid);
774 if (ret != PMINFO_R_OK) {
775 ERR("pkgmgrinfo_appinfo_get_pkgid error");
776 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
779 ret = pkgmgrinfo_appinfo_get_label(tmp_handle, &name);
780 if (ret != PMINFO_R_OK) {
781 INFO("pkgmgrinfo_appinfo_get_label error");
782 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
784 ret = pkgmgrinfo_appinfo_get_icon(tmp_handle, &icon);
785 if (ret != PMINFO_R_OK) {
786 INFO("pkgmgrinfo_appinfo_get_icon error");
787 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
789 ret = pkgmgrinfo_appinfo_is_preload(tmp_handle, &preload);
790 if (ret != PMINFO_R_OK) {
791 INFO("pkgmgrinfo_appinfo_is_preload error or 3rd party");
793 ret = pkgmgrinfo_appinfo_get_metadata_value(tmp_handle, "clocktype", &m_value);
794 if (ret != PMINFO_R_OK) {
795 INFO("pkgmgrinfo_appinfo_get_metadata_value error or 3rd party");
798 Clock_Type_Item *pitem = NULL;
799 pitem = (Clock_Type_Item *)calloc(1, sizeof(Clock_Type_Item));
800 memset(pitem, 0x0, sizeof(Clock_Type_Item));
802 pitem->appid = strdup(appid);
803 pitem->pkgid = strdup(pkgid);
804 pitem->name = strdup(name);
805 pitem->icon = strdup(icon);
807 if (m_value && strlen(m_value) > 0) {
808 if (!strcmp(m_value, "function")) {
809 type = CLOCKTYPE_FUNCTION;
810 } else if (!strcmp(m_value, "style")) {
811 type = CLOCKTYPE_STYLE;
814 type = CLOCKTYPE_3RD;
819 case CLOCKTYPE_FUNCTION:
820 g_clock_list[0] = eina_list_sorted_insert(g_clock_list[0], _clock_type_compare_cb, pitem);
822 case CLOCKTYPE_STYLE:
823 g_clock_list[1] = eina_list_sorted_insert(g_clock_list[1], _clock_type_compare_cb, pitem);
826 g_clock_list[2] = eina_list_sorted_insert(g_clock_list[2], _clock_type_compare_cb, pitem);
829 g_clock_list[2] = eina_list_sorted_insert(g_clock_list[2], _clock_type_compare_cb, pitem);
833 pkgmgrinfo_appinfo_destroy_appinfo(tmp_handle);
837 Evas_Object *_clock_type_cb(void *data)
839 //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
842 Evas_Object *layout_inner = NULL;
843 Elm_Object_Item *it = NULL;
845 ad = (appdata *)data;
851 layout_inner = _create_index(ad->nf);
852 //it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
853 //elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
858 void _hourly_alert_cb(void *data, Evas_Object *obj, void *event_info)
860 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
862 _show_hourly_alert_list(data);
865 static char *_date_format_get()
870 char *date_fmt[] = { "%d%m%Y", "%m%d%Y", "%Y%m%d", "%Y%d%m" };
872 ret = vconf_get_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, &date_val);
874 return strdup(date_fmt[date_val]);
877 static char *_time_format_get()
882 char *time_fmt[] = { "%d%m%Y%I:%M%p", "%d%m%Y%H:%M" };
884 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
888 else if( time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
889 is_hour24 = time_val - 1;
891 return strdup(time_fmt[is_hour24]);
894 static char * _datetime_format_get()
896 char *dt_fmt, *region_fmt, *lang, *temp_fmt = NULL;
897 char buf[256] = {0,};
898 int time_val = 0, is_hour24 = 0, ret;
900 lang = getenv("LANGUAGE");
901 setenv("LANGUAGE", "en_US", 1);
903 temp_fmt = vconf_get_str(VCONFKEY_REGIONFORMAT);
905 DBG("Setting - %s", temp_fmt);
907 region_fmt = replace(temp_fmt, "utf8", "UTF-8");
909 DBG("Setting - %s", region_fmt);
911 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
914 else if( time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
915 is_hour24 = time_val - 1;
918 snprintf(buf, sizeof(buf), "%s_DTFMT_24HR", region_fmt);
920 snprintf(buf, sizeof(buf), "%s_DTFMT_12HR", region_fmt);
922 dt_fmt = dgettext("dt_fmt", buf);
924 if(!lang || !strcmp(lang, ""))
925 unsetenv("LANGUAGE");
927 setenv("LANGUAGE", lang, 1);
929 return strdup(dt_fmt);
932 static void _vconf_date_format_changed_cb(keynode_t *node, void *data)
934 ICU_set_timezone(get_timezone_str());
935 Evas_Object *datetime = (Evas_Object *) data;
936 char *dt_fmt = _date_format_get();
937 elm_datetime_format_set(datetime, dt_fmt);
941 static void _vconf_time_format_changed_cb(keynode_t *node, void *data)
943 ICU_set_timezone(get_timezone_str());
944 Evas_Object *datetime = (Evas_Object *) data;
945 char *dt_fmt = _time_format_get();
946 elm_datetime_format_set(datetime, dt_fmt);
950 static void _vconf_datetime_format_changed_cb(keynode_t *node, void *data)
952 Evas_Object *datetime = (Evas_Object *) data;
953 char *dt_fmt = _datetime_format_get();
954 elm_datetime_format_set(datetime, dt_fmt);
958 static Eina_Bool _clear_date_changed_cb(void *data, Elm_Object_Item *it)
960 unregister_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, _vconf_date_format_changed_cb);
961 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb);
966 static Eina_Bool _clear_time_changed_cb(void *data, Elm_Object_Item *it)
968 unregister_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_time_format_changed_cb);
969 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb);
974 static Evas_Object* _create_scroller(Evas_Object* parent)
976 Evas_Object* scroller = elm_scroller_add(parent);
977 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
978 elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
979 evas_object_show(scroller);
984 void _dt_cb(void *data, Evas_Object *obj, void *event_info)
986 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
988 _show_date_and_time_list(data);
991 char * _gl_clock_title_get(void *data, Evas_Object *obj, const char *part)
993 char buf[1024] = {0, };
994 Item_Data *id = data;
995 int index = id->index;
997 if( !strcmp(part, "elm.text") || !strcmp(part, "elm.text.1") )
999 snprintf(buf, sizeof(buf)-1, "%s", _(clock_menu_its[index % 3].name));
1001 else if( !strcmp(part, "elm.text.2") )
1005 Clock_Type_Item *selected_clock = _get_selected_clock();
1006 if (selected_clock) {
1007 snprintf(buf, sizeof(buf)-1, "%s", selected_clock->name);
1010 else if( index == 1 )
1014 else if( index == 2 )
1016 char * _houly_alert_str[] = { "IDS_ST_BODY_OFF_M_STATUS", "IDS_ST_BODY_ON_M_STATUS" };
1018 vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &clock_menu_its[index % 3].type_num);
1019 snprintf(buf, sizeof(buf)-1, "%s", _(_houly_alert_str[clock_menu_its[index % 3].type_num]));
1026 static void _clock_gl_del(void *data, Evas_Object *obj)
1028 Item_Data *id = data;
1033 Evas_Object* _create_clock_list(void* data)
1038 DBG("%s", "_create_clock_list - appdata is null");
1041 Evas_Object *genlist = NULL;
1042 Elm_Genlist_Item_Class *itc_tmp;
1043 struct _clock_menu_item *menu_its = NULL;
1046 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1047 itc->item_style = "2text";
1048 itc->func.text_get = _gl_clock_title_get;
1049 itc->func.del = _clock_gl_del;
1051 Elm_Genlist_Item_Class *itc_date_time = elm_genlist_item_class_new();
1052 itc_date_time->item_style = "1text";
1053 itc_date_time->func.text_get = _gl_clock_title_get;
1054 itc_date_time->func.del = _clock_gl_del;
1056 Evas_Object * layout = elm_layout_add(ad->nf);
1057 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1058 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1060 genlist = elm_genlist_add(layout);
1061 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1063 menu_its = clock_menu_its;
1066 count = sizeof(clock_menu_its) / sizeof(clock_menu_its[0]);
1067 for (idx = 0; idx < count; idx++)
1071 itc_tmp = itc_date_time;
1078 Item_Data *id = calloc(sizeof(Item_Data), 1);
1080 id->item = elm_genlist_item_append(
1081 genlist, // genlist object
1082 itc_tmp, // item class
1085 ELM_GENLIST_ITEM_NONE,
1086 menu_its[ idx ].func, // call back
1089 elm_genlist_item_class_free(itc);
1090 elm_genlist_item_class_free(itc_date_time);
1092 g_clock_genlist = genlist;
1094 elm_object_part_content_set(layout, "elm.genlist", genlist);
1099 char *_get_str_from_icu(const char *pattern)
1101 char *locale_tmp = vconf_get_str(VCONFKEY_REGIONFORMAT);
1102 char locale[32] = {0,};
1104 strcpy(locale, locale_tmp);
1106 if (locale[0] != '\0') {
1107 p = strstr(locale, ".UTF-8");
1113 char *ret_str = NULL;
1114 UChar Pattern[256] = { 0, };
1115 UErrorCode status = U_ZERO_ERROR;
1116 UDateFormat *formatter = NULL;
1118 UChar formatted[256] = { 0, };
1119 char formattedString[256] = { 0, };
1121 u_uastrncpy(Pattern, pattern, strlen(pattern));
1123 UDate date = ucal_getNow();
1125 udat_open(UDAT_IGNORE, UDAT_IGNORE, locale_tmp, NULL, -1, Pattern, -1, &status);
1126 int32_t formattedCapacity = (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
1127 (void)udat_format(formatter, date, formatted, formattedCapacity, NULL, &status);
1128 u_austrcpy(formattedString, formatted);
1129 DBG("str from icu is %s", formattedString);
1131 udat_close(formatter);
1133 ret_str = strdup(formattedString);
1137 char *_get_date_str()
1142 char *date_fmt[] = { "dd/MM/y", "MM/dd/y", "y/MM/dd", "y/dd/MM" };
1144 ret = vconf_get_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, &date_val);
1146 return strdup(_get_str_from_icu(date_fmt[date_val]));
1149 char *_get_time_str()
1154 char *time_fmt[] = { "hh:mm a", "HH:mm" };
1156 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
1160 else if( time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
1161 is_hour24 = time_val - 1;
1163 return strdup(_get_str_from_icu(time_fmt[is_hour24]));
1167 char * _gl_date_and_time_title_get(void *data, Evas_Object *obj, const char *part)
1170 Item_Data *id = data;
1171 int index = id->index;
1173 char expression[32];
1174 int auto_update = 0;
1175 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &auto_update);
1177 if( !strcmp(part, "elm.text.1") )
1181 snprintf(buf, sizeof(buf)-1, "%s", _(dt_menu_its[index % 3].name));
1187 strcpy(expression, "<font color=#515151>%s</font>");
1191 strcpy(expression, "%s");
1193 snprintf(buf, sizeof(buf)-1, expression, _(dt_menu_its[index % 3].name));
1196 else if( !strcmp(part, "elm.text.2") )
1200 snprintf(buf, sizeof(buf)-1, "%s", _(dt_menu_its[index % 3].date_or_time));
1206 strcpy(expression, "<font color=#515151>%s</font>");
1210 strcpy(expression, "%s");
1213 if( index == 1 ) // Date
1215 char *date_buf = NULL;
1216 date_buf = _get_date_str();
1217 snprintf(buf, sizeof(buf)-1, expression, date_buf);
1219 else if(index == 2 ) // Time
1221 char *time_buf = NULL;
1222 time_buf = _get_time_str();
1223 snprintf(buf, sizeof(buf)-1, expression, time_buf);
1231 static Evas_Object * _gl_dt_auto_sync_check_get(void *data, Evas_Object *obj, const char *part)
1233 Evas_Object *check = NULL;
1235 int is_auto_update = 0;
1237 DT_Item_Data *id = data;
1238 int index = id->index;
1240 if( !strcmp(part, "elm.icon") )
1244 check = elm_check_add(obj);
1245 if( vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_update) < 0 )
1247 DBG("Setting - auto time update's vconf get fail");
1249 elm_check_state_set(check, (is_auto_update) ? EINA_TRUE : EINA_FALSE);
1250 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1251 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1253 auto_sync_check = check;
1261 static void _dt_gl_del(void *data, Evas_Object *obj)
1263 DT_Item_Data *id = data;
1267 auto_sync_check = NULL;
1268 auto_sync_item = NULL;
1273 static void change_datetime_format_cb(keynode_t *key, void * data)
1277 ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
1281 DBG("Setting - time_format : %d", time_val);
1282 ICU_set_timezone(get_timezone_str());
1284 int is_auto_sync = 0;
1285 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1289 elm_genlist_item_update(date_item);
1290 //elm_object_item_disabled_set(date_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE );
1294 elm_genlist_item_update(time_item);
1295 //elm_object_item_disabled_set(time_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE );
1299 static Eina_Bool _clear_datetime_changed_cb(void *data, Elm_Object_Item *it)
1301 unregister_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, change_datetime_format_cb);
1302 unregister_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, change_datetime_format_cb);
1303 unregister_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, change_datetime_format_cb);
1308 void _show_date_and_time_list(void* data)
1313 DBG("%s", "_create_dt_list - appdata is null");
1316 Evas_Object *genlist = NULL;
1317 Evas_Object *layout = NULL;
1318 Elm_Object_Item *nf_it = NULL;
1319 struct _dt_menu_item *menu_its = NULL;
1323 ICU_set_timezone(get_timezone_str());
1325 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &auto_sync);
1327 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1328 itc->item_style = "2text.1icon.1";
1329 itc->func.text_get = _gl_date_and_time_title_get;
1330 itc->func.content_get = _gl_dt_auto_sync_check_get;
1331 itc->func.del = _dt_gl_del;
1333 layout = elm_layout_add(ad->nf);
1334 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1335 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1337 genlist = elm_genlist_add(layout);
1338 elm_genlist_block_count_set(genlist, 14);
1339 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1340 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1342 menu_its = dt_menu_its;
1344 for (idx = 0; idx < CLOCK_DATE_AND_TIME_COUNT; idx++)
1346 DT_Item_Data *id = calloc(sizeof(DT_Item_Data), 1);
1348 id->item = elm_genlist_item_append(
1349 genlist, // genlist object
1353 ELM_GENLIST_ITEM_NONE,
1354 menu_its[ idx ].func, // call back
1359 auto_sync_item = id->item;
1362 date_item = id->item;
1365 time_item = id->item;
1369 elm_genlist_item_class_free(itc);
1371 g_date_time_genlist = genlist;
1373 elm_object_part_content_set(layout, "elm.genlist", genlist);
1375 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
1376 elm_naviframe_item_pop_cb_set(nf_it, _clear_datetime_changed_cb, ad);
1377 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1379 // time format changing cb
1380 register_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, change_datetime_format_cb, NULL);
1381 register_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, change_datetime_format_cb, NULL);
1382 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, change_datetime_format_cb, NULL);
1385 static void _set_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1387 if (!data || !obj ) return;
1392 elm_datetime_value_get(ad->datetime, &currtime);
1394 currtime.tm_isdst = -1;
1395 currtime.tm_sec = 0;
1397 time_t t = mktime(&currtime);
1399 int ret = deviced_set_datetime(t);
1401 elm_naviframe_item_pop(ad->nf);
1403 // automatic freed!!
1404 Toast_Data * toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGING_TIME_AND_DATE_SETTINGS_MAY_AFFECT_SOME_FUNCTIONS"));
1407 _show_toast(ad, toast);
1410 if( g_date_time_genlist )
1412 elm_genlist_realized_items_update(g_date_time_genlist);
1416 static void _cancle_clicked_cb(void *data, Evas_Object * obj, void *event_info)
1423 elm_naviframe_item_pop(ad->nf);
1425 if( ad->dt_genlist_item_of_time != NULL )
1427 elm_genlist_item_update(ad->dt_genlist_item_of_time);
1430 if( ad->dt_genlist_item_of_date != NULL )
1432 elm_genlist_item_update(ad->dt_genlist_item_of_date);
1436 static void _datetime_auto_sync_cb(void * data, Evas_Object * obj, void * event_info)
1438 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1440 int is_auto_sync = 0;
1442 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1444 is_auto_sync = !is_auto_sync;
1446 vconf_set_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, is_auto_sync);
1448 DBG("Setting - Auto sync : %s", is_auto_sync ? "TRUE" : "FALSE");
1450 if( auto_sync_check )
1452 elm_check_state_set(auto_sync_check, (is_auto_sync) ? EINA_TRUE : EINA_FALSE);
1457 elm_genlist_item_update(date_item);
1458 //elm_object_item_disabled_set(date_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE );
1462 elm_genlist_item_update(time_item);
1463 //elm_object_item_disabled_set(time_item, (is_auto_sync) ? EINA_TRUE : EINA_FALSE );
1467 static void _datetime_date_cb(void *data, Evas_Object * obj, void *event_info)
1469 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1471 int is_auto_sync = 0;
1472 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1478 Evas_Object *scroller;
1479 Evas_Object *layout, *btn;
1480 Evas_Object *datetime, *datetime_field, *datetime_button;
1481 Elm_Object_Item *it;
1483 appdata *ad = (appdata *)data;
1488 ad->dt_genlist_item_of_date = (Elm_Object_Item *)event_info;
1490 scroller = _create_scroller(ad->nf);
1491 evas_object_data_set(scroller, "appdata", ad);
1493 layout = elm_layout_add(scroller);
1494 elm_layout_file_set(layout, EDJE_PATH, "setting-test/datetime");
1495 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1497 datetime = elm_datetime_add(layout);
1498 elm_object_style_set(datetime, "datepicker_layout");
1499 elm_object_part_content_set(layout, "content", datetime);
1501 ad->datetime = datetime;
1504 dt_fmt = _date_format_get();
1505 elm_datetime_format_set(datetime, dt_fmt);
1507 register_vconf_changing(VCONFKEY_SETAPPL_DATE_FORMAT_INT, _vconf_date_format_changed_cb, datetime);
1508 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_date_format_changed_cb, datetime);
1511 btn = elm_button_add(layout);
1512 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL_ABB2"));
1513 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1514 elm_object_part_content_set(layout, "btn1", btn);
1515 evas_object_smart_callback_add(btn, "clicked", _cancle_clicked_cb, ad);
1517 btn = elm_button_add(layout);
1518 elm_object_text_set(btn, _("IDS_COM_SK_SET_ABB"));
1519 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1520 elm_object_part_content_set(layout, "btn2", btn);
1521 evas_object_smart_callback_add(btn, "clicked", _set_clicked_cb, ad);
1523 elm_object_content_set(scroller, layout);
1525 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, scroller, NULL);
1526 elm_naviframe_item_pop_cb_set(it, _clear_date_changed_cb, ad);
1527 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1530 static void _datetime_time_cb(void *data, Evas_Object * obj, void *event_info)
1532 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1534 int is_auto_sync = 0;
1535 vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &is_auto_sync);
1541 Evas_Object *scroller;
1542 Evas_Object *layout, *btn;
1543 Evas_Object *datetime, *datetime_field, *datetime_button;
1544 Evas_Object *radio, *rdg;
1545 Elm_Object_Item *it;
1547 appdata *ad = (appdata *)data;
1552 ad->dt_genlist_item_of_time = (Elm_Object_Item *)event_info;
1554 scroller = _create_scroller(ad->nf);
1555 evas_object_data_set(scroller, "appdata", ad);
1557 layout = elm_layout_add(scroller);
1558 elm_layout_file_set(layout, EDJE_PATH, "setting-test/datetime");
1559 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1561 datetime = elm_datetime_add(layout);
1562 elm_object_style_set(datetime, "timepicker_layout");
1563 elm_object_part_content_set(layout, "content", datetime);
1565 ad->datetime = datetime;
1568 dt_fmt = _time_format_get();
1569 elm_datetime_format_set(datetime, dt_fmt);
1570 DBG("datetime time format : %s", dt_fmt);
1572 register_vconf_changing(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_time_format_changed_cb, datetime);
1573 register_vconf_changing(VCONFKEY_SYSTEM_TIME_CHANGED, _vconf_time_format_changed_cb, datetime);
1576 btn = elm_button_add(layout);
1577 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL_ABB2"));
1578 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1579 elm_object_part_content_set(layout, "btn1", btn);
1580 evas_object_smart_callback_add(btn, "clicked", _cancle_clicked_cb, ad);
1582 btn = elm_button_add(layout);
1583 elm_object_text_set(btn, _("IDS_COM_SK_SET_ABB"));
1584 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1585 elm_object_part_content_set(layout, "btn2", btn);
1586 evas_object_smart_callback_add(btn, "clicked", _set_clicked_cb, ad);
1588 elm_object_content_set(scroller, layout);
1590 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, scroller, NULL);
1591 elm_naviframe_item_pop_cb_set(it, _clear_time_changed_cb, ad);
1592 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1595 static void _alert_gl_del(void *data, Evas_Object *obj)
1597 Alert_Item_Data *id = data;
1602 char * _gl_alert_title_get(void *data, Evas_Object *obj, const char *part)
1605 Alert_Item_Data *id = data;
1606 int index = id->index;
1608 char * temps[] = { "IDS_ST_BODY_ON_M_STATUS", "IDS_ST_BODY_OFF_M_STATUS" };
1610 if( !strcmp(part, "elm.text") )
1612 snprintf(buf, sizeof(buf)-1, "%s", _(temps[index]));
1618 Evas_Object * _gl_alert_ridio_get(void *data, Evas_Object *obj, const char *part)
1620 Evas_Object *radio = NULL;
1621 Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
1622 Alert_Item_Data *id = data;
1623 int index = id->index;
1625 if( !strcmp(part, "elm.icon") )
1627 radio = elm_radio_add(obj);
1628 elm_radio_state_value_set(radio, id->index);
1629 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
1630 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1631 elm_radio_group_add(radio, radio_main);
1634 vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &is_alert_mode_type);
1636 is_alert_mode_type = !is_alert_mode_type;
1638 if( is_alert_mode_type == id->index )
1640 elm_radio_value_set(radio_main, is_alert_mode_type);
1648 static void _hourly_gl_cb(void *data, Evas_Object *obj, void *event_info)
1650 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1652 is_alert_mode_type = (int)data;
1654 elm_naviframe_item_pop(temp_ad->nf);
1655 if(!temp_ad->alert_rdg)
1657 evas_object_del(temp_ad->alert_rdg);
1658 temp_ad->alert_rdg = NULL;
1662 clock_menu_its[2].type_num = is_alert_mode_type;
1663 vconf_set_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, !is_alert_mode_type);
1665 if( g_clock_genlist )
1667 elm_genlist_realized_items_update(g_clock_genlist);
1673 void _show_hourly_alert_list(void* data)
1677 DBG("%s", "_create_alert_list - appdata is null");
1680 Evas_Object *genlist = NULL;
1681 Elm_Object_Item *nf_it = NULL;
1685 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1686 itc->item_style = "1text.1icon.1";
1687 itc->func.text_get = _gl_alert_title_get;
1688 itc->func.content_get = _gl_alert_ridio_get;
1689 itc->func.del = _alert_gl_del;
1691 Evas_Object * layout = elm_layout_add(ad->nf);
1692 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1693 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1695 genlist = elm_genlist_add(layout);
1696 elm_genlist_block_count_set(genlist, 14);
1697 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1698 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1700 Alert_Item_Data *id = calloc(sizeof(Alert_Item_Data), 1);
1702 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _hourly_gl_cb, (void*)0);
1704 Alert_Item_Data *id2 = calloc(sizeof(Alert_Item_Data), 1);
1706 id2->item = elm_genlist_item_append(genlist, itc, id2, NULL, ELM_GENLIST_ITEM_NONE, _hourly_gl_cb, (void*)1);
1708 ad->alert_rdg = elm_radio_add(genlist);
1709 elm_radio_state_value_set(ad->alert_rdg, 3);
1710 elm_radio_value_set(ad->alert_rdg, is_alert_mode_type);
1712 evas_object_data_set(genlist, "radio_main", ad->alert_rdg);
1714 elm_genlist_item_class_free(itc);
1716 elm_object_part_content_set(layout, "elm.genlist", genlist);
1718 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
1719 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1723 void _clocklist_load()
1725 if( g_clock_list[0] || g_clock_list[1] || g_clock_list[2] )
1727 _clocklist_destroy();
1730 pkgmgrinfo_appinfo_filter_h handle = NULL;
1732 if (pkgmgrinfo_appinfo_filter_create(&handle) != PMINFO_R_OK) {
1733 ERR("pkgmgrinfo_appinfo_filter_create error");
1737 if (pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, IDLE_CLOCK_CATEGROY)
1739 ERR("pkgmgrinfo_appinfo_filter_add_string error");
1740 pkgmgrinfo_appinfo_filter_destroy(handle);
1744 if (pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, IDLE_CLOCK_CATEGROY2)
1746 ERR("pkgmgrinfo_appinfo_filter_add_string error");
1747 pkgmgrinfo_appinfo_filter_destroy(handle);
1751 if (pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _category_app_list_cb, NULL)
1753 ERR("pkgmgrinfo_appinfo_filter_foreach_appinfo error");
1754 pkgmgrinfo_appinfo_filter_destroy(handle);
1758 pkgmgrinfo_appinfo_filter_destroy(handle);
1760 Clock_Type_Item *pitem = NULL;
1761 Eina_List *list = NULL;
1764 for (i = 0; i < 3; i++) {
1765 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
1766 pitem->index = clock_idx++;
1772 void _clocklist_destroy()
1774 Clock_Type_Item *pitem = NULL;
1775 Eina_List *list = NULL;
1779 for (i = 0; i < 3; i++) {
1780 EINA_LIST_FOREACH(g_clock_list[i], list, pitem) {
1787 g_clock_list[0] = eina_list_free(g_clock_list[0]);
1788 g_clock_list[1] = eina_list_free(g_clock_list[1]);
1789 g_clock_list[2] = eina_list_free(g_clock_list[2]);
1792 static int _clock_type_compare_cb(const void *d1, const void *d2)
1794 UChar clock1[256] = { 0, };
1795 UChar clock2[256] = { 0, };
1797 Clock_Type_Item *r1 = (Clock_Type_Item *) d1;
1798 Clock_Type_Item *r2 = (Clock_Type_Item *) d2;
1800 u_uastrcpy(clock1, r1->name);
1801 u_uastrcpy(clock2, r2->name);
1803 //const char *lang = vconf_get_str(VCONFKEY_LANGSET);
1804 //UErrorCode status = U_ZERO_ERROR;
1805 //UCollator *coll = ucol_open(lang, &status);
1806 UCollationResult ret = ucol_strcoll(coll, clock1, -1, clock2, -1);
1822 static char* get_timezone_str()
1825 ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf)-1);
1831 /* handle error condition */
1833 return strdup(buf+20);
1836 static UChar *uastrcpy(const char *chars)
1841 if (!chars) return NULL;
1843 len = strlen(chars);
1844 str = (UChar *) malloc(sizeof(UChar) *(len + 1));
1847 u_uastrcpy(str, chars);
1851 static void ICU_set_timezone(const char *timezone)
1853 DBG("ICU_set_timezone = %s ", timezone);
1854 UErrorCode ec = U_ZERO_ERROR;
1855 UChar *str = uastrcpy(timezone);
1857 ucal_setDefaultTimeZone(str, &ec);
1858 if (U_SUCCESS(ec)) {
1859 DBG("ucal_setDefaultTimeZone() SUCCESS ");
1861 ERR("ucal_setDefaultTimeZone() FAILED : %s ", u_errorName(ec));