tizen 2.3 release
[apps/home/b2-clocksetting.git] / src / setting-homescreen.c
1 /*
2  * Copyright (c) 2010 Samsung Electronics, Inc.
3  * All rights reserved.
4  *
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.
10  */
11  #include <app_manager.h>
12
13 #include <vconf.h>
14 #include <vconf-keys.h>
15 #include <system_settings.h>
16 #include <pkgmgr-info.h>
17
18 #include <media_content.h>
19 //#include <media_info_comm_feature.h>
20
21 #include <feedback.h>
22
23 #include "setting_data_vconf.h"
24 #include "setting-homescreen.h"
25 #include "setting_view_toast.h"
26 #include "util.h"
27
28 static struct _homescreen_menu_item homescreen_menu_its[] = {
29         { "IDS_HS_MBODY_HOME_ICON_SIZE_ABB",                                                    0, 0,   _homescreen_gl_viewtype_cb      },
30         { "IDS_ST_MBODY_HOME_BACKGROUND_ABB",   0, 0,   _wallpaper_gl_cb                },
31         { "IDS_ST_OPT_EDIT_HOME_SCREEN_ABB",                                                    0, 0,   _homescreen_gl_edit_home_cb             },
32         { NULL, 0, 0, NULL }
33 };
34
35 static struct _homebg_menu_item homebg_menu_its[] = {
36         { "IDS_COM_MBODY_COLOUR_PALETTE",               _show_bg_slide_cb      },
37         { "IDS_ST_BODY_WALLPAPERS",                     _wallpaper_gl_cb         },
38         { "IDS_ST_BODY_GALLERY",                                _gallery_gl_cb  },
39         { NULL, NULL }
40 };
41
42 static struct _color color[] = {
43                         { 255, 111, 32, "FF6F20" },
44                         { 244, 102, 141, "F4668D" },
45                         { 249, 55, 66, "F93742" },
46                         { 167, 63, 149, "A73F95" },
47                         { 132, 0, 196, "8400C4"  },
48                         { 3, 54, 224, "0336E0" },
49                         { 0, 175, 164, "00AFA4" },
50                         { 96, 192, 30, "60C01E" },
51                         { 31, 147, 0, "1F9300" },
52                         { 107, 58, 51 ,"6B3A33" },
53                         { 48, 48, 48, "303030" },
54                         { 0, 0, 0, "000000" },  //default black
55 };
56
57
58 static char * home_icon_sub_str[] = {
59                 "IDS_HS_OPT_LARGE_ICONS_ABB",
60                 "IDS_HS_OPT_SMALL_ICONS_ABB",
61 };
62
63 static char * thumb_path[] = {
64         SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/setting_icon_color_platte.png",
65         SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/setting_icon_wallpaper.png",
66         CROPPED_GALLERY_DEFAULT_WALLPAPER_PATH,
67         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_01.png",
68         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_02.png",
69         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_03.png",
70         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_04.png",
71         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_05.png",
72         SETTING_DEFAULT_WALLPAPER_PATH"/wallpaper_06.png"
73 };
74
75 static void _show_viewtype_list(void* data);
76 static void _show_homebg_list(void* data);
77 static void _show_edit_home(void* data);
78 static void _show_edit_apps(void* data);
79 static void _wallpaper_vconf_color_changed_cb(keynode_t *node, void *data);
80 static void _wallpaper_vconf_wallpaper_changed_cb(keynode_t *node, void *data);
81
82 static appdata* temp_ad = NULL;
83 static Evas_Object * g_home_bg_genlist = NULL;
84 static int touch_mode = NONE;
85 static int gallery_img_cnt = 0;
86 static int is_prev_update = 0;
87 static char* last_img_path = NULL;
88 static bool running_gallery = false;
89 static Ecore_Timer *running_gallery_timer = NULL;
90
91 static Evas_Object * g_wallpaper_layout = NULL;
92 static Evas_Object * g_wallpaper_scroller = NULL;
93 static Evas_Object * g_color_page = NULL;
94 static Evas_Object * g_gallery_prv = NULL;
95 static Evas_Object * g_wallpaper_box = NULL;
96 static bool wallpaper_touched = false;
97
98 static int _chk_pkg_install(const char *pkgid)
99 {
100         int ret = 0;
101         pkgmgrinfo_pkginfo_h pkginfo_h = NULL;
102
103         //get pkg appinfo handler
104         ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkginfo_h);
105         if (PMINFO_R_OK != ret || NULL == pkginfo_h) {
106                 DBG("un-installed pkg [%s]", pkgid);
107                 return FALSE;
108         }
109
110         if (pkginfo_h) {
111                 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
112         }
113         return TRUE;
114 }
115
116 static bool
117 _gallery_item_cb(media_info_h item, void *user_data)
118 {
119         if( user_data == NULL )
120         {
121                 DBG("user_data == NULL");
122                 return false;
123         }
124         media_info_get_file_path(item, &last_img_path);
125         //DBG("last gallery image path[%s]", last_img_path);
126
127         return false;
128 }
129
130 static void _get_last_img_path()
131 {
132         Eina_List *item_list = NULL;
133         filter_h media_filter;
134
135         int ret;
136         ret = media_filter_create(&media_filter);
137         if(ret != MEDIA_CONTENT_ERROR_NONE)
138         {
139                 DBG("Cannot create filter. err");
140         }
141
142         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);
143         if(ret != MEDIA_CONTENT_ERROR_NONE)
144         {
145                 DBG("Cannot set condition. err");
146         }
147
148         ret = media_filter_set_order(media_filter, MEDIA_CONTENT_ORDER_DESC, "MEDIA_TIMELINE, MEDIA_DISPLAY_NAME", MEDIA_CONTENT_COLLATE_NOCASE);
149         if(ret != MEDIA_CONTENT_ERROR_NONE)
150         {
151                 DBG("media_filter_set_order is failed, err");
152         }
153
154         media_content_connect();
155
156 #if 0
157         ret = media_info_foreach_media_from_db_with_media_mode(media_filter, _gallery_item_cb, &item_list);
158         if(ret != MEDIA_CONTENT_ERROR_NONE)
159         {
160                 DBG("Cannot retrive data err[%d]", ret);
161         }
162 #endif
163         media_content_disconnect();
164         media_filter_destroy(media_filter);
165 }
166
167
168 void _clear_homescreen_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
169 {
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);
172         if(is_prev_update)
173         {
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);
180                 is_prev_update = 0;
181         }
182         else{
183                 temp_ad = NULL;
184                 touch_mode = NONE;
185         }
186         int ret;
187         ret = feedback_deinitialize();
188         if(ret != FEEDBACK_ERROR_NONE){
189                 DBG("feedback_deinitialize failed");
190         }
191 }
192
193 /* 1: view type */
194 void _homescreen_gl_viewtype_cb(void *data, Evas_Object *obj, void *event_info)
195 {
196         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
197
198         if( data != NULL )
199         {
200                 _show_viewtype_list(data);
201         }
202 }
203
204 /* 2: home background */
205 void _homescreen_gl_homebg_cb(void *data, Evas_Object *obj, void *event_info)
206 {
207         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
208
209         if( data != NULL )
210         {
211                 _show_homebg_list(data);
212         }
213 }
214
215 /* 3: Edit home screen */
216 void _homescreen_gl_edit_home_cb(void *data, Evas_Object *obj, void *event_info)
217 {
218         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
219
220         if( data != NULL )
221         {
222                 _show_edit_home(data);
223         }
224 }
225
226 /* 4: Edit apps */
227 void _homescreen_gl_edit_apps_cb(void *data, Evas_Object *obj, void *event_info)
228 {
229         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
230
231         if( data != NULL )
232         {
233                 _show_edit_apps(data);
234         }
235 }
236
237 /* homescreen main list */
238 char * _gl_homescreen_title_get(void *data, Evas_Object *obj, const char *part)
239 {
240         char buf[1024];
241         Homescreen_Item_Data *id = data;
242         int index = id->index;
243
244         if( !strcmp(part, "elm.text") )
245         {
246                 snprintf(buf, sizeof(buf)-1, "%s", _(homescreen_menu_its[index].name));
247                 index++;
248         }
249         return strdup(buf);
250 }
251
252 Evas_Object * _gl_homescreen_check_get(void *data, Evas_Object *obj, const char *part)
253 {
254         Evas_Object *check = NULL;
255
256         Homescreen_Item_Data *id = data;
257         int index = id->index;
258
259         if( homescreen_menu_its[index % (HOME_MENU_COUNT)].is_check_type && !strcmp(part, "elm.icon") )
260         {
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);
265
266                 index++;
267         }
268
269         return check;
270 }
271
272 void _homescreen_gl_del(void *data, Evas_Object *obj)
273 {
274         Homescreen_Item_Data *id = data;
275         if (id)
276                 free(id);
277 }
278
279 Evas_Object* _create_homescreen_list(void* data)
280 {
281         appdata *ad = data;
282         if( ad == NULL )
283         {
284                 DBG("%s", "_create_homescreen_list - appdata is null");
285                 return NULL;
286         }
287         Evas_Object * genlist  = NULL;
288         struct _homescreen_menu_item * menu_its = NULL;
289         int idx = 0;
290
291         temp_ad = ad;
292
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;
297
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);
301
302         genlist = elm_genlist_add(layout);
303         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
304
305         menu_its = homescreen_menu_its;
306
307         for (idx = 0; idx < HOME_MENU_COUNT; idx++)
308         {
309                 Homescreen_Item_Data *id = calloc(sizeof(Homescreen_Item_Data), 1);
310                 id->index = idx;
311                 id->item = elm_genlist_item_append(
312                                                 genlist,                        // genlist object
313                                                 itc,                            // item class
314                                                 id,                         // data
315                                                 NULL,
316                                                 ELM_GENLIST_ITEM_NONE,
317                                                 menu_its[ idx ].func,   // call back
318                                                 ad);
319         }
320         elm_genlist_item_class_free(itc);
321         elm_object_part_content_set(layout, "elm.genlist", genlist);
322         return layout;
323 }
324
325 /* home view type */
326 char * _get_homeview_type_subtitle()
327 {
328         int value = 0;
329         vconf_get_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, &value);
330         DBG("VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT : %d", value);
331
332         char * substr = NULL;
333         substr = strdup(_(home_icon_sub_str[value]));
334
335         return substr;
336 }
337
338 static char * _gl_viewtype_title_get(void *data, Evas_Object *obj, const char *part)
339 {
340         Item_Data *id = data;
341         char * title = NULL;
342         if (!strcmp(part, "elm.text")){
343                 if (!id->index) {
344                         char buf[1024];
345                         snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_LARGE_ICONS_ABB"));
346                         title = strdup(buf);
347                 } else  {
348                         char buf[1024];
349                         snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_SMALL_ICONS_ABB"));
350                         title = strdup(buf);
351                 }
352         }
353         return title;
354 }
355
356 static Evas_Object * _gl_viewtype_radio_get(void *data, Evas_Object *obj, const char *part)
357 {
358         Evas_Object *radio = NULL;
359         Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
360         Item_Data *id = data;
361
362         if( !strcmp(part, "elm.icon") )
363         {
364                 radio = elm_radio_add(obj);
365                 elm_object_style_set(radio, "list");
366                 elm_radio_state_value_set(radio, id->index);
367                 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
368                 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
369                 evas_object_propagate_events_set(radio, EINA_FALSE);
370                 evas_object_repeat_events_set(radio, EINA_TRUE);
371                 elm_radio_group_add(radio, radio_main);
372         }
373
374         return radio;
375 }
376
377 static void _viewtype_gl_del(void *data, Evas_Object *obj)
378 {
379         Item_Data *id = data;
380         if (id)
381                 free(id);
382 }
383
384 static void _viewtype_gl_cb(void *data, Evas_Object *obj, void *event_info)
385 {
386         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
387
388         int idx = (int)data;
389         vconf_set_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, idx);
390
391         //elm_genlist_realized_items_update(g_screen_time_genlist);
392         elm_naviframe_item_pop(temp_ad->nf);
393         if(!temp_ad->homescreen_rdg)
394         {
395                 evas_object_del(temp_ad->homescreen_rdg);
396                 temp_ad->homescreen_rdg = NULL;
397         }
398 }
399
400 void _show_viewtype_list(void* data)
401 {
402         appdata *ad = data;
403         if( ad == NULL )
404         {
405                 DBG("%s", "_show_viewtype_list - appdata is null");
406                 return;
407         }
408         Evas_Object *layout = NULL;
409         Evas_Object *genlist = NULL;
410         Elm_Object_Item *nf_it = NULL;
411         int idx;
412         int value = 0;
413
414         temp_ad = ad;
415
416         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
417         itc->item_style = "1text.1icon.1";
418         itc->func.text_get = _gl_viewtype_title_get;
419         itc->func.content_get = _gl_viewtype_radio_get;
420         itc->func.del = _viewtype_gl_del;
421
422         layout = elm_layout_add(ad->nf);
423         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
424         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
425
426         genlist = elm_genlist_add(layout);
427         elm_genlist_block_count_set(genlist, 14);
428         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
429         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
430
431         for( idx = 0; idx < VIEWTYPE_COUNT; idx++ )
432         {
433                 Item_Data *id = calloc(sizeof(Item_Data), 1);
434                 id->index = idx;
435                 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _viewtype_gl_cb, (void*)idx);
436         }
437
438         ad->homescreen_rdg = elm_radio_add(genlist);
439         elm_radio_state_value_set(ad->homescreen_rdg, -1);
440
441         vconf_get_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, &value);
442         elm_radio_value_set(ad->homescreen_rdg, value);
443         evas_object_data_set(genlist, "radio_main", ad->homescreen_rdg);
444
445         elm_object_part_content_set(layout, "elm.genlist", genlist);
446
447         elm_genlist_item_class_free(itc);
448
449         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
450         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
451 }
452
453 /* home background */
454 static char * _gl_homebg_title_get(void *data, Evas_Object *obj, const char *part)
455 {
456         char buf[1024];
457         Item_Data *id = data;
458
459         if( !strcmp(part, "elm.text") )
460         {
461                 snprintf(buf, sizeof(buf)-1, "%s", _(homebg_menu_its[id->index].name));
462         }
463         return strdup(buf);
464 }
465
466 static void _homebg_gl_del(void *data, Evas_Object *obj)
467 {
468         Item_Data *id = data;
469         if (id)
470                 free(id);
471 }
472
473 static void _show_homebg_list(void* data)
474 {
475         appdata *ad = data;
476         if( ad == NULL )
477         {
478                 DBG("%s", "_show_homebg_list - appdata is null");
479                 return;
480         }
481         Evas_Object *genlist  = NULL;
482         Elm_Object_Item *nf_it = NULL;
483         struct _homebg_menu_item *menu_its = NULL;
484         int idx;
485
486         temp_ad = ad;
487
488         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
489         itc->item_style = "1text";
490         itc->func.text_get = _gl_homebg_title_get;
491         itc->func.del = _homebg_gl_del;
492
493         Evas_Object *layout = elm_layout_add(ad->nf);
494         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
495         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
496
497         genlist = elm_genlist_add(layout);
498         elm_genlist_block_count_set(genlist, 14);
499
500         menu_its = homebg_menu_its;
501
502         for( idx = 0; idx < HOME_BG_LIST_COUNT; idx++ )
503         {
504                 Item_Data *id = calloc(sizeof(Item_Data), 1);
505                 id->index = idx;
506                 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, menu_its[ idx ].func, ad);
507         }
508
509         g_home_bg_genlist = genlist;
510
511         elm_object_part_content_set(layout, "elm.genlist", genlist);
512
513         elm_genlist_item_class_free(itc);
514
515         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
516         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
517 }
518
519 static void _layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
520 {
521         page_data *pd = data;
522         free(pd);
523 }
524
525 static Eina_Bool animator_cb(void *data)
526 {
527         page_data *pd = (page_data *)data;
528
529         //Since mapbuf is not perfect, Enable them after the size calculation is finished
530         int idx;
531         for( idx = 0; idx < BG_COLOR_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
532                 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
533         }
534         return ECORE_CALLBACK_CANCEL;
535 }
536
537 static int _set_bg_color_type(int type_num)
538 {
539         if( type_num < 0 || type_num > BG_COLOR_COUNT-1 )
540                 return FALSE;
541
542         //set color -> set mode
543         vconf_set_str("db/wms/home_bg_palette", color[type_num].hex);   //ex. fcb800
544         vconf_set_int("db/wms/home_bg_mode", 0);
545
546         //vconf_set_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, type_num);
547         DBG("color [%s]", color[type_num].hex);
548
549         return TRUE;
550 }
551
552 static int _set_wallpaper_path(int thumbIdx)
553 {
554         if( thumbIdx < NUM_DEFAULT_THUMB_BUTTON || thumbIdx > DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON )
555                 return FALSE;
556
557         if(system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, thumb_path[thumbIdx]) != SYSTEM_SETTINGS_ERROR_NONE)
558         {
559                 DBG("Homescreen set Error : %s", thumb_path[thumbIdx]);
560                 return FALSE;
561         }
562
563         //caution : set mode after change wallpaper
564         if(gallery_img_cnt && thumbIdx==NUM_DEFAULT_THUMB_BUTTON){
565                 //2:gallery
566                 vconf_set_str("db/wms/home_bg_wallpaper", ".bgwallpaper.jpg");
567                 vconf_set_int("db/wms/home_bg_mode", 2);
568         }
569         else{
570                 //1:wallpaper
571                 char *wallpaper_name=NULL;
572                 wallpaper_name = strstr(thumb_path[thumbIdx], "wallpaper_");
573                 vconf_set_str("db/wms/home_bg_wallpaper", wallpaper_name);
574                 //DBG("wallpaper_name[%s]",wallpaper_name);
575
576                 vconf_set_int("db/wms/home_bg_mode", 1);
577         }
578
579         return TRUE;
580 }
581
582
583 static int prev_x = 0;
584
585 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
586 {
587         if(running_gallery == true){
588                 touch_mode = NONE;
589                 return;
590         }
591
592         touch_mode = TOUCH_DOWN;
593         Evas_Event_Mouse_Down *ev = event_info;
594         prev_x = ev->canvas.x;
595 }
596
597 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
598 {
599         if( touch_mode == TOUCH_MOVE )
600                 return;
601
602         int type = (int)data;
603
604         DBG("Setting - BG type is %d", type);
605
606         prev_x = 0;
607         touch_mode = NONE;
608
609         feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
610         // set gb vconf
611         if(_set_bg_color_type(type))
612         {
613                 if( temp_ad != NULL )
614                 {
615                         elm_naviframe_item_pop(temp_ad->nf);
616                 }
617
618                 // automatic freed!!
619                 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
620                 if( toast ) {
621                         _show_toast(temp_ad, toast);
622                 }
623         } else
624         {
625                 DBG("Setting - BG type is wrong!!");
626         }
627 }
628
629 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
630 {
631         if(running_gallery == true){
632                 touch_mode = NONE;
633                 return;
634         }
635
636         Evas_Event_Mouse_Move *ev = event_info;
637
638         int cur_x = ev->cur.canvas.x;
639
640         if( abs(cur_x - prev_x) > 15)
641         {
642                 // todo : confirm and remove
643                 touch_mode = TOUCH_MOVE;
644         }
645 }
646
647 static void _mouse_up_wallpaper_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
648 {
649         if(running_gallery == true){
650                 touch_mode = NONE;
651                 return;
652         }
653
654         if( touch_mode == TOUCH_MOVE )
655                 return;
656
657         int idx = (int)data;
658
659         DBG("Setting - wallpaper idx is %d", idx);
660
661         prev_x = 0;
662         touch_mode = NONE;
663
664         // set gb vconf
665         if(idx == 0)
666         {
667                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
668                 _show_bg_slide_cb(temp_ad, obj, event_info);
669                 return;
670         }
671         else if(idx == 1)
672         {
673                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
674                 _gallery_gl_cb(temp_ad, obj, event_info);
675                 running_gallery = true;
676                 elm_object_scroll_freeze_push(obj);
677                 return;
678         }
679
680         if(_set_wallpaper_path(idx))
681         {
682                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
683                 wallpaper_touched = true;
684                 if( temp_ad != NULL )
685                 {
686                         elm_naviframe_item_pop(temp_ad->nf);
687                 }
688
689                 // automatic freed!!
690                 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
691                 if( toast ) {
692                         _show_toast(temp_ad, toast);
693                 }
694
695         } else
696         {
697                 DBG("Setting - wallpaper path is wrong!!");
698         }
699 }
700
701 static void _page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
702 {
703         int idx = 0;
704         int page;
705 #if 0
706         vconf_get_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, &idx);
707         page = (idx-1)/WALLPAPER_CNT_PER_PAGE;
708 #endif
709         //first page show
710         page = 0;
711         elm_scroller_page_show(obj, page, 0);
712 }
713
714 static Evas_Object* _create_index(Evas_Object* parent)
715 {
716         Evas_Object *layout, *scroller, *box, *page_layout, *page, *mapbuf;
717         int index;
718
719         if (parent == NULL)
720                 return NULL;
721
722         /* Create Layout */
723         layout = elm_layout_add(parent);
724         if (layout == NULL)
725                 return NULL;
726
727         page_data *pd = calloc(1, sizeof(page_data));
728         if (pd == NULL)
729                 return NULL;
730
731         elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
732         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
733         evas_object_show(layout);
734         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
735
736         /* Create Scroller */
737         scroller = elm_scroller_add(layout);
738         elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
739         evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
740         evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
741         //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
742         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
743         elm_scroller_page_scroll_limit_set(scroller, 1, 0);
744         elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
745         elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
746         elm_object_part_content_set(layout, "scroller", scroller);
747         elm_object_style_set(scroller, "effect");
748         elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
749         evas_object_show(scroller);
750
751         /* Create Box */
752         box = elm_box_add(scroller);
753         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
754         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
755         elm_box_horizontal_set(box, EINA_TRUE);
756         elm_object_content_set(scroller, box);
757         evas_object_show(box);
758
759
760         int totalPageCnt = 0;
761         totalPageCnt = (BG_COLOR_COUNT+1)/NUM_MAX_THUMB_IN_PAGES;
762         for( index = 0; index < totalPageCnt; index++ )
763         {
764                 page_layout = elm_layout_add(box);
765                 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
766                 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
767
768                 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
769                 evas_object_show(page_layout);
770
771                 int thumbIdx = 0;
772                 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
773                 {
774                         Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
775                         evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
776                         evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
777                         elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
778                         evas_object_show(thumbnail_layout);
779
780                         // page content
781                         page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
782                         evas_object_color_set(page, color[thumbIdx].r, color[thumbIdx].g, color[thumbIdx].b, 255);
783                         evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
784                         evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
785
786                         elm_object_part_content_set(thumbnail_layout, "thumb", page);
787                         evas_object_show(page);
788
789                         switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
790                         {
791                                 case 0:
792                                         elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
793                                         break;
794                                 case 1:
795                                         elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
796                                         break;
797                         }
798
799                         // touch event
800                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
801                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb,  (void*)(thumbIdx));
802                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
803                 }
804                 elm_box_pack_end(box, page_layout);
805         }
806
807         evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _page_show, NULL);
808
809         //ecore_animator_add(animator_cb, pd);
810
811         return layout;
812 }
813
814 static void
815 _wallpaper_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
816 {
817         wallpaper_page_data *pd = data;
818         free(pd);
819 }
820
821 static Eina_Bool
822 wallpaper_animator_cb(void *data)
823 {
824         wallpaper_page_data *pd = (wallpaper_page_data *)data;
825
826         //Since mapbuf is not perfect, Enable them after the size calculation is finished
827         int idx;
828         for( idx = 0; idx < DEFAULT_WALLPAPER_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
829                 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
830         }
831         return ECORE_CALLBACK_CANCEL;
832 }
833
834 static void _wallpaper_page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
835 {
836         DBG("_wallpaper_page_show");
837 #if 0
838         char* ret_wallpaper = NULL;
839         int idx=0;
840         int page_idx = 0;
841         if(system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &ret_wallpaper) != SYSTEM_SETTINGS_ERROR_NONE)
842         {
843                 page_idx = idx;
844         }
845         else
846         {
847                 for( idx; idx < DEFAULT_WALLPAPER_COUNT; idx++ )
848                 {
849                         if (ret_wallpaper && !strcmp(ret_wallpaper, thumb_path[idx]))
850                         {
851                                 DBG("wallpaper[%s] idx [%d]",ret_wallpaper,idx);
852                                 page_idx = idx / WALLPAPER_CNT_PER_PAGE;
853                                 break;
854                         }
855                 }
856         }
857 #endif
858         //set just first page to show
859         int page_idx = 0;
860         elm_scroller_page_show(obj, page_idx, 0);
861 }
862
863 static void _update_wallpaper()
864 {
865         Evas_Object *page_layout, *thumbnail, *color_page, *gallery_page, *touch_eo;
866         Evas_Object *box = g_wallpaper_box;
867
868         if (box && !wallpaper_touched) {
869                 elm_box_clear(box);
870                 int totalPageCnt = 0;
871                 totalPageCnt = (DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1)/NUM_MAX_THUMB_IN_PAGES;
872                 int index;
873                 for(index = 0; index < totalPageCnt; index++ )
874                 {
875                         page_layout = elm_layout_add(box);
876                         evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
877                         evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
878
879                         elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
880                         evas_object_show(page_layout);
881
882                         int thumbIdx = 0;
883                         for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
884                         {
885                                 DBG("total : %d, thumbIdx : %d",DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1, thumbIdx);
886                                 if(DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt == thumbIdx)
887                                 {
888                                         DBG("check break");
889                                         break;
890                                 }
891                                 Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
892                                 evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
893                                 evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
894                                 elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
895                                 evas_object_show(thumbnail_layout);
896                                 //elm_object_signal_emit(thumbnail_layout, "thumb_bg,white", "thumb_bg");
897
898                                 // color palette - set color box
899                                 if(thumbIdx == 0){
900                                         char *bg_color = NULL;
901                                         int R = 0x00, G = 0x00, B = 0x00;
902                                         bg_color = vconf_get_str("db/wms/home_bg_palette");
903                                         colorstr_to_decimal(bg_color, &R, &G, &B);
904                                         DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
905                                         color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
906                                         evas_object_color_set(color_page, R, G, B, 255);
907                                         evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
908                                         evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
909                                         elm_object_part_content_set(thumbnail_layout, "thumb", color_page);
910                                         evas_object_show(color_page);
911                                         g_color_page = color_page;
912                                 }
913
914                                 if(thumbIdx == 1){
915                                         _get_last_img_path();
916                                         gallery_page = elm_image_add(page_layout);
917                                         elm_image_file_set(gallery_page, last_img_path, NULL);
918                                         elm_object_part_content_set(thumbnail_layout, "thumb", gallery_page);
919                                         evas_object_show(gallery_page);
920                                 }
921
922                                 // page content
923                                 char buf[256];
924                                 thumbnail = elm_image_add(page_layout);//thumb_path
925
926                                 int idx_arr;
927                                 //default 1,2page thumbnail button : pallette btn, gallery btn
928                                 if(gallery_img_cnt || thumbIdx == 0 || thumbIdx == 1){
929                                         idx_arr = thumbIdx;
930                                 }
931                                 else{
932                                         idx_arr = thumbIdx+1;
933                                 }
934
935                                 snprintf(buf, sizeof(buf), "%s", thumb_path[idx_arr]);
936
937                                 if ( ecore_file_exists(buf) )
938                                 {
939                                         elm_image_file_set(thumbnail, buf, NULL);
940                                 }
941                                 else
942                                 {
943                                         elm_image_file_set(thumbnail, NULL, NULL);
944                                 }
945                                 elm_image_aspect_fixed_set(thumbnail, EINA_FALSE);
946                                 elm_image_resizable_set(thumbnail, EINA_TRUE, EINA_TRUE);
947
948                                 if(thumbIdx == 0 || thumbIdx == 1)
949                                         elm_object_part_content_set(thumbnail_layout, "thumb_btn", thumbnail);
950                                 else
951                                         elm_object_part_content_set(thumbnail_layout, "thumb", thumbnail);
952
953                                 if(thumbIdx == 2 && gallery_img_cnt){
954                                         g_gallery_prv = thumbnail;
955                                 }
956                                 evas_object_show(thumbnail);
957
958                                 // select page
959                             int bg_mode;
960                             vconf_get_int("db/wms/home_bg_mode", &bg_mode);
961
962                             if(bg_mode){
963                                         char *sel_wallpaper = NULL;
964                                         sel_wallpaper = vconf_get_str("db/menu_widget/bgset");
965                                         if(buf && !strcmp(buf, sel_wallpaper)){
966                                                 Evas_Object *selected_rect = elm_image_add(page_layout);
967                                                 elm_image_file_set(selected_rect, SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/settings_wallpaper_selected.png", NULL);
968                                                 elm_image_aspect_fixed_set(selected_rect, EINA_FALSE);
969                                                 elm_image_resizable_set(selected_rect, EINA_TRUE, EINA_TRUE);
970                                                 elm_object_part_content_set(thumbnail_layout, "thumb_select", selected_rect);
971                                                 evas_object_show(selected_rect);
972                                         }
973                             }
974
975                                 switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
976                                 {
977                                         case 0:
978                                                 elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
979                                                 break;
980                                         case 1:
981                                                 elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
982                                                 break;
983                                 }
984
985                                 // touch event
986                                 if(thumbIdx == 0){
987                                         touch_eo = color_page;
988                                         elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
989                                 }
990                                 else if(thumbIdx == 1){
991                                         touch_eo = gallery_page;
992                                         elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
993                                 }
994                                 else{
995                                         touch_eo = thumbnail;
996                                         elm_object_signal_emit(thumbnail_layout, "thumbnail,default", "thumb_op");
997                                 }
998
999                                 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
1000                                 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_UP, _mouse_up_wallpaper_cb,  (void*)idx_arr);
1001                                 evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
1002                         }
1003                         elm_box_pack_end(box, page_layout);
1004                 }
1005                 //_wallpaper_page_show(NULL, NULL, g_wallpaper_scroller, NULL);
1006         }
1007 }
1008
1009
1010 static void _wallpaper_page_refresh(void *data, Evas * e, Evas_Object * obj, void *event_info)
1011 {
1012         DBG("is_prev_update , %d", is_prev_update);
1013 }
1014
1015 bool _is_file_exist(const char* filepath)
1016 {
1017         if ( ecore_file_exists(filepath) == EINA_TRUE)
1018         {
1019                 DBG("exist");
1020                 return true;
1021         }
1022         DBG("not exist %s", filepath);
1023         return false;
1024 }
1025
1026 static void _wallpaper_vconf_color_changed_cb(keynode_t *node, void *data)
1027 {
1028                 char *bg_color = NULL;
1029                 int R = 0x00, G = 0x00, B = 0x00;
1030                 bg_color = vconf_get_str("db/wms/home_bg_palette");
1031                 colorstr_to_decimal(bg_color, &R, &G, &B);
1032                 evas_object_color_set(g_color_page, R, G, B, 255);
1033                 evas_object_show(g_color_page);
1034 }
1035
1036 static void _wallpaper_vconf_wallpaper_changed_cb(keynode_t *node, void *data)
1037 {
1038         DBG("_wallpaper_vconf_wallpaper_changed_cb");
1039         int bg_mode;
1040         vconf_get_int("db/wms/home_bg_mode", &bg_mode);
1041         if(bg_mode == 2 && !gallery_img_cnt){
1042                 DBG("gallery_img_cnt : %d",gallery_img_cnt);
1043                 is_prev_update = 1;
1044                 if(g_wallpaper_layout)
1045                 {
1046                         evas_object_del(g_wallpaper_layout);
1047                         g_wallpaper_layout = NULL;
1048                 }
1049         }
1050         if(bg_mode == 2 && gallery_img_cnt){
1051                 //gallery type
1052                 //char *bg_gallery = NULL;
1053                 //bg_gallery = vconf_get_str(VCONFKEY_BGSET);
1054                 //DBG(" bg mode 2 , gallery true , [%s]", bg_gallery);
1055                 //elm_image_file_set(g_gallery_prv, bg_gallery, NULL);
1056                 //evas_object_show(g_gallery_prv);
1057                 _update_wallpaper();
1058         }
1059
1060         if(bg_mode == 0 || bg_mode == 1)
1061         {
1062                 _update_wallpaper();
1063         }
1064         wallpaper_touched = false;
1065 }
1066
1067 static Evas_Object* _create_wallpaper_thumbnail(Evas_Object* parent)
1068 {
1069         Evas_Object *layout, *scroller, *box, *page_layout, *thumbnail, *mapbuf, *color_page, *gallery_page;
1070         int index;
1071
1072         Evas_Object *touch_eo=NULL;
1073
1074         if (parent == NULL)
1075                 return NULL;
1076
1077         if (_is_file_exist(CROPPED_GALLERY_DEFAULT_WALLPAPER_PATH) == true)
1078         {
1079                 //cropped gallery image exist or not
1080                 gallery_img_cnt = 1;    //fixed on 1page
1081         }
1082
1083
1084         /* Create Layout */
1085         layout = elm_layout_add(parent);
1086         if (layout == NULL)
1087                 return NULL;
1088
1089         elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
1090         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1091         evas_object_show(layout);
1092         g_wallpaper_layout = layout;
1093
1094         /* Create Scroller */
1095         scroller = elm_scroller_add(layout);
1096         elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
1097         evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1098         evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
1099         //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
1100         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
1101         elm_scroller_page_scroll_limit_set(scroller, 1, 0);
1102         elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
1103         elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
1104         elm_object_part_content_set(layout, "scroller", scroller);
1105         elm_object_style_set(scroller, "effect");
1106         elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
1107         evas_object_show(scroller);
1108         g_wallpaper_scroller = scroller;
1109
1110         /* Create Box */
1111         box = elm_box_add(scroller);
1112         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1113         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1114         elm_box_horizontal_set(box, EINA_TRUE);
1115         elm_object_content_set(scroller, box);
1116         evas_object_show(box);
1117         g_wallpaper_box = box;
1118
1119         int totalPageCnt = 0;
1120         totalPageCnt = (DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1)/NUM_MAX_THUMB_IN_PAGES;
1121         for( index = 0; index < totalPageCnt; index++ )
1122         {
1123                 page_layout = elm_layout_add(box);
1124                 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1125                 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1126
1127                 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
1128                 evas_object_show(page_layout);
1129
1130                 int thumbIdx = 0;
1131                 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
1132                 {
1133                         DBG("total : %d, thumbIdx : %d",DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1, thumbIdx);
1134                         if(DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt == thumbIdx)
1135                         {
1136                                 DBG("check break");
1137                                 break;
1138                         }
1139                         Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
1140                         evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1141                         evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1142                         elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
1143                         evas_object_show(thumbnail_layout);
1144                         //elm_object_signal_emit(thumbnail_layout, "thumb_bg,white", "thumb_bg");
1145
1146                         // color palette - set color box
1147                         if(thumbIdx == 0){
1148                                 char *bg_color = NULL;
1149                                 int R = 0x00, G = 0x00, B = 0x00;
1150                                 bg_color = vconf_get_str("db/wms/home_bg_palette");
1151                                 colorstr_to_decimal(bg_color, &R, &G, &B);
1152                                 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
1153                                 color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
1154                                 evas_object_color_set(color_page, R, G, B, 255);
1155                                 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1156                                 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
1157                                 elm_object_part_content_set(thumbnail_layout, "thumb", color_page);
1158                                 evas_object_show(color_page);
1159                                 g_color_page = color_page;
1160                         }
1161
1162                         if(thumbIdx == 1){
1163                                 _get_last_img_path();
1164                                 gallery_page = elm_image_add(page_layout);
1165                                 elm_image_file_set(gallery_page, last_img_path, NULL);
1166                                 elm_object_part_content_set(thumbnail_layout, "thumb", gallery_page);
1167                                 evas_object_show(gallery_page);
1168                         }
1169
1170                         // page content
1171                         char buf[256];
1172                         thumbnail = elm_image_add(page_layout);//thumb_path
1173
1174                         int idx_arr;
1175                         //default 1,2page thumbnail button : pallette btn, gallery btn
1176                         if(gallery_img_cnt || thumbIdx == 0 || thumbIdx == 1){
1177                                 idx_arr = thumbIdx;
1178                         }
1179                         else{
1180                                 idx_arr = thumbIdx+1;
1181                         }
1182
1183                         snprintf(buf, sizeof(buf), "%s", thumb_path[idx_arr]);
1184
1185                         if ( ecore_file_exists(buf) )
1186                         {
1187                                 elm_image_file_set(thumbnail, buf, NULL);
1188                         }
1189                         else
1190                         {
1191                                 elm_image_file_set(thumbnail, NULL, NULL);
1192                         }
1193                         elm_image_aspect_fixed_set(thumbnail, EINA_FALSE);
1194                         elm_image_resizable_set(thumbnail, EINA_TRUE, EINA_TRUE);
1195
1196                         if(thumbIdx == 0 || thumbIdx == 1)
1197                                 elm_object_part_content_set(thumbnail_layout, "thumb_btn", thumbnail);
1198                         else
1199                                 elm_object_part_content_set(thumbnail_layout, "thumb", thumbnail);
1200
1201                         if(thumbIdx == 2 && gallery_img_cnt){
1202                                 g_gallery_prv = thumbnail;
1203                         }
1204                         evas_object_show(thumbnail);
1205
1206                         // select page
1207                         int bg_mode;
1208                         vconf_get_int("db/wms/home_bg_mode", &bg_mode);
1209
1210                         if(bg_mode){
1211                                 char *sel_wallpaper = NULL;
1212                                 sel_wallpaper = vconf_get_str("db/menu_widget/bgset");
1213                                 if(buf && !strcmp(buf, sel_wallpaper)){
1214                                         Evas_Object *selected_rect = elm_image_add(page_layout);
1215                                         elm_image_file_set(selected_rect, SETTING_DEFAULT_WALLPAPER_PATH"/btn_icons/settings_wallpaper_selected.png", NULL);
1216                                         elm_image_aspect_fixed_set(selected_rect, EINA_FALSE);
1217                                         elm_image_resizable_set(selected_rect, EINA_TRUE, EINA_TRUE);
1218                                         elm_object_part_content_set(thumbnail_layout, "thumb_select", selected_rect);
1219                                         evas_object_show(selected_rect);
1220                                 }
1221                         }
1222
1223                         switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
1224                         {
1225                                 case 0:
1226                                         elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
1227                                         break;
1228                                 case 1:
1229                                         elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
1230                                         break;
1231                         }
1232
1233                         // touch event
1234                         if(thumbIdx == 0){
1235                                 touch_eo = color_page;
1236                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1237                         }
1238                         else if(thumbIdx == 1){
1239                                 touch_eo = gallery_page;
1240                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1241                         }
1242                         else{
1243                                 touch_eo = thumbnail;
1244                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,default", "thumb_op");
1245                         }
1246
1247                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
1248                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_UP, _mouse_up_wallpaper_cb,  (void*)idx_arr);
1249                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
1250                 }
1251                 elm_box_pack_end(box, page_layout);
1252         }
1253
1254         evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _wallpaper_page_show, NULL);
1255         register_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb, NULL);
1256         register_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb, NULL);
1257
1258         return layout;
1259 }
1260
1261 static Eina_Bool _wallpaper_pop_cb(void *data, Elm_Object_Item *it)
1262 {
1263         DBG("_wallpaper_pop_cb");
1264         unregister_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb);
1265         unregister_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb);
1266         return EINA_TRUE;
1267 }
1268
1269 void _wallpaper_gl_cb(void *data, Evas_Object *obj, void *event_info)
1270 {
1271         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1272
1273         appdata *ad;
1274         Evas_Object *layout_inner;
1275         Elm_Object_Item *it;
1276
1277         ad = (appdata *)data;
1278         if (ad == NULL)
1279             return;
1280
1281         temp_ad = ad;
1282
1283         layout_inner = _create_wallpaper_thumbnail(ad->nf);
1284         it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1285         elm_naviframe_item_pop_cb_set(it, _wallpaper_pop_cb, ad);
1286         elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1287 }
1288
1289 Evas_Object *create_wallpaper_list(void *data)
1290 {
1291         appdata *ad;
1292         Evas_Object *layout_inner;
1293         Elm_Object_Item *it;
1294
1295         ad = (appdata *)data;
1296         if (ad == NULL)
1297             return NULL;
1298
1299         temp_ad = ad;
1300
1301         int ret;
1302         ret = feedback_initialize();
1303         if(ret != FEEDBACK_ERROR_NONE){
1304                 DBG("feedback_initialize failed");
1305         }
1306
1307         layout_inner = _create_wallpaper_thumbnail(ad->nf);
1308         return layout_inner;
1309 }
1310
1311 void _gallery_result_cb(app_control_h service, app_control_h reply, app_control_result_e result, void *data)
1312 {
1313         DBG("_gallery_result_cb");
1314         if(running_gallery){
1315                 running_gallery = false;
1316                 elm_object_scroll_freeze_pop(data);
1317         }
1318 }
1319
1320 static Eina_Bool _timer_cb(void *data) {
1321         DBG("reset gallery running flag");
1322         if(running_gallery){
1323                 running_gallery = false;
1324                 running_gallery_timer = NULL;
1325                 elm_object_scroll_freeze_pop(data);
1326         }
1327         return ECORE_CALLBACK_CANCEL;
1328 }
1329
1330 void _gallery_gl_cb(void *data, Evas_Object *obj, void *event_info)
1331 {
1332         //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1333         DBG("_gallery_gl_cb");
1334
1335         appdata *ad;
1336         Evas_Object *layout_inner;
1337         Elm_Object_Item *it;
1338
1339         ad = (appdata *)data;
1340         if (ad == NULL)
1341             return;
1342
1343         //app_manager_is_running("org.tizen.w-gallery.appcontrol.setting_wallpaper", &running);
1344         if(!running_gallery){
1345                 app_control_h service;
1346                 app_control_create(&service);
1347                 app_control_set_app_id(service, "org.tizen.w-gallery.appcontrol.setting_wallpaper");
1348                 app_control_send_launch_request(service, _gallery_result_cb, obj);
1349                 app_control_destroy(service);
1350
1351                 if(running_gallery_timer) {
1352                         ecore_timer_del(running_gallery_timer);
1353                         running_gallery_timer = NULL;
1354                 }
1355                 running_gallery_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)_timer_cb, obj);
1356         }
1357 }
1358
1359 void _show_bg_slide_cb(void *data, Evas_Object *obj, void *event_info)
1360 {
1361         //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1362
1363         appdata *ad;
1364         Evas_Object *layout_inner;
1365         Elm_Object_Item *it;
1366
1367         ad = (appdata *)data;
1368         if (ad == NULL)
1369                 return;
1370
1371         temp_ad = ad;
1372
1373         layout_inner = _create_index(ad->nf);
1374         it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1375         elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1376 }
1377
1378 /* edit home screen */
1379 static void _show_edit_home(void* data)
1380 {
1381         appdata *ad = data;
1382         if( ad == NULL )
1383         {
1384                 DBG("%s", "_show_edit_home - appdata is null");
1385                 return;
1386         }
1387
1388         app_control_h service;
1389         app_control_create(&service);
1390         app_control_set_app_id(service, "org.tizen.w-launcher-app");
1391         app_control_add_extra_data(service, "home_op", "edit");
1392         app_control_send_launch_request(service, NULL, NULL);
1393         app_control_destroy(service);
1394 }
1395
1396 /* edit home screen */
1397 static void _show_edit_apps(void* data)
1398 {
1399         appdata *ad = data;
1400         if( ad == NULL )
1401         {
1402                 DBG("%s", "_show_edit_home - appdata is null");
1403                 return;
1404         }
1405
1406         app_control_h service;
1407         app_control_create(&service);
1408         app_control_set_app_id(service, "org.tizen.w-launcher-app");
1409         app_control_add_extra_data(service, "home_op", "apps_edit");
1410         app_control_send_launch_request(service, NULL, NULL);
1411         app_control_destroy(service);
1412 }
1413