2 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
17 #include <app_manager.h>
20 #include <vconf-keys.h>
21 #include <system_settings.h>
22 #include <pkgmgr-info.h>
24 #include <media_content.h>
25 #include <media_info.h>
29 #include "setting_data_vconf.h"
30 #include "setting-homescreen.h"
31 #include "setting_view_toast.h"
34 static struct _homescreen_menu_item homescreen_menu_its[] = {
35 { "IDS_HS_MBODY_HOME_ICON_SIZE_ABB", 0, 0, _homescreen_gl_viewtype_cb },
36 { "IDS_ST_MBODY_HOME_BACKGROUND_ABB", 0, 0, _wallpaper_gl_cb },
37 { "IDS_ST_OPT_EDIT_HOME_SCREEN_ABB", 0, 0, _homescreen_gl_edit_home_cb },
41 static struct _homebg_menu_item homebg_menu_its[] = {
42 { "IDS_COM_MBODY_COLOUR_PALETTE", _show_bg_slide_cb },
43 { "IDS_ST_BODY_WALLPAPERS", _wallpaper_gl_cb },
44 { "IDS_ST_BODY_GALLERY", _gallery_gl_cb },
48 static struct _color color[] = {
49 { 255, 111, 32, "FF6F20" },
50 { 244, 102, 141, "F4668D" },
51 { 249, 55, 66, "F93742" },
52 { 167, 63, 149, "A73F95" },
53 { 132, 0, 196, "8400C4" },
54 { 3, 54, 224, "0336E0" },
55 { 0, 175, 164, "00AFA4" },
56 { 96, 192, 30, "60C01E" },
57 { 31, 147, 0, "1F9300" },
58 { 107, 58, 51 ,"6B3A33" },
59 { 48, 48, 48, "303030" },
60 { 0, 0, 0, "000000" }, //default black
64 static char * home_icon_sub_str[] = {
65 "IDS_ST_BODY_LARGE_ICONS_HP1SDXP2SD_ABB",
66 "IDS_ST_BODY_SMALL_ICONS_HP1SDXP2SD_ABB",
69 static char * thumb_path[] = {
70 SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/setting_icon_color_platte.png",
71 SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/setting_icon_wallpaper.png",
72 CROPPED_GALLERY_DEFAULT_WALLPAPER_PATH,
73 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_01.png",
74 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_02.png",
75 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_03.png",
76 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_04.png",
77 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_05.png",
78 SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_06.png"
81 static void _show_viewtype_list(void* data);
82 static void _show_homebg_list(void* data);
83 static void _show_edit_home(void* data);
84 static void _show_edit_apps(void* data);
85 static void _wallpaper_vconf_color_changed_cb(keynode_t *node, void *data);
86 static void _wallpaper_vconf_wallpaper_changed_cb(keynode_t *node, void *data);
88 static appdata* temp_ad = NULL;
89 static Evas_Object * g_home_bg_genlist = NULL;
90 static int touch_mode = NONE;
91 static int gallery_img_cnt = 0;
92 static int is_prev_update = 0;
93 static char* last_img_path = NULL;
94 static bool running_gallery = false;
95 static Ecore_Timer *running_gallery_timer = NULL;
97 static Evas_Object * g_wallpaper_layout = NULL;
98 static Evas_Object * g_color_page = NULL;
99 static Evas_Object * g_gallery_prv = NULL;
101 static int _chk_pkg_install(const char *pkgid)
104 pkgmgrinfo_pkginfo_h pkginfo_h = NULL;
106 //get pkg appinfo handler
107 ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkginfo_h);
108 if (PMINFO_R_OK != ret || NULL == pkginfo_h) {
109 DBG("un-installed pkg [%s]", pkgid);
114 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
120 _gallery_item_cb(media_info_h item, void *user_data)
122 if( user_data == NULL )
124 DBG("user_data == NULL");
127 media_info_get_file_path(item, &last_img_path);
128 //DBG("last gallery image path[%s]", last_img_path);
133 static void _get_last_img_path()
135 Eina_List *item_list = NULL;
136 filter_h media_filter;
139 ret = media_filter_create(&media_filter);
140 if(ret != MEDIA_CONTENT_ERROR_NONE)
142 DBG("Cannot create filter. err");
145 ret = media_filter_set_condition(media_filter, "((MEDIA_TYPE=0 OR MEDIA_TYPE=1) AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121))", MEDIA_CONTENT_COLLATE_DEFAULT);
146 if(ret != MEDIA_CONTENT_ERROR_NONE)
148 DBG("Cannot set condition. err");
151 ret = media_filter_set_order(media_filter, MEDIA_CONTENT_ORDER_DESC, "MEDIA_TIMELINE, MEDIA_DISPLAY_NAME", MEDIA_CONTENT_COLLATE_NOCASE);
152 if(ret != MEDIA_CONTENT_ERROR_NONE)
154 DBG("media_filter_set_order is failed, err");
157 media_content_connect();
158 ret = media_info_foreach_media_from_db(media_filter, _gallery_item_cb, &item_list);
159 if(ret != MEDIA_CONTENT_ERROR_NONE)
161 DBG("Cannot retrive data err[%d]", ret);
163 media_content_disconnect();
164 media_filter_destroy(media_filter);
168 void _clear_homescreen_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
170 unregister_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb);
171 unregister_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb);
174 Evas_Object* layout = NULL;
175 Elm_Object_Item *nf_it = NULL;
176 layout = create_wallpaper_list(temp_ad);
177 elm_naviframe_item_pop(temp_ad->nf);
178 nf_it = elm_naviframe_item_push(temp_ad->nf, NULL, NULL, NULL, layout, NULL);
179 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
187 ret = feedback_deinitialize();
188 if(ret != FEEDBACK_ERROR_NONE){
189 DBG("feedback_deinitialize failed");
194 void _homescreen_gl_viewtype_cb(void *data, Evas_Object *obj, void *event_info)
196 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
200 _show_viewtype_list(data);
204 /* 2: home background */
205 void _homescreen_gl_homebg_cb(void *data, Evas_Object *obj, void *event_info)
207 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
211 _show_homebg_list(data);
215 /* 3: Edit home screen */
216 void _homescreen_gl_edit_home_cb(void *data, Evas_Object *obj, void *event_info)
218 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
222 _show_edit_home(data);
227 void _homescreen_gl_edit_apps_cb(void *data, Evas_Object *obj, void *event_info)
229 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
233 _show_edit_apps(data);
237 /* homescreen main list */
238 char * _gl_homescreen_title_get(void *data, Evas_Object *obj, const char *part)
241 Homescreen_Item_Data *id = data;
242 int index = id->index;
244 if( !strcmp(part, "elm.text") )
246 snprintf(buf, sizeof(buf)-1, "%s", _(homescreen_menu_its[index].name));
252 Evas_Object * _gl_homescreen_check_get(void *data, Evas_Object *obj, const char *part)
254 Evas_Object *check = NULL;
256 Homescreen_Item_Data *id = data;
257 int index = id->index;
259 if( homescreen_menu_its[index % (HOME_MENU_COUNT)].is_check_type && !strcmp(part, "elm.icon") )
261 check = elm_check_add(obj);
262 elm_check_state_set(check, (homescreen_menu_its[index % (HOME_MENU_COUNT)].state) ? EINA_TRUE : EINA_FALSE);
263 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
264 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
272 void _homescreen_gl_del(void *data, Evas_Object *obj)
274 Homescreen_Item_Data *id = data;
279 Evas_Object* _create_homescreen_list(void* data)
284 DBG("%s", "_create_homescreen_list - appdata is null");
287 Evas_Object * genlist = NULL;
288 struct _homescreen_menu_item * menu_its = NULL;
293 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
294 itc->item_style = "1text";
295 itc->func.text_get = _gl_homescreen_title_get;
296 itc->func.del = _homescreen_gl_del;
298 Evas_Object *layout = elm_layout_add(ad->nf);
299 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
300 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
302 genlist = elm_genlist_add(layout);
303 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
305 menu_its = homescreen_menu_its;
307 for (idx = 0; idx < HOME_MENU_COUNT; idx++)
309 Homescreen_Item_Data *id = calloc(sizeof(Homescreen_Item_Data), 1);
311 id->item = elm_genlist_item_append(
312 genlist, // genlist object
316 ELM_GENLIST_ITEM_NONE,
317 menu_its[ idx ].func, // call back
320 elm_genlist_item_class_free(itc);
321 elm_object_part_content_set(layout, "elm.genlist", genlist);
326 char * _get_homeview_type_subtitle()
329 vconf_get_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, &value);
330 DBG("VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT : %d", value);
332 char * substr = NULL;
333 if(value==SETTING_HOMESCREEN_TYPE_1_1){
335 snprintf(buf, sizeof(buf)-1, REPL(REPL(_(home_icon_sub_str[value]),"%1$d","%1$s"),"%2$d","%2$s") ,ICU_NUM(1) , ICU_NUM(1));
336 substr = strdup(buf);
340 snprintf(buf, sizeof(buf)-1, REPL(REPL(_(home_icon_sub_str[value]),"%1$d","%1$s"),"%2$d","%2$s") ,ICU_NUM(2) , ICU_NUM(2));
341 substr = strdup(buf);
347 static char * _gl_viewtype_title_get(void *data, Evas_Object *obj, const char *part)
349 Item_Data *id = data;
351 if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text")) {
354 snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_LARGE_ICONS_ABB"));
358 snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_SMALL_ICONS_ABB"));
362 else if (!strcmp(part, "elm.text.2"))
366 snprintf(buf, sizeof(buf)-1, "(%sX%s)" ,ICU_NUM(1) , ICU_NUM(1));
370 snprintf(buf, sizeof(buf)-1, "(%sX%s)" ,ICU_NUM(2) , ICU_NUM(2));
377 static Evas_Object * _gl_viewtype_radio_get(void *data, Evas_Object *obj, const char *part)
379 Evas_Object *radio = NULL;
380 Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
381 Item_Data *id = data;
383 if( !strcmp(part, "elm.icon") )
385 radio = elm_radio_add(obj);
386 elm_object_style_set(radio, "list");
387 elm_radio_state_value_set(radio, id->index);
388 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
389 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
390 evas_object_propagate_events_set(radio, EINA_FALSE);
391 evas_object_repeat_events_set(radio, EINA_TRUE);
392 elm_radio_group_add(radio, radio_main);
398 static void _viewtype_gl_del(void *data, Evas_Object *obj)
400 Item_Data *id = data;
405 static void _viewtype_gl_cb(void *data, Evas_Object *obj, void *event_info)
407 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
410 vconf_set_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, idx);
412 //elm_genlist_realized_items_update(g_screen_time_genlist);
413 elm_naviframe_item_pop(temp_ad->nf);
414 if(!temp_ad->homescreen_rdg)
416 evas_object_del(temp_ad->homescreen_rdg);
417 temp_ad->homescreen_rdg = NULL;
421 void _show_viewtype_list(void* data)
426 DBG("%s", "_show_viewtype_list - appdata is null");
429 Evas_Object *layout = NULL;
430 Evas_Object *genlist = NULL;
431 Elm_Object_Item *nf_it = NULL;
437 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
438 itc->item_style = "2text.1icon.1";
439 itc->func.text_get = _gl_viewtype_title_get;
440 itc->func.content_get = _gl_viewtype_radio_get;
441 itc->func.del = _viewtype_gl_del;
443 layout = elm_layout_add(ad->nf);
444 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
445 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
447 genlist = elm_genlist_add(layout);
448 elm_genlist_block_count_set(genlist, 14);
449 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
450 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
452 for( idx = 0; idx < VIEWTYPE_COUNT; idx++ )
454 Item_Data *id = calloc(sizeof(Item_Data), 1);
456 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _viewtype_gl_cb, (void*)idx);
459 ad->homescreen_rdg = elm_radio_add(genlist);
460 elm_radio_state_value_set(ad->homescreen_rdg, -1);
462 vconf_get_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, &value);
463 elm_radio_value_set(ad->homescreen_rdg, value);
464 evas_object_data_set(genlist, "radio_main", ad->homescreen_rdg);
466 elm_object_part_content_set(layout, "elm.genlist", genlist);
468 elm_genlist_item_class_free(itc);
470 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
471 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
474 /* home background */
475 static char * _gl_homebg_title_get(void *data, Evas_Object *obj, const char *part)
478 Item_Data *id = data;
480 if( !strcmp(part, "elm.text") )
482 snprintf(buf, sizeof(buf)-1, "%s", _(homebg_menu_its[id->index].name));
487 static void _homebg_gl_del(void *data, Evas_Object *obj)
489 Item_Data *id = data;
494 static void _show_homebg_list(void* data)
499 DBG("%s", "_show_homebg_list - appdata is null");
502 Evas_Object *genlist = NULL;
503 Elm_Object_Item *nf_it = NULL;
504 struct _homebg_menu_item *menu_its = NULL;
509 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
510 itc->item_style = "1text";
511 itc->func.text_get = _gl_homebg_title_get;
512 itc->func.del = _homebg_gl_del;
514 Evas_Object *layout = elm_layout_add(ad->nf);
515 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
516 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
518 genlist = elm_genlist_add(layout);
519 elm_genlist_block_count_set(genlist, 14);
521 menu_its = homebg_menu_its;
523 for( idx = 0; idx < HOME_BG_LIST_COUNT; idx++ )
525 Item_Data *id = calloc(sizeof(Item_Data), 1);
527 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, menu_its[ idx ].func, ad);
530 g_home_bg_genlist = genlist;
532 elm_object_part_content_set(layout, "elm.genlist", genlist);
534 elm_genlist_item_class_free(itc);
536 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
537 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
540 static void _layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
542 page_data *pd = data;
546 static Eina_Bool animator_cb(void *data)
548 page_data *pd = (page_data *)data;
550 //Since mapbuf is not perfect, Enable them after the size calculation is finished
552 for( idx = 0; idx < BG_COLOR_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
553 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
555 return ECORE_CALLBACK_CANCEL;
558 static int _set_bg_color_type(int type_num)
560 if( type_num < 0 || type_num > BG_COLOR_COUNT-1 )
563 //set color -> set mode
564 vconf_set_str("db/wms/home_bg_palette", color[type_num].hex); //ex. fcb800
565 vconf_set_int("db/wms/home_bg_mode", 0);
567 //vconf_set_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, type_num);
568 DBG("color [%s]", color[type_num].hex);
573 static int _set_wallpaper_path(int thumbIdx)
575 if( thumbIdx < NUM_DEFAULT_THUMB_BUTTON || thumbIdx > DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON )
578 if(system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, thumb_path[thumbIdx]) != SYSTEM_SETTINGS_ERROR_NONE)
580 DBG("Homescreen set Error : %s", thumb_path[thumbIdx]);
584 //caution : set mode after change wallpaper
585 if(gallery_img_cnt && thumbIdx==NUM_DEFAULT_THUMB_BUTTON){
587 vconf_set_str("db/wms/home_bg_wallpaper", ".bgwallpaper.jpg");
588 vconf_set_int("db/wms/home_bg_mode", 2);
592 char *wallpaper_name=NULL;
593 wallpaper_name = strstr(thumb_path[thumbIdx], "wallpaper_");
594 vconf_set_str("db/wms/home_bg_wallpaper", wallpaper_name);
595 //DBG("wallpaper_name[%s]",wallpaper_name);
597 vconf_set_int("db/wms/home_bg_mode", 1);
604 static int prev_x = 0;
606 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
609 if(running_gallery == true){
614 touch_mode = TOUCH_DOWN;
615 Evas_Event_Mouse_Down *ev = event_info;
616 prev_x = ev->canvas.x;
619 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
621 if( touch_mode == TOUCH_MOVE )
624 int type = (int)data;
626 DBG("Setting - BG type is %d", type);
631 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
633 if(_set_bg_color_type(type))
635 if( temp_ad != NULL )
637 elm_naviframe_item_pop(temp_ad->nf);
641 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
643 _show_toast(temp_ad, toast);
647 DBG("Setting - BG type is wrong!!");
651 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
654 if(running_gallery == true){
659 Evas_Event_Mouse_Move *ev = event_info;
661 int cur_x = ev->cur.canvas.x;
663 if( abs(cur_x - prev_x) > 15)
665 // todo : confirm and remove
666 touch_mode = TOUCH_MOVE;
670 static void _mouse_up_wallpaper_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
673 if(running_gallery == true){
678 if( touch_mode == TOUCH_MOVE )
683 DBG("Setting - wallpaper idx is %d", idx);
691 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
692 _show_bg_slide_cb(temp_ad, obj, event_info);
697 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
698 _gallery_gl_cb(temp_ad, obj, event_info);
699 running_gallery = true;
700 elm_object_scroll_freeze_push(obj);
704 if(_set_wallpaper_path(idx))
706 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
707 if( temp_ad != NULL )
709 elm_naviframe_item_pop(temp_ad->nf);
713 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
715 _show_toast(temp_ad, toast);
719 DBG("Setting - wallpaper path is wrong!!");
723 static void _page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
728 vconf_get_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, &idx);
729 page = (idx-1)/WALLPAPER_CNT_PER_PAGE;
733 elm_scroller_page_show(obj, page, 0);
736 static Evas_Object* _create_index(Evas_Object* parent)
738 Evas_Object *layout, *scroller, *box, *page_layout, *page, *mapbuf;
745 layout = elm_layout_add(parent);
749 page_data *pd = calloc(1, sizeof(page_data));
753 elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
754 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
755 evas_object_show(layout);
756 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
758 /* Create Scroller */
759 scroller = elm_scroller_add(layout);
760 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
761 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
762 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
763 //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
764 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
765 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
766 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
767 elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
768 elm_object_part_content_set(layout, "scroller", scroller);
769 elm_object_style_set(scroller, "effect");
770 elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
771 evas_object_show(scroller);
774 box = elm_box_add(scroller);
775 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
776 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
777 elm_box_horizontal_set(box, EINA_TRUE);
778 elm_object_content_set(scroller, box);
779 evas_object_show(box);
782 int totalPageCnt = 0;
783 totalPageCnt = (BG_COLOR_COUNT+1)/NUM_MAX_THUMB_IN_PAGES;
784 for( index = 0; index < totalPageCnt; index++ )
786 page_layout = elm_layout_add(box);
787 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
788 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
790 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
791 evas_object_show(page_layout);
794 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
796 Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
797 evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
798 evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
799 elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
800 evas_object_show(thumbnail_layout);
803 page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
804 evas_object_color_set(page, color[thumbIdx].r, color[thumbIdx].g, color[thumbIdx].b, 255);
805 evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
806 evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
808 elm_object_part_content_set(thumbnail_layout, "thumb", page);
809 evas_object_show(page);
811 switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
814 elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
817 elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
822 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
823 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, (void*)(thumbIdx));
824 evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
826 elm_box_pack_end(box, page_layout);
829 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _page_show, NULL);
831 //ecore_animator_add(animator_cb, pd);
837 _wallpaper_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
839 wallpaper_page_data *pd = data;
844 wallpaper_animator_cb(void *data)
846 wallpaper_page_data *pd = (wallpaper_page_data *)data;
848 //Since mapbuf is not perfect, Enable them after the size calculation is finished
850 for( idx = 0; idx < DEFAULT_WALLPAPER_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
851 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
853 return ECORE_CALLBACK_CANCEL;
856 static void _wallpaper_page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
858 DBG("_wallpaper_page_show");
860 char* ret_wallpaper = NULL;
863 if(system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &ret_wallpaper) != SYSTEM_SETTINGS_ERROR_NONE)
869 for( idx; idx < DEFAULT_WALLPAPER_COUNT; idx++ )
871 if (ret_wallpaper && !strcmp(ret_wallpaper, thumb_path[idx]))
873 DBG("wallpaper[%s] idx [%d]",ret_wallpaper,idx);
874 page_idx = idx / WALLPAPER_CNT_PER_PAGE;
880 //set just first page to show
882 elm_scroller_page_show(obj, page_idx, 0);
885 static void _wallpaper_page_refresh(void *data, Evas * e, Evas_Object * obj, void *event_info)
887 DBG("is_prev_update , %d", is_prev_update);
890 bool _is_file_exist(const char* filepath)
892 if ( ecore_file_exists(filepath) == EINA_TRUE)
897 DBG("not exist %s", filepath);
901 static void _wallpaper_vconf_color_changed_cb(keynode_t *node, void *data)
903 char *bg_color = NULL;
904 int R = 0x00, G = 0x00, B = 0x00;
905 bg_color = vconf_get_str("db/wms/home_bg_palette");
906 colorstr_to_decimal(bg_color, &R, &G, &B);
907 evas_object_color_set(g_color_page, R, G, B, 255);
908 evas_object_show(g_color_page);
911 static void _wallpaper_vconf_wallpaper_changed_cb(keynode_t *node, void *data)
913 DBG("_wallpaper_vconf_wallpaper_changed_cb");
915 vconf_get_int("db/wms/home_bg_mode", &bg_mode);
916 if(bg_mode == 2 && !gallery_img_cnt){
917 DBG("gallery_img_cnt : %d",gallery_img_cnt);
919 if(g_wallpaper_layout)
921 evas_object_del(g_wallpaper_layout);
922 g_wallpaper_layout = NULL;
925 if(bg_mode == 2 && gallery_img_cnt){
927 char *bg_gallery = NULL;
928 bg_gallery = vconf_get_str(VCONFKEY_BGSET);
929 DBG(" bg mode 2 , gallery true , [%s]", bg_gallery);
930 elm_image_file_set(g_gallery_prv, bg_gallery, NULL);
931 evas_object_show(g_gallery_prv);
935 static Evas_Object* _create_wallpaper_thumbnail(Evas_Object* parent)
937 Evas_Object *layout, *scroller, *box, *page_layout, *thumbnail, *mapbuf, *color_page, *gallery_page;
940 Evas_Object *touch_eo=NULL;
945 if (_is_file_exist(CROPPED_GALLERY_DEFAULT_WALLPAPER_PATH) == true)
947 //cropped gallery image exist or not
948 gallery_img_cnt = 1; //fixed on 1page
953 layout = elm_layout_add(parent);
957 elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
958 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
959 evas_object_show(layout);
960 g_wallpaper_layout = layout;
962 /* Create Scroller */
963 scroller = elm_scroller_add(layout);
964 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
965 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
966 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
967 //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
968 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
969 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
970 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
971 elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
972 elm_object_part_content_set(layout, "scroller", scroller);
973 elm_object_style_set(scroller, "effect");
974 elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
975 evas_object_show(scroller);
978 box = elm_box_add(scroller);
979 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
980 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
981 elm_box_horizontal_set(box, EINA_TRUE);
982 elm_object_content_set(scroller, box);
983 evas_object_show(box);
986 int totalPageCnt = 0;
987 totalPageCnt = (DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1)/NUM_MAX_THUMB_IN_PAGES;
988 for( index = 0; index < totalPageCnt; index++ )
990 page_layout = elm_layout_add(box);
991 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
992 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
994 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
995 evas_object_show(page_layout);
998 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
1000 Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
1001 evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1002 evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1003 elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
1004 evas_object_show(thumbnail_layout);
1006 // color palette - set color box
1008 char *bg_color = NULL;
1009 int R = 0x00, G = 0x00, B = 0x00;
1010 bg_color = vconf_get_str("db/wms/home_bg_palette");
1011 colorstr_to_decimal(bg_color, &R, &G, &B);
1012 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
1013 color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
1014 evas_object_color_set(color_page, R, G, B, 255);
1015 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1016 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
1017 elm_object_part_content_set(thumbnail_layout, "thumb", color_page);
1018 evas_object_show(color_page);
1019 g_color_page = color_page;
1023 _get_last_img_path();
1024 gallery_page = elm_image_add(page_layout);
1025 elm_image_file_set(gallery_page, last_img_path, NULL);
1026 elm_object_part_content_set(thumbnail_layout, "thumb", gallery_page);
1027 evas_object_show(gallery_page);
1032 thumbnail = elm_image_add(page_layout);//thumb_path
1035 //default 1,2page thumbnail button : pallette btn, gallery btn
1036 if(gallery_img_cnt || thumbIdx == 0 || thumbIdx == 1){
1040 idx_arr = thumbIdx+1;
1043 snprintf(buf, sizeof(buf), "%s", thumb_path[idx_arr]);
1045 if ( ecore_file_exists(buf) )
1047 elm_image_file_set(thumbnail, buf, NULL);
1051 elm_image_file_set(thumbnail, NULL, NULL);
1053 elm_image_aspect_fixed_set(thumbnail, EINA_FALSE);
1054 elm_image_resizable_set(thumbnail, EINA_TRUE, EINA_TRUE);
1056 if(thumbIdx == 0 || thumbIdx == 1)
1057 elm_object_part_content_set(thumbnail_layout, "thumb_btn", thumbnail);
1059 elm_object_part_content_set(thumbnail_layout, "thumb", thumbnail);
1061 if(thumbIdx == 2 && gallery_img_cnt){
1062 g_gallery_prv = thumbnail;
1064 evas_object_show(thumbnail);
1066 switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
1069 elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
1072 elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
1078 touch_eo = color_page;
1079 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1081 else if(thumbIdx == 1){
1082 touch_eo = gallery_page;
1083 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1086 touch_eo = thumbnail;
1087 elm_object_signal_emit(thumbnail_layout, "thumbnail,default", "thumb_op");
1090 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
1091 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_UP, _mouse_up_wallpaper_cb, (void*)idx_arr);
1092 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
1094 elm_box_pack_end(box, page_layout);
1097 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _wallpaper_page_show, NULL);
1098 register_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb, NULL);
1099 register_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb, NULL);
1104 static Eina_Bool _wallpaper_pop_cb(void *data, Elm_Object_Item *it)
1106 DBG("_wallpaper_pop_cb");
1107 unregister_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb);
1108 unregister_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb);
1112 void _wallpaper_gl_cb(void *data, Evas_Object *obj, void *event_info)
1114 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1117 Evas_Object *layout_inner;
1118 Elm_Object_Item *it;
1120 ad = (appdata *)data;
1126 layout_inner = _create_wallpaper_thumbnail(ad->nf);
1127 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1128 elm_naviframe_item_pop_cb_set(it, _wallpaper_pop_cb, ad);
1129 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1132 Evas_Object *create_wallpaper_list(void *data)
1135 Evas_Object *layout_inner;
1136 Elm_Object_Item *it;
1138 ad = (appdata *)data;
1145 ret = feedback_initialize();
1146 if(ret != FEEDBACK_ERROR_NONE){
1147 DBG("feedback_initialize failed");
1150 layout_inner = _create_wallpaper_thumbnail(ad->nf);
1151 return layout_inner;
1154 void _gallery_result_cb(service_h service, service_h reply, service_result_e result, void *data)
1156 DBG("_gallery_result_cb");
1157 if(running_gallery){
1158 running_gallery = false;
1159 elm_object_scroll_freeze_pop(data);
1163 static Eina_Bool _timer_cb(void *data) {
1164 DBG("reset gallery running flag");
1165 if(running_gallery){
1166 running_gallery = false;
1167 running_gallery_timer = NULL;
1168 elm_object_scroll_freeze_pop(data);
1170 return ECORE_CALLBACK_CANCEL;
1173 void _gallery_gl_cb(void *data, Evas_Object *obj, void *event_info)
1175 //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1176 DBG("_gallery_gl_cb");
1179 Evas_Object *layout_inner;
1180 Elm_Object_Item *it;
1182 ad = (appdata *)data;
1186 if(!running_gallery){
1188 service_create(&service);
1189 service_set_app_id(service, "org.tizen.w-gallery.appcontrol.setting_wallpaper");
1190 service_send_launch_request(service, _gallery_result_cb, obj);
1191 service_destroy(service);
1193 if(running_gallery_timer) {
1194 ecore_timer_del(running_gallery_timer);
1195 running_gallery_timer = NULL;
1197 running_gallery_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)_timer_cb, obj);
1201 void _show_bg_slide_cb(void *data, Evas_Object *obj, void *event_info)
1203 //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1206 Evas_Object *layout_inner;
1207 Elm_Object_Item *it;
1209 ad = (appdata *)data;
1215 layout_inner = _create_index(ad->nf);
1216 it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1217 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1220 /* edit home screen */
1221 static void _show_edit_home(void* data)
1226 DBG("%s", "_show_edit_home - appdata is null");
1231 service_create(&service);
1232 service_set_app_id(service, "org.tizen.w-launcher-app");
1233 service_add_extra_data(service, "home_op", "edit");
1234 service_send_launch_request(service, NULL, NULL);
1235 service_destroy(service);
1238 /* edit home screen */
1239 static void _show_edit_apps(void* data)
1244 DBG("%s", "_show_edit_home - appdata is null");
1249 service_create(&service);
1250 service_set_app_id(service, "org.tizen.w-launcher-app");
1251 service_add_extra_data(service, "home_op", "apps_edit");
1252 service_send_launch_request(service, NULL, NULL);
1253 service_destroy(service);