Initialize Tizen 2.3
[apps/home/b2-clocksetting.git] / src / setting-homescreen.c
1 /*
2  * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
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.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_ST_BODY_LARGE_ICONS_HP1SDXP2SD_ABB",
66                 "IDS_ST_BODY_SMALL_ICONS_HP1SDXP2SD_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_color_page = NULL;
99 static Evas_Object * g_gallery_prv = NULL;
100
101 static int _chk_pkg_install(const char *pkgid)
102 {
103         int ret = 0;
104         pkgmgrinfo_pkginfo_h pkginfo_h = NULL;
105
106         //get pkg appinfo handler
107         ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkginfo_h);
108         if (PMINFO_R_OK != ret || NULL == pkginfo_h) {
109                 DBG("un-installed pkg [%s]", pkgid);
110                 return FALSE;
111         }
112
113         if (pkginfo_h) {
114                 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
115         }
116         return TRUE;
117 }
118
119 static bool
120 _gallery_item_cb(media_info_h item, void *user_data)
121 {
122         if( user_data == NULL )
123         {
124                 DBG("user_data == NULL");
125                 return false;
126         }
127         media_info_get_file_path(item, &last_img_path);
128         //DBG("last gallery image path[%s]", last_img_path);
129
130         return false;
131 }
132
133 static void _get_last_img_path()
134 {
135         Eina_List *item_list = NULL;
136         filter_h media_filter;
137
138         int ret;
139         ret = media_filter_create(&media_filter);
140         if(ret != MEDIA_CONTENT_ERROR_NONE)
141         {
142                 DBG("Cannot create filter. err");
143         }
144
145         ret = media_filter_set_condition(media_filter, "((MEDIA_TYPE=0 OR MEDIA_TYPE=1) AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121))", MEDIA_CONTENT_COLLATE_DEFAULT);
146         if(ret != MEDIA_CONTENT_ERROR_NONE)
147         {
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         {
154                 DBG("media_filter_set_order is failed, err");
155         }
156
157         media_content_connect();
158         ret = media_info_foreach_media_from_db(media_filter, _gallery_item_cb, &item_list);
159         if(ret != MEDIA_CONTENT_ERROR_NONE)
160         {
161                 DBG("Cannot retrive data err[%d]", ret);
162         }
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         if(value==SETTING_HOMESCREEN_TYPE_1_1){
334                 char buf[1024];
335                 snprintf(buf, sizeof(buf)-1, REPL(REPL(_(home_icon_sub_str[value]),"%1$d","%1$s"),"%2$d","%2$s") ,ICU_NUM(1) , ICU_NUM(1));
336                 substr = strdup(buf);
337         }
338         else{
339                 char buf[1024];
340                 snprintf(buf, sizeof(buf)-1, REPL(REPL(_(home_icon_sub_str[value]),"%1$d","%1$s"),"%2$d","%2$s") ,ICU_NUM(2) , ICU_NUM(2));
341                 substr = strdup(buf);
342         }
343
344         return substr;
345 }
346
347 static char * _gl_viewtype_title_get(void *data, Evas_Object *obj, const char *part)
348 {
349         Item_Data *id = data;
350         char * title = NULL;
351         if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text")) {
352                 if (!id->index) {
353                         char buf[1024];
354                         snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_LARGE_ICONS_ABB"));
355                         title = strdup(buf);
356                 } else  {
357                         char buf[1024];
358                         snprintf(buf, sizeof(buf)-1, "%s",_("IDS_HS_OPT_SMALL_ICONS_ABB"));
359                         title = strdup(buf);
360                 }
361         }
362         else if (!strcmp(part, "elm.text.2"))
363         {
364                 if (!id->index) {
365                         char buf[1024];
366                         snprintf(buf, sizeof(buf)-1, "(%sX%s)" ,ICU_NUM(1) , ICU_NUM(1));
367                         title = strdup(buf);
368                 } else  {
369                         char buf[1024];
370                         snprintf(buf, sizeof(buf)-1, "(%sX%s)" ,ICU_NUM(2) , ICU_NUM(2));
371                         title = strdup(buf);
372                 }
373         }
374         return title;
375 }
376
377 static Evas_Object * _gl_viewtype_radio_get(void *data, Evas_Object *obj, const char *part)
378 {
379         Evas_Object *radio = NULL;
380         Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
381         Item_Data *id = data;
382
383         if( !strcmp(part, "elm.icon") )
384         {
385                 radio = elm_radio_add(obj);
386                 elm_object_style_set(radio, "list");
387                 elm_radio_state_value_set(radio, id->index);
388                 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
389                 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
390                 evas_object_propagate_events_set(radio, EINA_FALSE);
391                 evas_object_repeat_events_set(radio, EINA_TRUE);
392                 elm_radio_group_add(radio, radio_main);
393         }
394
395         return radio;
396 }
397
398 static void _viewtype_gl_del(void *data, Evas_Object *obj)
399 {
400         Item_Data *id = data;
401         if (id)
402                 free(id);
403 }
404
405 static void _viewtype_gl_cb(void *data, Evas_Object *obj, void *event_info)
406 {
407         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
408
409         int idx = (int)data;
410         vconf_set_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, idx);
411
412         //elm_genlist_realized_items_update(g_screen_time_genlist);
413         elm_naviframe_item_pop(temp_ad->nf);
414         if(!temp_ad->homescreen_rdg)
415         {
416                 evas_object_del(temp_ad->homescreen_rdg);
417                 temp_ad->homescreen_rdg = NULL;
418         }
419 }
420
421 void _show_viewtype_list(void* data)
422 {
423         appdata *ad = data;
424         if( ad == NULL )
425         {
426                 DBG("%s", "_show_viewtype_list - appdata is null");
427                 return;
428         }
429         Evas_Object *layout = NULL;
430         Evas_Object *genlist = NULL;
431         Elm_Object_Item *nf_it = NULL;
432         int idx;
433         int value = 0;
434
435         temp_ad = ad;
436
437         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
438         itc->item_style = "2text.1icon.1";
439         itc->func.text_get = _gl_viewtype_title_get;
440         itc->func.content_get = _gl_viewtype_radio_get;
441         itc->func.del = _viewtype_gl_del;
442
443         layout = elm_layout_add(ad->nf);
444         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
445         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
446
447         genlist = elm_genlist_add(layout);
448         elm_genlist_block_count_set(genlist, 14);
449         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
450         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
451
452         for( idx = 0; idx < VIEWTYPE_COUNT; idx++ )
453         {
454                 Item_Data *id = calloc(sizeof(Item_Data), 1);
455                 id->index = idx;
456                 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _viewtype_gl_cb, (void*)idx);
457         }
458
459         ad->homescreen_rdg = elm_radio_add(genlist);
460         elm_radio_state_value_set(ad->homescreen_rdg, -1);
461
462         vconf_get_int(VCONFKEY_SETAPPL_HOMESCREEN_TYPE_INT, &value);
463         elm_radio_value_set(ad->homescreen_rdg, value);
464         evas_object_data_set(genlist, "radio_main", ad->homescreen_rdg);
465
466         elm_object_part_content_set(layout, "elm.genlist", genlist);
467
468         elm_genlist_item_class_free(itc);
469
470         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
471         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
472 }
473
474 /* home background */
475 static char * _gl_homebg_title_get(void *data, Evas_Object *obj, const char *part)
476 {
477         char buf[1024];
478         Item_Data *id = data;
479
480         if( !strcmp(part, "elm.text") )
481         {
482                 snprintf(buf, sizeof(buf)-1, "%s", _(homebg_menu_its[id->index].name));
483         }
484         return strdup(buf);
485 }
486
487 static void _homebg_gl_del(void *data, Evas_Object *obj)
488 {
489         Item_Data *id = data;
490         if (id)
491                 free(id);
492 }
493
494 static void _show_homebg_list(void* data)
495 {
496         appdata *ad = data;
497         if( ad == NULL )
498         {
499                 DBG("%s", "_show_homebg_list - appdata is null");
500                 return;
501         }
502         Evas_Object *genlist  = NULL;
503         Elm_Object_Item *nf_it = NULL;
504         struct _homebg_menu_item *menu_its = NULL;
505         int idx;
506
507         temp_ad = ad;
508
509         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
510         itc->item_style = "1text";
511         itc->func.text_get = _gl_homebg_title_get;
512         itc->func.del = _homebg_gl_del;
513
514         Evas_Object *layout = elm_layout_add(ad->nf);
515         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
516         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
517
518         genlist = elm_genlist_add(layout);
519         elm_genlist_block_count_set(genlist, 14);
520
521         menu_its = homebg_menu_its;
522
523         for( idx = 0; idx < HOME_BG_LIST_COUNT; idx++ )
524         {
525                 Item_Data *id = calloc(sizeof(Item_Data), 1);
526                 id->index = idx;
527                 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, menu_its[ idx ].func, ad);
528         }
529
530         g_home_bg_genlist = genlist;
531
532         elm_object_part_content_set(layout, "elm.genlist", genlist);
533
534         elm_genlist_item_class_free(itc);
535
536         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
537         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
538 }
539
540 static void _layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
541 {
542         page_data *pd = data;
543         free(pd);
544 }
545
546 static Eina_Bool animator_cb(void *data)
547 {
548         page_data *pd = (page_data *)data;
549
550         //Since mapbuf is not perfect, Enable them after the size calculation is finished
551         int idx;
552         for( idx = 0; idx < BG_COLOR_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
553                 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
554         }
555         return ECORE_CALLBACK_CANCEL;
556 }
557
558 static int _set_bg_color_type(int type_num)
559 {
560         if( type_num < 0 || type_num > BG_COLOR_COUNT-1 )
561                 return FALSE;
562
563         //set color -> set mode
564         vconf_set_str("db/wms/home_bg_palette", color[type_num].hex);   //ex. fcb800
565         vconf_set_int("db/wms/home_bg_mode", 0);
566
567         //vconf_set_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, type_num);
568         DBG("color [%s]", color[type_num].hex);
569
570         return TRUE;
571 }
572
573 static int _set_wallpaper_path(int thumbIdx)
574 {
575         if( thumbIdx < NUM_DEFAULT_THUMB_BUTTON || thumbIdx > DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON )
576                 return FALSE;
577
578         if(system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, thumb_path[thumbIdx]) != SYSTEM_SETTINGS_ERROR_NONE)
579         {
580                 DBG("Homescreen set Error : %s", thumb_path[thumbIdx]);
581                 return FALSE;
582         }
583
584         //caution : set mode after change wallpaper
585         if(gallery_img_cnt && thumbIdx==NUM_DEFAULT_THUMB_BUTTON){
586                 //2:gallery
587                 vconf_set_str("db/wms/home_bg_wallpaper", ".bgwallpaper.jpg");
588                 vconf_set_int("db/wms/home_bg_mode", 2);
589         }
590         else{
591                 //1:wallpaper
592                 char *wallpaper_name=NULL;
593                 wallpaper_name = strstr(thumb_path[thumbIdx], "wallpaper_");
594                 vconf_set_str("db/wms/home_bg_wallpaper", wallpaper_name);
595                 //DBG("wallpaper_name[%s]",wallpaper_name);
596
597                 vconf_set_int("db/wms/home_bg_mode", 1);
598         }
599
600         return TRUE;
601 }
602
603
604 static int prev_x = 0;
605
606 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
607 {
608         DBG("down");
609         if(running_gallery == true){
610                 touch_mode = NONE;
611                 return;
612         }
613
614         touch_mode = TOUCH_DOWN;
615         Evas_Event_Mouse_Down *ev = event_info;
616         prev_x = ev->canvas.x;
617 }
618
619 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
620 {
621         if( touch_mode == TOUCH_MOVE )
622                 return;
623
624         int type = (int)data;
625
626         DBG("Setting - BG type is %d", type);
627
628         prev_x = 0;
629         touch_mode = NONE;
630
631         feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
632         // set gb vconf
633         if(_set_bg_color_type(type))
634         {
635                 if( temp_ad != NULL )
636                 {
637                         elm_naviframe_item_pop(temp_ad->nf);
638                 }
639
640                 // automatic freed!!
641                 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
642                 if( toast ) {
643                         _show_toast(temp_ad, toast);
644                 }
645         } else
646         {
647                 DBG("Setting - BG type is wrong!!");
648         }
649 }
650
651 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
652 {
653         DBG("move");
654         if(running_gallery == true){
655                 touch_mode = NONE;
656                 return;
657         }
658
659         Evas_Event_Mouse_Move *ev = event_info;
660
661         int cur_x = ev->cur.canvas.x;
662
663         if( abs(cur_x - prev_x) > 15)
664         {
665                 // todo : confirm and remove
666                 touch_mode = TOUCH_MOVE;
667         }
668 }
669
670 static void _mouse_up_wallpaper_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
671 {
672         DBG("up");
673         if(running_gallery == true){
674                 touch_mode = NONE;
675                 return;
676         }
677
678         if( touch_mode == TOUCH_MOVE )
679                 return;
680
681         int idx = (int)data;
682
683         DBG("Setting - wallpaper idx is %d", idx);
684
685         prev_x = 0;
686         touch_mode = NONE;
687
688         // set gb vconf
689         if(idx == 0)
690         {
691                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
692                 _show_bg_slide_cb(temp_ad, obj, event_info);
693                 return;
694         }
695         else if(idx == 1)
696         {
697                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
698                 _gallery_gl_cb(temp_ad, obj, event_info);
699                 running_gallery = true;
700                 elm_object_scroll_freeze_push(obj);
701                 return;
702         }
703
704         if(_set_wallpaper_path(idx))
705         {
706                 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
707                 if( temp_ad != NULL )
708                 {
709                         elm_naviframe_item_pop(temp_ad->nf);
710                 }
711
712                 // automatic freed!!
713                 struct _toast_data * toast = _create_toast(temp_ad, REPL(_("IDS_GALLERY_TPOP_HOME_BACKGROUND_SET"),"\n","<br>"));
714                 if( toast ) {
715                         _show_toast(temp_ad, toast);
716                 }
717         } else
718         {
719                 DBG("Setting - wallpaper path is wrong!!");
720         }
721 }
722
723 static void _page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
724 {
725         int idx = 0;
726         int page;
727 #if 0
728         vconf_get_int(VCONFKEY_SETAPPL_HOME_BG_COLOR_TYPE_INT, &idx);
729         page = (idx-1)/WALLPAPER_CNT_PER_PAGE;
730 #endif
731         //first page show
732         page = 0;
733         elm_scroller_page_show(obj, page, 0);
734 }
735
736 static Evas_Object* _create_index(Evas_Object* parent)
737 {
738         Evas_Object *layout, *scroller, *box, *page_layout, *page, *mapbuf;
739         int index;
740
741         if (parent == NULL)
742                 return NULL;
743
744         /* Create Layout */
745         layout = elm_layout_add(parent);
746         if (layout == NULL)
747                 return NULL;
748
749         page_data *pd = calloc(1, sizeof(page_data));
750         if (pd == NULL)
751                 return NULL;
752
753         elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
754         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
755         evas_object_show(layout);
756         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
757
758         /* Create Scroller */
759         scroller = elm_scroller_add(layout);
760         elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
761         evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
762         evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
763         //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
764         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
765         elm_scroller_page_scroll_limit_set(scroller, 1, 0);
766         elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
767         elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
768         elm_object_part_content_set(layout, "scroller", scroller);
769         elm_object_style_set(scroller, "effect");
770         elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
771         evas_object_show(scroller);
772
773         /* Create Box */
774         box = elm_box_add(scroller);
775         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
776         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
777         elm_box_horizontal_set(box, EINA_TRUE);
778         elm_object_content_set(scroller, box);
779         evas_object_show(box);
780
781
782         int totalPageCnt = 0;
783         totalPageCnt = (BG_COLOR_COUNT+1)/NUM_MAX_THUMB_IN_PAGES;
784         for( index = 0; index < totalPageCnt; index++ )
785         {
786                 page_layout = elm_layout_add(box);
787                 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
788                 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
789
790                 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
791                 evas_object_show(page_layout);
792
793                 int thumbIdx = 0;
794                 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
795                 {
796                         Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
797                         evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
798                         evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
799                         elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
800                         evas_object_show(thumbnail_layout);
801
802                         // page content
803                         page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
804                         evas_object_color_set(page, color[thumbIdx].r, color[thumbIdx].g, color[thumbIdx].b, 255);
805                         evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
806                         evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
807
808                         elm_object_part_content_set(thumbnail_layout, "thumb", page);
809                         evas_object_show(page);
810
811                         switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
812                         {
813                                 case 0:
814                                         elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
815                                         break;
816                                 case 1:
817                                         elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
818                                         break;
819                         }
820
821                         // touch event
822                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
823                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb,  (void*)(thumbIdx));
824                         evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
825                 }
826                 elm_box_pack_end(box, page_layout);
827         }
828
829         evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _page_show, NULL);
830
831         //ecore_animator_add(animator_cb, pd);
832
833         return layout;
834 }
835
836 static void
837 _wallpaper_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
838 {
839         wallpaper_page_data *pd = data;
840         free(pd);
841 }
842
843 static Eina_Bool
844 wallpaper_animator_cb(void *data)
845 {
846         wallpaper_page_data *pd = (wallpaper_page_data *)data;
847
848         //Since mapbuf is not perfect, Enable them after the size calculation is finished
849         int idx;
850         for( idx = 0; idx < DEFAULT_WALLPAPER_COUNT/WALLPAPER_CNT_PER_PAGE; idx++ ){
851                 elm_mapbuf_enabled_set(pd->mapbuf[idx], EINA_TRUE);
852         }
853         return ECORE_CALLBACK_CANCEL;
854 }
855
856 static void _wallpaper_page_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
857 {
858         DBG("_wallpaper_page_show");
859 #if 0
860         char* ret_wallpaper = NULL;
861         int idx=0;
862         int page_idx = 0;
863         if(system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &ret_wallpaper) != SYSTEM_SETTINGS_ERROR_NONE)
864         {
865                 page_idx = idx;
866         }
867         else
868         {
869                 for( idx; idx < DEFAULT_WALLPAPER_COUNT; idx++ )
870                 {
871                         if (ret_wallpaper && !strcmp(ret_wallpaper, thumb_path[idx]))
872                         {
873                                 DBG("wallpaper[%s] idx [%d]",ret_wallpaper,idx);
874                                 page_idx = idx / WALLPAPER_CNT_PER_PAGE;
875                                 break;
876                         }
877                 }
878         }
879 #endif
880         //set just first page to show
881         int page_idx = 0;
882         elm_scroller_page_show(obj, page_idx, 0);
883 }
884
885 static void _wallpaper_page_refresh(void *data, Evas * e, Evas_Object * obj, void *event_info)
886 {
887         DBG("is_prev_update , %d", is_prev_update);
888 }
889
890 bool _is_file_exist(const char* filepath)
891 {
892         if ( ecore_file_exists(filepath) == EINA_TRUE)
893         {
894                 DBG("exist");
895                 return true;
896         }
897         DBG("not exist %s", filepath);
898         return false;
899 }
900
901 static void _wallpaper_vconf_color_changed_cb(keynode_t *node, void *data)
902 {
903                 char *bg_color = NULL;
904                 int R = 0x00, G = 0x00, B = 0x00;
905                 bg_color = vconf_get_str("db/wms/home_bg_palette");
906                 colorstr_to_decimal(bg_color, &R, &G, &B);
907                 evas_object_color_set(g_color_page, R, G, B, 255);
908                 evas_object_show(g_color_page);
909 }
910
911 static void _wallpaper_vconf_wallpaper_changed_cb(keynode_t *node, void *data)
912 {
913         DBG("_wallpaper_vconf_wallpaper_changed_cb");
914         int bg_mode;
915         vconf_get_int("db/wms/home_bg_mode", &bg_mode);
916         if(bg_mode == 2 && !gallery_img_cnt){
917                 DBG("gallery_img_cnt : %d",gallery_img_cnt);
918                 is_prev_update = 1;
919                 if(g_wallpaper_layout)
920                 {
921                         evas_object_del(g_wallpaper_layout);
922                         g_wallpaper_layout = NULL;
923                 }
924         }
925         if(bg_mode == 2 && gallery_img_cnt){
926                 //gallery type
927                 char *bg_gallery = NULL;
928                 bg_gallery = vconf_get_str(VCONFKEY_BGSET);
929                 DBG(" bg mode 2 , gallery true , [%s]", bg_gallery);
930                 elm_image_file_set(g_gallery_prv, bg_gallery, NULL);
931                 evas_object_show(g_gallery_prv);
932         }
933 }
934
935 static Evas_Object* _create_wallpaper_thumbnail(Evas_Object* parent)
936 {
937         Evas_Object *layout, *scroller, *box, *page_layout, *thumbnail, *mapbuf, *color_page, *gallery_page;
938         int index;
939
940         Evas_Object *touch_eo=NULL;
941
942         if (parent == NULL)
943                 return NULL;
944
945         if (_is_file_exist(CROPPED_GALLERY_DEFAULT_WALLPAPER_PATH) == true)
946         {
947                 //cropped gallery image exist or not
948                 gallery_img_cnt = 1;    //fixed on 1page
949         }
950
951
952         /* Create Layout */
953         layout = elm_layout_add(parent);
954         if (layout == NULL)
955                 return NULL;
956
957         elm_layout_file_set(layout, EDJE_PATH, "setting-test/index");
958         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
959         evas_object_show(layout);
960         g_wallpaper_layout = layout;
961
962         /* Create Scroller */
963         scroller = elm_scroller_add(layout);
964         elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
965         evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
966         evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
967         //elm_scroller_page_relative_set(scroller, 1.0, 0.0);
968         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
969         elm_scroller_page_scroll_limit_set(scroller, 1, 0);
970         elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
971         elm_scroller_page_size_set(scroller, WIN_SIZE, WIN_SIZE);
972         elm_object_part_content_set(layout, "scroller", scroller);
973         elm_object_style_set(scroller, "effect");
974         elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
975         evas_object_show(scroller);
976
977         /* Create Box */
978         box = elm_box_add(scroller);
979         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
980         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
981         elm_box_horizontal_set(box, EINA_TRUE);
982         elm_object_content_set(scroller, box);
983         evas_object_show(box);
984
985
986         int totalPageCnt = 0;
987         totalPageCnt = (DEFAULT_WALLPAPER_COUNT+NUM_DEFAULT_THUMB_BUTTON+gallery_img_cnt+1)/NUM_MAX_THUMB_IN_PAGES;
988         for( index = 0; index < totalPageCnt; index++ )
989         {
990                 page_layout = elm_layout_add(box);
991                 evas_object_size_hint_weight_set(page_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
992                 evas_object_size_hint_align_set(page_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
993
994                 elm_layout_file_set(page_layout, EDJE_PATH, "thumbnail_page");
995                 evas_object_show(page_layout);
996
997                 int thumbIdx = 0;
998                 for( thumbIdx = index*NUM_MAX_THUMB_IN_PAGES; thumbIdx < ((index*NUM_MAX_THUMB_IN_PAGES) + NUM_MAX_THUMB_IN_PAGES); thumbIdx++ )
999                 {
1000                         Evas_Object *thumbnail_layout = elm_layout_add(page_layout);
1001                         evas_object_size_hint_weight_set(thumbnail_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1002                         evas_object_size_hint_align_set(thumbnail_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1003                         elm_layout_file_set(thumbnail_layout, EDJE_PATH, "thumbnail");
1004                         evas_object_show(thumbnail_layout);
1005
1006                         // color palette - set color box
1007                         if(thumbIdx == 0){
1008                                 char *bg_color = NULL;
1009                                 int R = 0x00, G = 0x00, B = 0x00;
1010                                 bg_color = vconf_get_str("db/wms/home_bg_palette");
1011                                 colorstr_to_decimal(bg_color, &R, &G, &B);
1012                                 DBG("R : [%d] G : [%d] B : [%d]", R, G, B);
1013                                 color_page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
1014                                 evas_object_color_set(color_page, R, G, B, 255);
1015                                 evas_object_size_hint_weight_set(color_page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1016                                 evas_object_size_hint_align_set(color_page, EVAS_HINT_FILL, EVAS_HINT_FILL);
1017                                 elm_object_part_content_set(thumbnail_layout, "thumb", color_page);
1018                                 evas_object_show(color_page);
1019                                 g_color_page = color_page;
1020                         }
1021
1022                         if(thumbIdx == 1){
1023                                 _get_last_img_path();
1024                                 gallery_page = elm_image_add(page_layout);
1025                                 elm_image_file_set(gallery_page, last_img_path, NULL);
1026                                 elm_object_part_content_set(thumbnail_layout, "thumb", gallery_page);
1027                                 evas_object_show(gallery_page);
1028                         }
1029
1030                         // page content
1031                         char buf[256];
1032                         thumbnail = elm_image_add(page_layout);//thumb_path
1033
1034                         int idx_arr;
1035                         //default 1,2page thumbnail button : pallette btn, gallery btn
1036                         if(gallery_img_cnt || thumbIdx == 0 || thumbIdx == 1){
1037                                 idx_arr = thumbIdx;
1038                         }
1039                         else{
1040                                 idx_arr = thumbIdx+1;
1041                         }
1042
1043                         snprintf(buf, sizeof(buf), "%s", thumb_path[idx_arr]);
1044
1045                         if ( ecore_file_exists(buf) )
1046                         {
1047                                 elm_image_file_set(thumbnail, buf, NULL);
1048                         }
1049                         else
1050                         {
1051                                 elm_image_file_set(thumbnail, NULL, NULL);
1052                         }
1053                         elm_image_aspect_fixed_set(thumbnail, EINA_FALSE);
1054                         elm_image_resizable_set(thumbnail, EINA_TRUE, EINA_TRUE);
1055
1056                         if(thumbIdx == 0 || thumbIdx == 1)
1057                                 elm_object_part_content_set(thumbnail_layout, "thumb_btn", thumbnail);
1058                         else
1059                                 elm_object_part_content_set(thumbnail_layout, "thumb", thumbnail);
1060
1061                         if(thumbIdx == 2 && gallery_img_cnt){
1062                                 g_gallery_prv = thumbnail;
1063                         }
1064                         evas_object_show(thumbnail);
1065
1066                         switch ( thumbIdx%NUM_MAX_THUMB_IN_PAGES)
1067                         {
1068                                 case 0:
1069                                         elm_object_part_content_set(page_layout, "thumb1", thumbnail_layout);
1070                                         break;
1071                                 case 1:
1072                                         elm_object_part_content_set(page_layout, "thumb2", thumbnail_layout);
1073                                         break;
1074                         }
1075
1076                         // touch event
1077                         if(thumbIdx == 0){
1078                                 touch_eo = color_page;
1079                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1080                         }
1081                         else if(thumbIdx == 1){
1082                                 touch_eo = gallery_page;
1083                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,opacity", "thumb_op");
1084                         }
1085                         else{
1086                                 touch_eo = thumbnail;
1087                                 elm_object_signal_emit(thumbnail_layout, "thumbnail,default", "thumb_op");
1088                         }
1089
1090                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
1091                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_UP, _mouse_up_wallpaper_cb,  (void*)idx_arr);
1092                         evas_object_event_callback_add(touch_eo, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL);
1093                 }
1094                 elm_box_pack_end(box, page_layout);
1095         }
1096
1097         evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, _wallpaper_page_show, NULL);
1098         register_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb, NULL);
1099         register_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb, NULL);
1100
1101         return layout;
1102 }
1103
1104 static Eina_Bool _wallpaper_pop_cb(void *data, Elm_Object_Item *it)
1105 {
1106         DBG("_wallpaper_pop_cb");
1107         unregister_vconf_changing("db/wms/home_bg_palette", _wallpaper_vconf_color_changed_cb);
1108         unregister_vconf_changing("db/wms/home_bg_mode", _wallpaper_vconf_wallpaper_changed_cb);
1109         return EINA_TRUE;
1110 }
1111
1112 void _wallpaper_gl_cb(void *data, Evas_Object *obj, void *event_info)
1113 {
1114         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1115
1116         appdata *ad;
1117         Evas_Object *layout_inner;
1118         Elm_Object_Item *it;
1119
1120         ad = (appdata *)data;
1121         if (ad == NULL)
1122             return;
1123
1124         temp_ad = ad;
1125
1126         layout_inner = _create_wallpaper_thumbnail(ad->nf);
1127         it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1128         elm_naviframe_item_pop_cb_set(it, _wallpaper_pop_cb, ad);
1129         elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1130 }
1131
1132 Evas_Object *create_wallpaper_list(void *data)
1133 {
1134         appdata *ad;
1135         Evas_Object *layout_inner;
1136         Elm_Object_Item *it;
1137
1138         ad = (appdata *)data;
1139         if (ad == NULL)
1140             return NULL;
1141
1142         temp_ad = ad;
1143
1144         int ret;
1145         ret = feedback_initialize();
1146         if(ret != FEEDBACK_ERROR_NONE){
1147                 DBG("feedback_initialize failed");
1148         }
1149
1150         layout_inner = _create_wallpaper_thumbnail(ad->nf);
1151         return layout_inner;
1152 }
1153
1154 void _gallery_result_cb(service_h service, service_h reply, service_result_e result, void *data)
1155 {
1156         DBG("_gallery_result_cb");
1157         if(running_gallery){
1158                 running_gallery = false;
1159                 elm_object_scroll_freeze_pop(data);
1160         }
1161 }
1162
1163 static Eina_Bool _timer_cb(void *data) {
1164         DBG("reset gallery running flag");
1165         if(running_gallery){
1166                 running_gallery = false;
1167                 running_gallery_timer = NULL;
1168                 elm_object_scroll_freeze_pop(data);
1169         }
1170         return ECORE_CALLBACK_CANCEL;
1171 }
1172
1173 void _gallery_gl_cb(void *data, Evas_Object *obj, void *event_info)
1174 {
1175         //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1176         DBG("_gallery_gl_cb");
1177
1178         appdata *ad;
1179         Evas_Object *layout_inner;
1180         Elm_Object_Item *it;
1181
1182         ad = (appdata *)data;
1183         if (ad == NULL)
1184             return;
1185
1186         if(!running_gallery){
1187                 service_h service;
1188                 service_create(&service);
1189                 service_set_app_id(service, "org.tizen.w-gallery.appcontrol.setting_wallpaper");
1190                 service_send_launch_request(service, _gallery_result_cb, obj);
1191                 service_destroy(service);
1192
1193                 if(running_gallery_timer) {
1194                         ecore_timer_del(running_gallery_timer);
1195                         running_gallery_timer = NULL;
1196                 }
1197                 running_gallery_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)_timer_cb, obj);
1198         }
1199 }
1200
1201 void _show_bg_slide_cb(void *data, Evas_Object *obj, void *event_info)
1202 {
1203         //elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1204
1205         appdata *ad;
1206         Evas_Object *layout_inner;
1207         Elm_Object_Item *it;
1208
1209         ad = (appdata *)data;
1210         if (ad == NULL)
1211                 return;
1212
1213         temp_ad = ad;
1214
1215         layout_inner = _create_index(ad->nf);
1216         it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout_inner, NULL);
1217         elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
1218 }
1219
1220 /* edit home screen */
1221 static void _show_edit_home(void* data)
1222 {
1223         appdata *ad = data;
1224         if( ad == NULL )
1225         {
1226                 DBG("%s", "_show_edit_home - appdata is null");
1227                 return;
1228         }
1229
1230         service_h service;
1231         service_create(&service);
1232         service_set_app_id(service, "org.tizen.w-launcher-app");
1233         service_add_extra_data(service, "home_op", "edit");
1234         service_send_launch_request(service, NULL, NULL);
1235         service_destroy(service);
1236 }
1237
1238 /* edit home screen */
1239 static void _show_edit_apps(void* data)
1240 {
1241         appdata *ad = data;
1242         if( ad == NULL )
1243         {
1244                 DBG("%s", "_show_edit_home - appdata is null");
1245                 return;
1246         }
1247
1248         service_h service;
1249         service_create(&service);
1250         service_set_app_id(service, "org.tizen.w-launcher-app");
1251         service_add_extra_data(service, "home_op", "apps_edit");
1252         service_send_launch_request(service, NULL, NULL);
1253         service_destroy(service);
1254 }
1255