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