Initialize Tizen 2.3
[apps/home/settings.git] / setting-storage / src / setting-storage-miscellaneous-files.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.1 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-storage-miscellaneous-files.h>
18
19 static int setting_storage_miscellaneous_files_create(void *cb);
20 static int setting_storage_miscellaneous_files_destroy(void *cb);
21 static int setting_storage_miscellaneous_files_update(void *cb);
22 static int setting_storage_miscellaneous_files_cleanup(void *cb);
23
24 setting_view setting_view_storage_miscellaneous_files = {
25         .create = setting_storage_miscellaneous_files_create,
26         .destroy = setting_storage_miscellaneous_files_destroy,
27         .update = setting_storage_miscellaneous_files_update,
28         .cleanup = setting_storage_miscellaneous_files_cleanup,
29 };
30
31 static bool __setting_storage_miscellaneous_files_other_item_cb(media_info_h media, void *data)
32 {
33         //SETTING_TRACE_BEGIN;
34         setting_retvm_if(media == NULL, true, "media is NULL");
35         setting_retvm_if(data == NULL, true, "Data parameter is NULL");
36         SettingStorageUG *ad = (SettingStorageUG *)data;
37
38         char *file_path = NULL;
39         media_info_get_file_path(media, &file_path);
40         SETTING_TRACE("file_path : [%s]", file_path);
41
42         if (!ecore_file_exists(file_path)) {
43                 FREE(file_path);
44                 return true;
45         }
46
47         if (!safeStrNCmp(file_path, PATH1, sizeof(PATH1)) ||
48                 !safeStrNCmp(file_path, PATH2, sizeof(PATH2)) ||
49                 !safeStrNCmp(file_path, PATH3, sizeof(PATH3)) ||
50                 !safeStrNCmp(file_path, PATH4, sizeof(PATH4)) ||
51                 !safeStrNCmp(file_path, PATH5, sizeof(PATH5)) ||
52                 !safeStrNCmp(file_path, PATH6, sizeof(PATH6)) ||
53                 !safeStrNCmp(file_path, PATH7, sizeof(PATH7)) ||
54                 !safeStrNCmp(file_path, PATH8, sizeof(PATH8)) ||
55                 !safeStrNCmp(file_path, PATH9, sizeof(PATH9)))
56         {
57                 FREE(file_path);
58                 return true;
59         }
60
61         char *display_name = NULL;
62         media_info_get_display_name(media, &display_name);
63
64         Node_Info *pNode = (Node_Info *)calloc(1, sizeof(Node_Info));
65         pNode->path = (char *)g_strdup(file_path);
66         pNode->name = (char *)g_strdup(display_name);
67         ad->files_list = eina_list_append(ad->files_list, pNode);
68
69         FREE(file_path);
70         FREE(display_name);
71         return true;
72 }
73
74 static void __setting_storage_miscellaneous_files_list_get(void *data)
75 {
76         SETTING_TRACE_BEGIN;
77         setting_retm_if(data == NULL, "Data parameter is NULL");
78         SettingStorageUG *ad = (SettingStorageUG *)data;
79
80         int ret = MEDIA_CONTENT_ERROR_NONE;
81         filter_h filter = NULL;
82
83         /*Set Filter*/
84         char *condition = "(MEDIA_TYPE=4) and MEDIA_PATH LIKE \'/opt/usr/media/%%\'";
85
86         ret = media_filter_create(&filter);
87         if(ret != MEDIA_CONTENT_ERROR_NONE) {
88                 SETTING_TRACE_ERROR("Fail to create filter");
89                 return;
90         }
91
92         ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
93         if(ret != MEDIA_CONTENT_ERROR_NONE) {
94                 media_filter_destroy(filter);
95                 SETTING_TRACE_ERROR("Fail to set condition");
96                 return;
97         }
98
99         ret = media_info_foreach_media_from_db(filter, __setting_storage_miscellaneous_files_other_item_cb, ad);
100         if(ret != MEDIA_CONTENT_ERROR_NONE) {
101                 media_filter_destroy(filter);
102                 SETTING_TRACE_ERROR("Fail to get media");
103                 return;
104         }
105
106         ret = media_filter_destroy(filter);
107         if (ret != MEDIA_CONTENT_ERROR_NONE) {
108                 SETTING_TRACE_ERROR("destroy filter failed");
109                 return;
110         }
111 }
112
113 static bool __setting_done_list_is_some_item_selected(Setting_Done_List_Data *list_data)
114 {
115         SETTING_TRACE_BEGIN;
116         bool isFound = FALSE;   /* wether can found some item checked */
117         int state = 0;
118
119         Eina_List *l = NULL;
120         Node_Info *node = NULL;
121         Setting_GenGroupItem_Data *item_data = NULL;
122         EINA_LIST_FOREACH(list_data->list, l, node)
123         {
124                 if (node) {
125                         item_data = (Setting_GenGroupItem_Data *)node->data;
126
127                         if (item_data->chk_status) {
128                                 isFound = TRUE;
129                                 break;
130                         }
131                 }
132         }
133         return isFound;
134 }
135
136 static void __setting_select_all_done(void *data)
137 {
138         SETTING_TRACE_BEGIN;
139         retm_if(data == NULL, "data == NULL");
140         Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
141
142         int sel_num = 0;
143
144         setting_create_sel_info_popup(list_data->ly_parent,
145                                       &(list_data->selInfoPop_layout),
146                                       &(list_data->selInfoPop));
147
148         if (list_data->select_all_checked) {
149                 /* set all other checks state to be 1 */
150                 SETTING_TRACE_DEBUG("Select All checked");
151                 Eina_List *l = NULL;
152                 Node_Info *node = NULL;
153                 Setting_GenGroupItem_Data *item_data = NULL;
154                 EINA_LIST_FOREACH(list_data->list, l, node)
155                 {
156                         if (node) {
157                                 item_data = (Setting_GenGroupItem_Data *)node->data;
158                                 item_data->chk_status = 1;
159                                 elm_object_item_data_set(item_data->item, item_data);
160                                 elm_genlist_item_update(item_data->item);
161                         }
162                 }
163                 sel_num = list_data->cur_item_num;
164         } else {
165                 SETTING_TRACE_DEBUG("Select All unchecked");
166                 /* set all other checks state to be 0 */
167                 Eina_List *l = NULL;
168                 Node_Info *node = NULL;
169                 Setting_GenGroupItem_Data *item_data = NULL;
170                 EINA_LIST_FOREACH(list_data->list, l, node)
171                 {
172                         if (node) {
173                                 item_data = (Setting_GenGroupItem_Data *)node->data;
174                                 item_data->chk_status = 0;
175                                 elm_object_item_data_set(item_data->item, item_data);
176                                 elm_genlist_item_update(item_data->item);
177                         }
178                 }
179                 sel_num = 0;
180         }
181
182         /* SETTING_TRACE("sel_num:%d", sel_num); */
183         if (!sel_num) {
184                 if (list_data->navi_it) {
185                         Evas_Object *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
186                         elm_object_disabled_set(button, EINA_TRUE);
187                 }
188
189                 evas_object_hide(list_data->selInfoPop);
190                 return;
191         }
192         char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
193         snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s (%d)", _("IDS_ST_OPT_SELECTED"), sel_num);
194
195         /*  text set and timeout set */
196         edje_object_part_text_set(_EDJ(list_data->selInfoPop_layout), "elm.text", text);
197
198         if (list_data->navi_it) {
199                 Evas_Object *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
200                 elm_object_disabled_set(button, EINA_FALSE);
201         }
202 }
203
204 static void __setting_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
205 {
206         SETTING_TRACE_BEGIN;
207         retm_if(data == NULL, "data == NULL");
208         Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
209
210         list_data->select_all_checked = !list_data->select_all_checked;
211         elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
212
213         __setting_select_all_done(list_data);
214 }
215
216 static void __setting_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
217 {
218         SETTING_TRACE_BEGIN;
219         retm_if(data == NULL, "data == NULL");
220         Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
221
222         list_data->select_all_checked = elm_check_state_get(list_data->select_all_checkbox);
223         elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
224         __setting_select_all_done(data);
225 }
226
227 static void __setting_done_list_item_sel(void *data)
228 {
229         SETTING_TRACE_BEGIN;
230         retm_if(data == NULL, "data == NULL");
231         Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
232
233         int sel_num = 0;
234
235         setting_create_sel_info_popup(list_data->ly_parent,
236                                       &(list_data->selInfoPop_layout),
237                                       &(list_data->selInfoPop));
238
239         /* else for other checks, do rotinue checking */
240         bool isFound = FALSE;   /* wether found the item not checked */
241
242         Eina_List *l = NULL;
243         Node_Info *node = NULL;
244         Setting_GenGroupItem_Data *item_data = NULL;
245         EINA_LIST_FOREACH(list_data->list, l, node)
246         {
247                 if (node) {
248                         item_data = (Setting_GenGroupItem_Data *)node->data;
249                         if (!item_data->chk_status) {
250                                 /* SETTING_TRACE("%s not select", _(list_data->chk_items[idx].item_name)); */
251                                 isFound = TRUE;
252                                 /* break; */
253                         } else {
254                                 /* SETTING_TRACE("%s select", _(list_data->chk_items[idx].item_name)); */
255                                 sel_num++;
256                         }
257                 }
258         }
259
260         if (isFound) {  /* reset state of chk_sel_all */
261                 list_data->select_all_checked = 0;
262                 elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
263         } else {
264                 list_data->select_all_checked = 1;
265                 elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
266         }
267
268         /* SETTING_TRACE("sel_num:%d", sel_num); */
269         if (!sel_num) {
270                 if (list_data->navi_it) {
271                         Evas_Object  *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
272                         elm_object_disabled_set(button, EINA_TRUE);
273                 }
274                 evas_object_hide(list_data->selInfoPop);
275                 return;
276         }
277
278         char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
279         snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s (%d)", _("IDS_ST_OPT_SELECTED"), sel_num);
280
281         /*  text set and timeout set */
282         edje_object_part_text_set(_EDJ(list_data->selInfoPop_layout), "elm.text", text);
283
284         if (list_data->navi_it) {
285                 Evas_Object  *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
286                 elm_object_disabled_set(button, EINA_FALSE);
287         }
288 }
289
290 static void __setting_done_list_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
291                                                   void *event_info)
292 {
293         /* error check */
294         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
295         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
296         elm_genlist_item_selected_set(item, 0);
297         Setting_GenGroupItem_Data *list_item =
298             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
299
300         int old_status = elm_check_state_get(list_item->eo_check);
301         /* new status */
302         list_item->chk_status = !old_status;
303         elm_check_state_set(list_item->eo_check, list_item->chk_status);
304
305         /* other process.. */
306         Setting_Done_List_Data *list_data = list_item->userdata;
307         __setting_done_list_item_sel(list_data);
308 }
309
310 static void __setting_done_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
311                                           void *event_info)
312 {
313         SETTING_TRACE_BEGIN;
314         /* error check */
315         retm_if(data == NULL, "Data parameter is NULL");
316         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
317
318         /* new status */
319         list_item->chk_status = elm_check_state_get(list_item->eo_check);
320
321         Setting_Done_List_Data *list_data = list_item->userdata;
322         __setting_done_list_item_sel(list_data);
323 }
324
325 static Evas_Object *__setting_create_done_list(void *data)
326 {
327         SETTING_TRACE_BEGIN;
328         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
329         SettingStorageUG *ad = (SettingStorageUG *) data;
330
331         int count = eina_list_count(ad->files_list);
332
333         Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
334         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
335         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
336         evas_object_show(sub_layout);
337
338         Evas_Object *select_all_layout = elm_layout_add(sub_layout);
339         retvm_if(select_all_layout == NULL, NULL, "select_all_layout == NULL");
340         elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default"); //select_all/default
341         evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
342         evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
343
344         if (count > 0) {
345                 evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_select_all_layout_mouse_down_cb, &ad->miscellaneous_list);
346         }
347
348         Eina_Bool select_all_checked = ad->miscellaneous_list.select_all_checked;
349         Evas_Object *select_all_checkbox = elm_check_add(select_all_layout);
350         elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
351         evas_object_smart_callback_add(select_all_checkbox, "changed", __setting_select_all_check_changed_cb, &ad->miscellaneous_list);
352         evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
353         elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
354
355         if (count == 0) {
356                 elm_object_disabled_set(select_all_checkbox, EINA_TRUE);
357         }
358
359         ad->miscellaneous_list.select_all_checkbox = select_all_checkbox;
360         elm_object_part_text_set(select_all_layout, "elm.text", _(KeyStr_Select_All));
361
362         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
363         retvm_if(scroller == NULL, NULL, "scroller == NULL");
364         elm_genlist_clear(scroller);    /* first to clear list */
365
366         elm_object_part_content_set(sub_layout, "search_list", scroller);
367         elm_object_part_content_set(sub_layout, "search_bar", select_all_layout);
368
369         Eina_List *l = NULL;
370         Node_Info *node = NULL;
371         Setting_GenGroupItem_Data *item_data = NULL;
372         EINA_LIST_FOREACH(ad->files_list, l, node)
373         {
374                 if (node) {
375                         item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
376                                          __setting_done_list_Gendial_mouse_up_cb,
377                                          &ad->miscellaneous_list, SWALLOW_Type_1CHECK, NULL,
378                                          NULL, 0,
379                                          node->name, node->path,
380                                          __setting_done_list_Gendial_chk_btn_cb);
381
382                         if (item_data) {
383                                 item_data->userdata = &ad->miscellaneous_list;
384                                 node->data = item_data;
385                         } else {
386                                 SETTING_TRACE_ERROR("item_data is NULL");
387                         }
388                 }
389         }
390
391         return sub_layout;
392 }
393
394 static int setting_storage_miscellaneous_files_create(void *cb)
395 {
396         SETTING_TRACE_BEGIN;
397         /* error check */
398         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
399
400         SettingStorageUG *ad = (SettingStorageUG *) cb;
401         Evas_Object *scroller = NULL;
402
403         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
404         elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "selinfo_bottom");
405         evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
406
407         /*  Evas_Object * win_layout, Evas_Object * win_obj */
408         Elm_Object_Item *navi_it = setting_push_layout_navi_bar(_(SETTING_STORAGE_MISCES_STR),
409                                    _("IDS_COM_SK_DELETE"),
410                                    _("IDS_COM_SK_CANCEL"), NULL,
411                                    __setting_storage_miscellaneous_files_delete_cb,
412                                    __setting_storage_miscellaneous_files_cancel_cb,
413                                    NULL, ad, view_layout, ad->navibar,
414                                    NULL);
415
416         Setting_Done_List_Data *list_data = &(ad->miscellaneous_list);
417
418         list_data->win_main = ad->win_main_layout;
419         list_data->UG_data = ad;
420         list_data->ly_parent = view_layout;
421         list_data->select_all_checked = EINA_FALSE;
422         list_data->navi_it = navi_it;
423
424         __setting_storage_miscellaneous_files_list_get(ad);
425
426         list_data->list = ad->files_list;
427
428         int count = eina_list_count(ad->files_list);
429
430         list_data->cur_item_num = count;
431         SETTING_TRACE("list_data->cur_item_num:%d", list_data->cur_item_num);
432         scroller = __setting_create_done_list(ad);
433         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
434
435         if(count == 0 || !__setting_done_list_is_some_item_selected(&ad->miscellaneous_list)) {
436                 /* disable "Delete" button */
437                 Evas_Object *delete_button = elm_object_item_part_content_get(navi_it, "toolbar_button1");
438                 elm_object_disabled_set(delete_button, EINA_TRUE);
439         }
440
441         setting_view_storage_miscellaneous_files.is_create = 1;
442         return SETTING_RETURN_SUCCESS;
443 }
444
445 static int setting_storage_miscellaneous_files_destroy(void *cb)
446 {
447         SETTING_TRACE_BEGIN;
448         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
449         SettingStorageUG *ad = (SettingStorageUG *)cb;
450
451         if (ad->popup_progressbar) {
452                 evas_object_del(ad->popup_progressbar);
453                 ad->popup_progressbar = NULL;
454         }
455
456         if (ad->timer) {
457                 ecore_timer_del(ad->timer);
458                 ad->timer = NULL;
459         }
460
461         if (ad->files_list) {
462                 Eina_List *l = NULL;
463                 Node_Info *node = NULL;
464                 EINA_LIST_FOREACH(ad->files_list, l, node)
465                 {
466                         G_FREE(node->path);
467                         G_FREE(node->name);
468                         FREE(node);
469                 }
470                 eina_list_free(ad->files_list);
471                 ad->files_list = NULL;
472         }
473
474         int i = 0;
475         for (; i < MAX_RESET_MENU_NUM; i++) {
476                 G_FREE(ad->miscellaneous_list.chk_items[i].item_name);
477         }
478
479         if (ad->miscellaneous_list.selInfoPop) {
480                 evas_object_del(ad->miscellaneous_list.selInfoPop);
481                 ad->miscellaneous_list.selInfoPop = NULL;
482         }
483
484         if (ad->popup) {
485                 evas_object_del(ad->popup);
486                 ad->popup = NULL;
487         }
488
489         ad->back_from_misc = EINA_TRUE;
490
491         elm_naviframe_item_pop(ad->navibar);
492         setting_view_storage_miscellaneous_files.is_create = 0;
493         return SETTING_RETURN_SUCCESS;
494 }
495
496 static int setting_storage_miscellaneous_files_update(void *cb)
497 {
498         SETTING_TRACE_BEGIN;
499
500         return SETTING_RETURN_SUCCESS;
501 }
502
503 static int setting_storage_miscellaneous_files_cleanup(void *cb)
504 {
505         SETTING_TRACE_BEGIN;
506         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
507         setting_storage_miscellaneous_files_destroy(cb);
508         return SETTING_RETURN_SUCCESS;
509 }
510
511 static void __setting_storage_miscellaneous_files_cancel_cb(void *data,
512                                         Evas_Object *obj, void *event_info)
513 {
514         SETTING_TRACE_BEGIN;
515         retm_if(data == NULL, "Data parameter is NULL");
516         SettingStorageUG *ad = (SettingStorageUG *) data;
517
518         setting_view_change(&setting_view_storage_miscellaneous_files, &setting_view_storage_main, ad);
519 }
520
521 static void __setting_storage_miscellaneous_files_genlist_update(void *data)
522 {
523         SETTING_TRACE_BEGIN;
524         setting_retm_if(data == NULL, "Data parameter is NULL");
525         SettingStorageUG *ad = (SettingStorageUG *) data;
526
527         Evas_Object *view_layout = ad->miscellaneous_list.ly_parent;
528
529         Evas_Object *scroller = NULL;
530         scroller = elm_object_part_content_get(view_layout, "elm.swallow.contents");
531         setting_retm_if(NULL == scroller, "scroller is NULL");
532         elm_genlist_clear(scroller);
533
534         elm_object_part_content_unset(view_layout, "elm.swallow.contents");
535         evas_object_del(scroller);
536         scroller = NULL;
537
538         if (ad->files_list) {
539                 Eina_List *l = NULL;
540                 Node_Info *node = NULL;
541                 EINA_LIST_FOREACH(ad->files_list, l, node)
542                 {
543                         G_FREE(node->path);
544                         G_FREE(node->name);
545                         FREE(node);
546                 }
547                 eina_list_free(ad->files_list);
548                 ad->files_list = NULL;
549         }
550
551         __setting_storage_miscellaneous_files_list_get(ad);
552
553         ad->miscellaneous_list.list = ad->files_list;
554
555         int count = eina_list_count(ad->files_list);
556
557         ad->miscellaneous_list.cur_item_num = count;
558         SETTING_TRACE("list_data->cur_item_num:%d", ad->miscellaneous_list.cur_item_num);
559         scroller = __setting_create_done_list(ad);
560         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
561
562         if(count == 0 || !__setting_done_list_is_some_item_selected(&ad->miscellaneous_list)) {
563                 /* disable "Delete" button */
564                 if (ad->miscellaneous_list.navi_it) {
565                         Evas_Object *delete_button = elm_object_item_part_content_get(ad->miscellaneous_list.navi_it, "toolbar_button1");
566                         elm_object_disabled_set(delete_button, EINA_FALSE);
567                 }
568         }
569 }
570
571 static Eina_Bool __setting_storage_miscellaneous_files_idler_cb(void *data)
572 {
573         SETTING_TRACE_BEGIN;
574         setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
575         SettingStorageUG *ad = (SettingStorageUG *) data;
576         if (ad->popup_progressbar) {
577                 evas_object_del(ad->popup_progressbar);
578                 ad->popup_progressbar = NULL;
579         }
580         return EINA_FALSE;
581 }
582
583 static Eina_Bool __setting_storage_miscellaneous_files_timer_cb(void *data)
584 {
585         SETTING_TRACE_BEGIN;
586         setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "Data parameter is NULL");
587         SettingStorageUG *ad = (SettingStorageUG *) data;
588
589         Eina_List *l = NULL;
590         Node_Info *node = NULL;
591         Setting_GenGroupItem_Data *item_data = NULL;
592         EINA_LIST_FOREACH(ad->miscellaneous_list.list, l, node)
593         {
594                 if (node) {
595                         item_data = (Setting_GenGroupItem_Data *)node->data;
596
597                         if (!item_data->chk_status) {
598                                 continue;
599                         }
600
601                         //SETTING_TRACE("path = %s", node->path);
602                         /*unselect item*/
603                         elm_check_state_set(item_data->eo_check, 0);
604                         item_data->chk_status = 0;
605
606                         int ret = ecore_file_remove(node->path);
607                         if (!ret) {
608                                 SETTING_TRACE_ERROR("failed to ecore_file_remove");
609                                 if (ad->popup) {
610                                         evas_object_del(ad->popup);
611                                         ad->popup = NULL;
612                                 }
613                                 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
614                                                         _("IDS_COM_POP_FAILED"),
615                                                         NULL, NULL, POPUP_INTERVAL, FALSE, FALSE);
616                                 return ECORE_CALLBACK_CANCEL;
617                         }
618                 }
619         }
620
621         /* update genlist */
622         __setting_storage_miscellaneous_files_genlist_update(ad);
623
624         /* reset sel_all item */
625         elm_check_state_set(ad->miscellaneous_list.select_all_checkbox, 0);
626         ad->miscellaneous_list.select_all_checked = EINA_FALSE;
627
628         ecore_idler_add((Ecore_Task_Cb)__setting_storage_miscellaneous_files_idler_cb, ad);
629
630         return ECORE_CALLBACK_CANCEL;
631 }
632
633 static void __setting_storage_miscellaneous_files_delete_cb(void *data,
634                                         Evas_Object *obj, void *event_info)
635 {
636         SETTING_TRACE_BEGIN;
637         retm_if(data == NULL, "Data parameter is NULL");
638         SettingStorageUG *ad = (SettingStorageUG *) data;
639
640         if (ad->miscellaneous_list.selInfoPop) {
641                 evas_object_del(ad->miscellaneous_list.selInfoPop);
642                 ad->miscellaneous_list.selInfoPop = NULL;
643         }
644
645         if (!__setting_done_list_is_some_item_selected(&ad->miscellaneous_list)) {
646                 setting_create_simple_popup(NULL, ad->win_get, NULL, "No item selected");
647         } else {
648                 if (ad->popup_progressbar) {
649                         evas_object_del(ad->popup_progressbar);
650                         ad->popup_progressbar = NULL;
651                 }
652                 ad->popup_progressbar = setting_create_popup_with_progressbar(ad, ad->win_get,
653                                          "pending_list",
654                                          NULL, NULL, NULL, 0, TRUE, TRUE);
655
656                 if (ad->timer) {
657                         ecore_timer_del(ad->timer);
658                         ad->timer = NULL;
659                 }
660                 ad->timer = ecore_timer_add(1, (Ecore_Task_Cb)__setting_storage_miscellaneous_files_timer_cb, ad);
661         }
662 }