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