Tizen 2.4.0 rev3 SDK Public Release
[apps/home/settings.git] / setting-storage / src / setting-storage-miscellaneous.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19 #include <media_content.h>
20
21 #include "setting-storage-utils.h"
22 #include "setting-storage-async-worker.h"
23 #include "setting-storage-miscellaneous.h"
24
25 #define STR_DELETE_ITEMS        "IDS_ST_HEADER_DELETE_ITEMS_ABB2"
26 typedef struct {
27         char *id;
28         char *path;
29         char *name;
30         Setting_GenGroupItem_Data *data;
31         SettingStorageUG *ad;
32 } Node_Info;
33
34 static setting_view setting_view_storage_misc;
35
36 static Eina_Bool storageUg_misces_back_cb(void *data, Elm_Object_Item *it)
37 {
38         SettingStorageUG *ad = data;
39
40         retv_if(data == NULL, EINA_TRUE);
41         retv_if(NULL != ad->del_worker, EINA_FALSE);
42
43         setting_view_change(ad->misces_view, ad->main_view, ad);
44
45         return EINA_TRUE;
46 }
47
48 static bool storageUg_misces_media_item_cb(media_info_h media, void *data)
49 {
50         Node_Info *node;
51         char *media_id = NULL;
52         char *file_path = NULL;
53         char *display_name = NULL;
54         SettingStorageUG *ad = data;
55
56         retv_if(NULL == media, true);
57         retv_if(NULL == data, false);
58
59         media_info_get_file_path(media, &file_path);
60         if (!ecore_file_exists(file_path)) {
61                 FREE(file_path);
62                 return true;
63         }
64
65         media_info_get_media_id(media, &media_id);
66         media_info_get_display_name(media, &display_name);
67
68         node = calloc(1, sizeof(Node_Info));
69         if (node) {
70                 node->id = strdup(media_id);
71                 node->path = strdup(file_path);
72                 node->name = strdup(display_name);
73                 ad->misces_list = eina_list_append(ad->misces_list, node);
74         }
75         FREE(media_id);
76         FREE(file_path);
77         FREE(display_name);
78
79         return true;
80 }
81
82 static void storageUg_misces_clear_list(Eina_List *list)
83 {
84         Eina_List *l = NULL;
85         Node_Info *node = NULL;
86
87         EINA_LIST_FOREACH(list, l, node) {
88                 free(node->id);
89                 free(node->path);
90                 free(node->name);
91                 free(node);
92         }
93         eina_list_free(list);
94 }
95
96 static inline void storageUg_meisces_get_list(SettingStorageUG *ad)
97 {
98         int ret;
99         char *condition;
100         filter_h filter = NULL;
101
102         ret_if(NULL == ad);
103
104         if (ad->misces_list) {
105                 storageUg_misces_clear_list(ad->misces_list);
106                 ad->misces_list = NULL;
107         }
108
109         /*Set Filter*/
110         condition = "(MEDIA_TYPE=4) and MEDIA_PATH LIKE \'/opt/usr/media/%%\'";
111         /*
112            condition = "(MEDIA_TYPE=4) and (MEDIA_PATH LIKE \'/opt/usr/media/.tmp_download/%%\'"
113            "or MEDIA_PATH LIKE \'/opt/usr/media/.video-hub/%%\'"
114            "or MEDIA_PATH LIKE \'/opt/usr/media/Camera/%%\'"
115            "or MEDIA_PATH LIKE \'/opt/usr/media/Downloads/%%\'"
116            "or MEDIA_PATH LIKE \'/opt/usr/media/Images/%%\'"
117            "or MEDIA_PATH LIKE \'/opt/usr/media/Others/%%\'"
118            "or MEDIA_PATH LIKE \'/opt/usr/media/Sounds/%%\'"
119            "or MEDIA_PATH LIKE \'/opt/usr/media/Videos/%%\'"
120            "or MEDIA_PATH LIKE \'/opt/usr/media/lost+found/%%\')";
121            */
122
123         /*Set Filter*/
124         ret = media_filter_create(&filter);
125         if (ret != MEDIA_CONTENT_ERROR_NONE) {
126                 SETTING_TRACE_ERROR("media_filter_create() Fail(%d)", ret);
127                 return;
128         }
129         ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
130         if (ret != MEDIA_CONTENT_ERROR_NONE) {
131                 media_filter_destroy(filter);
132                 SETTING_TRACE_ERROR("media_filter_set_condition() Fail(%d)", ret);
133                 return;
134         }
135
136         ret = media_info_foreach_media_from_db(filter, storageUg_misces_media_item_cb, ad);
137         if (ret != MEDIA_CONTENT_ERROR_NONE) {
138                 media_filter_destroy(filter);
139                 SETTING_TRACE_ERROR("media_info_foreach_media_from_db() Fail(%d)", ret);
140                 return;
141         }
142
143         ret = media_filter_destroy(filter);
144         if (ret != MEDIA_CONTENT_ERROR_NONE) {
145                 SETTING_TRACE_ERROR("media_filter_destroy() Fail(%d)", ret);
146                 return;
147         }
148
149         ad->misces_sz_all = eina_list_count(ad->misces_list);;
150 }
151
152 static void storageUg_misces_handle_selecting(SettingStorageUG *ad)
153 {
154         Evas_Object *toolbar;
155
156         ret_if(NULL == ad);
157
158         if (ad->misces_checked == ad->misces_sz_all)
159                 ad->misces_is_select_all = EINA_TRUE;
160         else
161                 ad->misces_is_select_all = EINA_FALSE;
162
163         /*  text set and timeout set */
164         if (0 < ad->misces_checked) {
165                 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
166
167                 snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_checked);
168                 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
169
170                 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
171                 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
172         } else {
173                 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
174                 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
175
176                 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
177                 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
178         }
179 }
180
181 static int storageUg_compare_str(const void *data1, const void *data2)
182 {
183         return safeStrCmp(data1, data2);
184 }
185
186 static void storageUg_misces_handle_sel_list(SettingStorageUG *ad, char *id,
187                                              int checked)
188 {
189         if (checked) {
190                 ad->misces_checked++;
191                 ad->misces_sel_list = eina_list_append(ad->misces_sel_list, strdup(id));
192         } else {
193                 Eina_List *found;
194
195                 ad->misces_checked--;
196                 found = eina_list_search_unsorted_list(ad->misces_sel_list, storageUg_compare_str,
197                                                        id);
198                 free(eina_list_data_get(found));
199                 ad->misces_sel_list = eina_list_remove_list(ad->misces_sel_list, found);
200         }
201
202         /*update select all check state*/
203         Evas_Object *check = elm_object_part_content_get(ad->select_all_layout, "elm.icon");
204         if (ad->misces_checked >= ad->misces_sz_all) {
205                 elm_check_state_set(check, EINA_TRUE);
206         } else {
207                 elm_check_state_set(check, EINA_FALSE);
208         }
209         /*update delete item buttons*/
210         if (ad->misces_checked > 0) {
211                 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") == NULL) {
212                         elm_object_item_part_content_set(ad->misces_navi_it, "title_left_btn", ad->title_left_btn);
213                 }
214                 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") == NULL) {
215                         elm_object_item_part_content_set(ad->misces_navi_it, "title_right_btn", ad->title_right_btn);
216                 }
217         } else {
218                 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") != NULL) {
219                         elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
220                         evas_object_hide(ad->title_left_btn);
221                 }
222                 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") != NULL) {
223                         elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
224                         evas_object_hide(ad->title_right_btn);
225                 }
226         }
227 }
228
229 static void storageUg_misces_genlist_sel(void *data, Evas_Object *obj,
230                                          void *event_info)
231 {
232         Node_Info *node;
233         SettingStorageUG *ad = data;
234         Elm_Object_Item *item = event_info;
235         Setting_GenGroupItem_Data *d_item = NULL;
236
237         ret_if(data == NULL);
238
239         elm_genlist_item_selected_set(item, 0);
240         d_item = elm_object_item_data_get(item);
241         if (d_item) {
242                 node = d_item->userdata;
243
244                 setting_update_gl_item_chk_status(d_item, !(d_item->chk_status));
245
246                 storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
247                 storageUg_misces_handle_selecting(ad);
248         }
249 }
250
251 static void storageUg_misces_genlist_chk_cb(void *data, Evas_Object *obj,
252                                             void *event_info)
253 {
254         Node_Info *node;
255         SettingStorageUG *ad;
256         Setting_GenGroupItem_Data *d_item = data;
257
258         ret_if(data == NULL);
259
260         node = d_item->userdata;
261         ad = node->ad;
262         d_item->chk_status = elm_check_state_get(obj);
263
264         storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
265         storageUg_misces_handle_selecting(ad);
266 }
267
268 static inline Evas_Object *storageUg_misces_no_item(Evas_Object *parent)
269 {
270         Evas_Object *layout, *icon;
271
272         layout = elm_layout_add(parent);
273         elm_layout_theme_set(layout, "layout", "nocontents", "default");
274         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
275         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
276
277         icon = elm_image_add(layout);
278         elm_image_file_set(icon, SETTING_ICON_PATH_CFG "/00_nocontents_text.png", NULL);
279         elm_object_part_content_set(layout, "nocontents.image", icon);
280
281         elm_object_domain_translatable_part_text_set(layout, "elm.text", SETTING_PACKAGE,
282                                                      STORAGEUG_STR_NO_FILES);
283         elm_layout_signal_emit(layout, "text,disabled", "");
284
285         return layout;
286 }
287
288 static inline void storageUg_misces_clear_sel_list(Eina_List *list)
289 {
290         Eina_List *l = NULL;
291         char *node = NULL;
292
293         EINA_LIST_FOREACH(list, l, node)
294         free(node);
295         eina_list_free(list);
296 }
297
298 static inline void storageUg_misces_gl_append_items(SettingStorageUG *ad)
299 {
300         int checked;
301         Node_Info *node;
302         Eina_List *found, *cur, *tmp_sel_list;
303         Setting_GenGroupItem_Data *item_data = NULL;
304
305         tmp_sel_list = ad->misces_sel_list;
306         ad->misces_sel_list = NULL;
307
308         EINA_LIST_FOREACH(ad->misces_list, cur, node) {
309                 if (NULL == node)
310                         continue;
311
312                 found = eina_list_search_unsorted_list(tmp_sel_list, storageUg_compare_str,
313                                                        node->id);
314                 if (found) {
315                         checked = 1;
316                         storageUg_misces_handle_sel_list(ad, node->id, 1);
317                 } else {
318                         checked = 0;
319                 }
320
321                 item_data = setting_create_Gendial_field_def(ad->gl_misces,
322                                                              &(itc_1text_1icon), storageUg_misces_genlist_sel, ad,
323                                                              SWALLOW_Type_1CHECK_RIGHT, NULL, NULL, checked, node->name, node->path,
324                                                              storageUg_misces_genlist_chk_cb);
325
326                 if (item_data) {
327                         item_data->userdata = node;
328                         node->data = item_data;
329                         node->ad = ad;
330                 } else {
331                         SETTING_TRACE_ERROR("item_data is NULL");
332                 }
333         }
334         storageUg_misces_handle_selecting(ad);
335         storageUg_misces_clear_sel_list(tmp_sel_list);
336 }
337
338 static inline Evas_Object *storageUg_misces_genlist(Evas_Object *parent)
339 {
340         Evas_Object *genlist;
341
342         genlist = elm_genlist_add(parent);
343         if (NULL == genlist) {
344                 SETTING_TRACE_ERROR("elm_genlist_add() Fail");
345                 return NULL;
346         }
347
348         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
349         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
350         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
351         elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
352         evas_object_show(genlist);
353
354         evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, NULL);
355
356         return genlist;
357 }
358
359 static void storageUg_misces_delete_list(SettingStorageUG *ad)
360 {
361         SETTING_TRACE("Entering storageUg_misces_delete_list");
362
363         ret_if(NULL == ad);
364
365         ad->misces_checked = 0;
366         Setting_GenGroupItem_Data *item_data = NULL;
367         Elm_Object_Item *it = elm_genlist_first_item_get(ad->gl_misces);
368
369         while (it) {
370                 item_data = elm_object_item_data_get(it);
371                 it = elm_genlist_item_next_get(it);
372                 if (item_data != NULL) {
373                         SETTING_TRACE("chk_status: %d", item_data->chk_status);
374                         if (item_data->chk_status) {
375                                 elm_object_item_del(item_data->item);
376                                 Node_Info *node = item_data->userdata;
377                                 ad->misces_list = eina_list_remove(ad->misces_list, node);
378                                 FREE(node->id);
379                                 FREE(node->path);
380                                 FREE(node->name);
381                                 FREE(node);
382                         }
383                 }
384         }
385
386         ad->misces_sz_all = eina_list_count(ad->misces_list);
387
388         SETTING_TRACE("ad->misces_sz_all - %d", ad->misces_sz_all);
389         if (0 == ad->misces_sz_all) {
390
391                 if (elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn")) {
392                         Evas_Object *btn_done = elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
393                         evas_object_hide(btn_done);
394                 }
395
396                 if (elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn")) {
397                         Evas_Object *btn_cancel = elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
398                         evas_object_hide(btn_cancel);
399                 }
400                 if (NULL == ad->misces_lo_noitem) {
401                         ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
402                 }
403
404
405                 ad->gl_misces = NULL;
406
407                 if (ad->misces_lo_noitem) {
408                         elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
409                 }
410
411         }
412 }
413
414 static void storageUg_misces_add_list(SettingStorageUG *ad)
415 {
416         Evas_Object *toolbar, *btn;
417         Evas_Object *lo_new = NULL;
418
419         SETTING_TRACE("Entering storageUg_misces_add_list");
420
421         ret_if(NULL == ad);
422
423         ad->misces_checked = 0;
424         ad->misces_is_select_all = EINA_FALSE;
425
426         if (0 == ad->misces_sz_all) {
427                 if (NULL == ad->misces_lo_noitem) {
428                         lo_new = ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
429
430                         btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
431                         if (NULL != btn)
432                                 elm_object_disabled_set(btn, EINA_TRUE);
433                         ad->gl_misces = NULL;
434                 }
435         } else {
436                 if (ad->gl_misces)
437                         elm_genlist_clear(ad->gl_misces);
438                 else
439                         lo_new = ad->gl_misces = storageUg_misces_genlist(ad->navi);
440
441                 storageUg_misces_gl_append_items(ad);
442                 ad->misces_lo_noitem = NULL;
443         }
444
445         if (lo_new) {
446                 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", lo_new);
447         }
448
449         if (0 == ad->misces_checked) {
450                 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
451                 if (NULL != toolbar)
452                         elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
453         }
454 }
455
456 void storageUg_misces_delete_files_cb(int fn_result, SettingStorageUG *ad)
457 {
458         ret_if(NULL == ad);
459
460         ad->del_worker = NULL;
461
462         /* update genlist */
463         SETTING_TRACE("After deleting, updating the file list");
464         /*      storageUg_misces_add_list(ad); */
465         storageUg_misces_delete_list(ad);
466
467         if (SETTING_RETURN_SUCCESS != fn_result) {
468                 SETTING_TRACE_ERROR("storageUg_misces_delete_files() Fail(%d)", fn_result);
469                 storageUg_fail_popup(ad);
470                 return;
471         }
472
473         if (ad->popup) {
474                 evas_object_del(ad->popup);
475                 ad->popup = NULL;
476         }
477
478         if (ad->misces_navi_it) {
479                 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
480                 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
481         }
482 }
483
484 static int storageUg_misces_delete_files(SettingStorageUG *ad)
485 {
486         Eina_List *l = NULL;
487         Node_Info *node = NULL;
488         Setting_GenGroupItem_Data *item_data = NULL;
489
490         retv_if(NULL == ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
491
492         EINA_LIST_FOREACH(ad->misces_list, l, node) {
493                 if (node) {
494                         item_data = node->data;
495
496                         if (!item_data->chk_status)
497                                 continue;
498
499                         if (EINA_TRUE == ecore_file_remove(node->path)) {
500                                 media_content_scan_file(node->path);
501                         } else {
502                                 SETTING_TRACE_ERROR("failed to ecore_file_remove");
503                                 return SETTING_RETURN_FAIL;
504                         }
505                 }
506                 storageUG_STOP_POINT;
507         }
508
509         return SETTING_RETURN_SUCCESS;
510 }
511
512 static void storageUg_misces_delete_resp(void *data, Evas_Object *obj,
513                                          void *event_info)
514 {
515         int response_type;
516         SettingStorageUG *ad = data;
517
518         ret_if(NULL == data);
519         ret_if(NULL == obj);
520
521         response_type = btn_type(obj);
522
523         if (ad->popup) {
524                 evas_object_del(ad->popup);
525                 ad->popup = NULL;
526         }
527
528         if (POPUP_RESPONSE_OK != response_type) {
529                 SETTING_TRACE("CANCEL");
530                 return;
531         }
532
533         if (ad->misces_checked) {
534                 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
535                                                                   NULL, NULL, storageUg_popup_del, 0, TRUE, TRUE, 0);
536
537                 if (ad->del_worker)
538                         storageUg_stop_async_worker(ad->del_worker);
539                 ad->del_worker = storageUg_start_async_worker(storageUg_misces_delete_files,
540                                                               storageUg_misces_delete_files_cb, ad);
541         } else {
542                 ad->popup = setting_create_popup(ad, ad->win, NULL,
543                                                                                  STORAGEUG_STR_NO_SELECTED, storageUg_popup_del,
544                                                                                  SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE, 0);
545         }
546 }
547
548 static void storageUg_misces_delete_cb(void *data, Evas_Object *obj,
549                                        void *event_info)
550 {
551         SettingStorageUG *ad = (SettingStorageUG *) data;
552
553         ret_if(NULL == data);
554
555         ad->popup = setting_create_popup(ad, ad->win, NULL,
556                                                                          STORAGEUG_STR_DELETE_Q, storageUg_misces_delete_resp,
557                                                                          0, FALSE, FALSE,
558                                                                          2, STORAGEUG_STR_DELETE, STORAGEUG_STR_CANCEL);
559 }
560
561 static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj,
562                                              void *event_info)
563 {
564         Eina_List *l = NULL;
565         Evas_Object *toolbar;
566         Node_Info *node = NULL;
567         SettingStorageUG *ad = data;
568         Setting_GenGroupItem_Data *item_data = NULL;
569
570         ret_if(data == NULL);
571
572         ad->misces_is_select_all = elm_check_state_get(obj);
573
574         EINA_LIST_FOREACH(ad->misces_list, l, node) {
575                 if (node && node->data) {
576                         item_data = node->data;
577                         if (item_data) {
578                                 item_data->chk_status = ad->misces_is_select_all;
579                                 elm_object_item_data_set(item_data->item, item_data);
580                                 storageUg_misces_handle_sel_list(ad, node->id, item_data->chk_status);
581                         }
582                 }
583         }
584
585         elm_genlist_realized_items_update(ad->gl_misces);
586
587         if (ad->misces_is_select_all) {
588                 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
589
590                 snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_sz_all);
591                 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
592
593                 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
594                 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
595                 ad->misces_checked = ad->misces_sz_all;
596         } else {
597                 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
598                 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
599
600                 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
601                 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
602                 ad->misces_checked = 0;
603         }
604 }
605
606 static inline Evas_Object *storageUg_misces_create_sel_all(Evas_Object *parent,
607                                                            SettingStorageUG *ad)
608 {
609         Evas_Object *btn, *icon;
610
611         btn = elm_button_add(parent);
612         elm_object_style_set(btn, "naviframe/title_icon");
613
614         icon = elm_icon_add(btn);
615         elm_image_file_set(icon, SETTING_ICON_PATH_CFG"select_all.png", NULL);
616
617         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_BOTH, 1 , 1);
618         elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
619
620         elm_object_part_content_set(btn, "icon", icon);
621         evas_object_smart_callback_add(btn, "clicked", storageUg_misces_sel_all_clicked, ad);
622
623         evas_object_show(btn);
624
625         return btn;
626 }
627 static void
628 storageUg_misces_cancel_cb(void *data, Evas_Object *obj, void *event_info)
629 {
630         SETTING_TRACE_BEGIN;
631         setting_retm_if(data == NULL, "data is NULL");
632         SettingStorageUG *ad = data;
633         elm_naviframe_item_pop(ad->navi);
634         SETTING_TRACE_END;
635 }
636 static void
637 layout_select_all_down_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
638 {
639         Evas_Object *layout = obj;
640         SettingStorageUG *ad = data;
641         Evas_Object *check = elm_object_part_content_get(ad->select_all_layout, "elm.icon");
642         Eina_Bool state = elm_check_state_get(check);
643         elm_check_state_set(check, !state);
644         storageUg_misces_sel_all_clicked(ad, check, NULL);
645 }
646
647 static int storageUg_misces_create(void *data)
648 {
649         SettingStorageUG *ad = data;
650         Evas_Object *sel_all = NULL;
651
652         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
653
654         /*first get misc file count*/
655         storageUg_meisces_get_list(ad);
656
657         if (ad->misces_sz_all > 0) {
658                 Evas_Object *box = elm_box_add(ad->navi);
659                 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
660                 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
661
662                 /*select all layout*/
663                 Evas_Object *layout = elm_layout_add(box);
664                 elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
665                 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
666                 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
667                 evas_object_show(layout);
668                 ad->select_all_layout = layout;
669
670                 Evas_Object *check = elm_check_add(layout);
671                 evas_object_propagate_events_set(check, EINA_FALSE);
672                 elm_object_part_content_set(layout, "elm.icon", check);
673                 elm_object_part_text_set(layout, "elm.text.main", _("IDS_ST_BODY_SELECT_ALL"));
674                 evas_object_smart_callback_add(check, "changed", storageUg_misces_sel_all_clicked, ad);
675                 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, layout_select_all_down_cb, ad);
676                 evas_object_show(layout);
677                 elm_box_pack_end(box, layout);
678
679                 /*misc file list*/
680                 storageUg_misces_add_list(ad);
681                 elm_object_focus_set(ad->gl_misces, EINA_TRUE);
682                 evas_object_show(ad->gl_misces);
683                 elm_box_pack_end(box, ad->gl_misces);
684                 evas_object_show(box);
685
686                 ad->misces_navi_it = setting_push_layout_navi_bar(_(STR_DELETE_ITEMS),
687                                                                   STORAGEUG_STR_BACK, NULL, NULL,
688                                                                   (setting_call_back_func)storageUg_misces_back_cb, storageUg_misces_delete_cb,
689                                                                   NULL, ad, box, ad->navi, NULL);
690
691
692                 /* Title Cancel Button */
693                 ad->title_left_btn = elm_button_add(ad->navi);
694                 elm_object_style_set(ad->title_left_btn, "naviframe/title_cancel");
695                 evas_object_smart_callback_add(ad->title_left_btn, "clicked", storageUg_misces_cancel_cb, ad);
696
697                 /* Title Done Button */
698                 ad->title_right_btn = elm_button_add(ad->navi);
699                 elm_object_style_set(ad->title_right_btn, "naviframe/title_done");
700                 evas_object_smart_callback_add(ad->title_right_btn, "clicked", storageUg_misces_delete_cb, ad);
701         } else {
702                 ad->misces_navi_it = setting_push_layout_navi_bar(_(STR_DELETE_ITEMS),
703                                                                   STORAGEUG_STR_BACK, NULL, NULL,
704                                                                   (setting_call_back_func)storageUg_misces_back_cb, NULL,
705                                                                   NULL, ad, NULL, ad->navi, NULL);
706                 if (NULL == ad->misces_lo_noitem) {
707                         ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
708
709                         Evas_Object *btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
710                         elm_object_disabled_set(btn, EINA_TRUE);
711                         ad->gl_misces = NULL;
712
713                         if (ad->misces_lo_noitem) {
714                                 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
715                         }
716                 }
717         }
718
719         setting_view_storage_misc.is_create = 1;
720
721         return SETTING_RETURN_SUCCESS;
722 }
723
724 static int storageUg_misces_destroy(void *data)
725 {
726         SettingStorageUG *ad = data;
727
728         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
729
730         if (ad->popup) {
731                 evas_object_del(ad->popup);
732                 ad->popup = NULL;
733         }
734
735         if (ad->del_worker) {
736                 storageUg_stop_async_worker(ad->del_worker);
737                 ad->del_worker = NULL;
738         }
739
740         if (ad->misces_list) {
741                 storageUg_misces_clear_list(ad->misces_list);
742                 ad->misces_list = NULL;
743         }
744
745         if (ad->misces_sel_list) {
746                 storageUg_misces_clear_sel_list(ad->misces_sel_list);
747                 ad->misces_sel_list = NULL;
748         }
749
750         ad->misces_navi_it = NULL;
751         ad->gl_misces = NULL;
752         ad->misces_lo_noitem = NULL;
753         ad->misces_checked = 0;
754
755         setting_view_storage_misc.is_create = 0;
756         elm_naviframe_item_pop(ad->navi);
757
758         return SETTING_RETURN_SUCCESS;
759 }
760
761 static int storageUg_misces_update(void *data)
762 {
763         SettingStorageUG *ad = data;
764
765         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
766
767         storageUg_misces_add_list(ad);
768         return SETTING_RETURN_SUCCESS;
769 }
770
771 static int storageUg_misces_cleanup(void *data)
772 {
773         return storageUg_misces_destroy(data);
774 }
775
776
777 void storageUg_misc_init(SettingStorageUG *ad)
778 {
779         ret_if(NULL == ad);
780         ret_if(ad->misces_view);
781
782         setting_view_storage_misc.create = storageUg_misces_create;
783         setting_view_storage_misc.destroy = storageUg_misces_destroy;
784         setting_view_storage_misc.update = storageUg_misces_update;
785         setting_view_storage_misc.cleanup = storageUg_misces_cleanup;
786
787         ad->misces_view = &setting_view_storage_misc;
788 }
789