tizen 2.4 release
[apps/home/settings.git] / setting-storage / src / setting-storage-miscellaneous.c
index 6d549ad..932df8b 100644 (file)
  * limitations under the License.
  *
  */
-#include <media_content.h>
-
 #include "setting-storage-utils.h"
 #include "setting-storage-async-worker.h"
 #include "setting-storage-miscellaneous.h"
 
+
+#include <media_content.h>
+#include <efl_extension.h>
+
 #define STR_DELETE_ITEMS       "IDS_ST_HEADER_DELETE_ITEMS_ABB2"
 typedef struct {
        char *id;
@@ -31,8 +33,192 @@ typedef struct {
        SettingStorageUG *ad;
 } Node_Info;
 
+
+static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj, void *event_info);
+static inline void storageUg_misces_gl_append_select_all_item(SettingStorageUG *ad);
+static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad);
+
 static setting_view setting_view_storage_misc;
 
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static Evas_Object* ctxpopup;
+
+static void
+ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       evas_object_del(ctxpopup);
+       ctxpopup = NULL;
+}
+
+static void
+move_more_ctxpopup(Evas_Object *ctxpopup)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *win;
+       Evas_Coord w, h;
+       int pos = -1;
+
+       /* We convince the top widget is a window */
+       win = elm_object_top_widget_get(ctxpopup);
+       elm_win_screen_size_get(win, NULL, NULL, &w, &h);
+       pos = elm_win_rotation_get(win);
+
+       switch (pos) {
+               case 0:
+               case 180:
+                       evas_object_move(ctxpopup, (w / 2), h);
+                       break;
+               case 90:
+                       evas_object_move(ctxpopup,  (h / 2), w);
+                       break;
+               case 270:
+                       evas_object_move(ctxpopup, (h / 2), w);
+                       break;
+       }
+}
+
+static void
+naviframe_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *ctxpopup = data;
+       move_more_ctxpopup(ctxpopup);
+}
+
+static void
+more_ctxpopup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *nf = data;
+       evas_object_event_callback_del_full(nf, EVAS_CALLBACK_RESIZE, naviframe_resize_cb, ctxpopup);
+}
+
+static void
+win_rotation_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *ctxpopup = data;
+       move_more_ctxpopup(ctxpopup);
+}
+
+//static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad);
+static void _genlist_check_hide(SettingStorageUG *ad, bool hide)
+{
+       SETTING_TRACE_BEGIN;
+       int count = 0;
+       Evas_Object *gl = ad->gl_misces;
+       Elm_Object_Item *it = elm_genlist_first_item_get(gl);
+       while (it)
+       {
+               Setting_GenGroupItem_Data *sel = (Setting_GenGroupItem_Data *)elm_object_item_data_get(it);
+               //sel->isItemHideFlag = 0;
+               sel->isItemHideFlag = hide;
+
+               // reset if check boxs get hidden
+               if (hide == true) {
+                       sel->chk_status = 0; 
+               }
+               SETTING_TRACE(" item_update %d ", count++);
+               elm_genlist_item_fields_update(it, "elm.swallow.end", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               it = elm_genlist_item_next_get(it);
+       }
+}
+
+/**
+ * [UI-CALLBACK] 'Delete' button handler on ctxpopup
+ */
+static void
+setting_storage_ctx_click_softkey_cb(void *data,
+                                                 Evas_Object *obj,
+                                                 void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retm_if(data == NULL, "Data parameter is NULL");
+
+       SettingStorageUG  *ad = (SettingStorageUG*) data;
+
+       //-------------------------------------------------------------------------------------------
+       // check genlist check box show/hide
+       //-------------------------------------------------------------------------------------------
+       ad->misces_ctx_popup_selected = true;
+
+#if 0
+       int count = 0;
+       Eina_List *l = elm_genlist_realized_items_get(ad->gl_misces);
+       Elm_Object_Item *it;
+       EINA_LIST_FREE(l, it)
+       {
+               Setting_GenGroupItem_Data *sel = (Setting_GenGroupItem_Data *)elm_object_item_data_get(it);
+
+               sel->isItemHideFlag = 0;
+
+               SETTING_TRACE(" item_update %d ", count++);
+               elm_genlist_item_fields_update(it, "elm.swallow.end", ELM_GENLIST_ITEM_FIELD_CONTENT);
+
+       }
+#else
+       storageUg_misces_gl_append_select_all_item(ad);
+       _genlist_check_hide(ad, false);
+#endif
+
+       if (ctxpopup != NULL) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+}
+
+
+
+/* Icon + Text (More button style : Naviframe Toolbar) */
+static void create_ctxpopup_more_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingStorageUG  *ad = (SettingStorageUG*) data;
+       Evas_Object *it_obj;
+       Evas_Object *nf = ad->navi;
+       Evas_Object *win;
+       Elm_Object_Item *it;
+
+       if (ctxpopup != NULL) {
+               evas_object_del(ctxpopup);
+       }
+
+       ctxpopup = elm_ctxpopup_add(nf);
+       elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
+       elm_object_style_set(ctxpopup, "more/default");
+       eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK, eext_ctxpopup_back_cb, NULL);
+       eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE, eext_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismissed_cb, NULL);
+       evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, more_ctxpopup_del_cb, nf);
+       evas_object_event_callback_add(nf, EVAS_CALLBACK_RESIZE, naviframe_resize_cb, ctxpopup);
+
+       /* We convince the top widget is a window */
+//     win = elm_object_top_widget_get(nf);
+//     evas_object_smart_callback_add(win, "rotation,changed", win_rotation_changed_cb, ctxpopup);
+
+       //---------------------------------------------------------------------------------------------
+       elm_ctxpopup_item_append(ctxpopup, _("IDS_ST_BODY_DELETE"), NULL, setting_storage_ctx_click_softkey_cb, ad);
+       //---------------------------------------------------------------------------------------------
+
+
+
+
+       elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+       move_more_ctxpopup(ctxpopup);
+       evas_object_show(ctxpopup);
+}
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * back button handler
+ *
+ * 1. "default" -> delete : back to default
+ */
 static Eina_Bool storageUg_misces_back_cb(void *data, Elm_Object_Item *it)
 {
        SettingStorageUG *ad = data;
@@ -45,6 +231,60 @@ static Eina_Bool storageUg_misces_back_cb(void *data, Elm_Object_Item *it)
        return EINA_TRUE;
 }
 
+static inline Evas_Object *_create_ly_misces_no_item(Evas_Object *parent)
+{
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "nocontents", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       icon = elm_image_add(layout);
+       elm_image_file_set(icon, SETTING_ICON_PATH_CFG "/00_nocontents_text.png", NULL);
+       elm_object_part_content_set(layout, "nocontents.image", icon);
+
+       elm_object_domain_translatable_part_text_set(layout, "elm.text", SETTING_PACKAGE,
+                                                    STORAGEUG_STR_NO_FILES);
+       elm_layout_signal_emit(layout, "text,disabled", "");
+
+       return layout;
+}
+
+static inline Evas_Object *_create_ly_app_default(Evas_Object *parent)
+{
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       return layout;
+}
+
+static inline void _update_navibar_buttons(SettingStorageUG *ad)
+{
+       /*update delete item buttons*/
+       if (ad->misces_checked > 0) {
+               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") == NULL) {
+                       elm_object_item_part_content_set(ad->misces_navi_it, "title_left_btn", ad->title_left_btn);
+               }
+               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") == NULL) {
+                       elm_object_item_part_content_set(ad->misces_navi_it, "title_right_btn", ad->title_right_btn);
+               }
+       } else {
+               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") != NULL) {
+                       elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
+                       evas_object_hide(ad->title_left_btn);
+               }
+               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") != NULL) {
+                       elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
+                       evas_object_hide(ad->title_right_btn);
+               }
+       }
+}
+
 static bool storageUg_misces_media_item_cb(media_info_h media, void *data)
 {
        Node_Info *node;
@@ -67,11 +307,14 @@ static bool storageUg_misces_media_item_cb(media_info_h media, void *data)
 
        node = calloc(1, sizeof(Node_Info));
        if (node) {
-               node->id = media_id;
-               node->path = file_path;
-               node->name = display_name;
+               node->id = strdup(media_id);
+               node->path = strdup(file_path);
+               node->name = strdup(display_name);
                ad->misces_list = eina_list_append(ad->misces_list, node);
        }
+       FREE(media_id);
+       FREE(file_path);
+       FREE(display_name);
 
        return true;
 }
@@ -143,7 +386,7 @@ static inline void storageUg_meisces_get_list(SettingStorageUG *ad)
                return;
        }
 
-       ad->misces_sz_all = eina_list_count(ad->misces_list);;
+       ad->misces_sz_all = eina_list_count(ad->misces_list);
 }
 
 static void storageUg_misces_handle_selecting(SettingStorageUG *ad)
@@ -183,10 +426,14 @@ static int storageUg_compare_str(const void *data1, const void *data2)
 static void storageUg_misces_handle_sel_list(SettingStorageUG *ad, char *id,
                                              int checked)
 {
+       SETTING_TRACE_BEGIN;
+
        if (checked) {
+               SETTING_TRACE("----- checked : %d ", ad->misces_checked);
                ad->misces_checked++;
                ad->misces_sel_list = eina_list_append(ad->misces_sel_list, strdup(id));
        } else {
+               SETTING_TRACE("----- un-checked : %d", ad->misces_checked);
                Eina_List *found;
 
                ad->misces_checked--;
@@ -196,56 +443,54 @@ static void storageUg_misces_handle_sel_list(SettingStorageUG *ad, char *id,
                ad->misces_sel_list = eina_list_remove_list(ad->misces_sel_list, found);
        }
 
-       /*update select all check state*/
-       Evas_Object *check = elm_object_part_content_get(ad->select_all_layout, "elm.icon");
-       if (ad->misces_checked >= ad->misces_sz_all) {
-               elm_check_state_set(check, EINA_TRUE);
-       } else {
-               elm_check_state_set(check, EINA_FALSE);
-       }
        /*update delete item buttons*/
-       if (ad->misces_checked > 0) {
-               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") == NULL) {
-                       elm_object_item_part_content_set(ad->misces_navi_it, "title_left_btn", ad->title_left_btn);
-               }
-               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") == NULL) {
-                       elm_object_item_part_content_set(ad->misces_navi_it, "title_right_btn", ad->title_right_btn);
-               }
-       } else {
-               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") != NULL) {
-                       elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
-                       evas_object_hide(ad->title_left_btn);
-               }
-               if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") != NULL) {
-                       elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
-                       evas_object_hide(ad->title_right_btn);
-               }
-       }
+       _update_navibar_buttons(ad);
 }
 
 static void storageUg_misces_genlist_sel(void *data, Evas_Object *obj,
                                          void *event_info)
 {
+       SETTING_TRACE_BEGIN;
        Node_Info *node;
        SettingStorageUG *ad = data;
        Elm_Object_Item *item = event_info;
-       Setting_GenGroupItem_Data *d_item;
+       Setting_GenGroupItem_Data *d_item = NULL;
 
        ret_if(data == NULL);
 
        elm_genlist_item_selected_set(item, 0);
        d_item = elm_object_item_data_get(item);
-       node = d_item->userdata;
+       if (d_item) {
+               node = d_item->userdata;
+
+               setting_update_gl_item_chk_status(d_item, !(d_item->chk_status));
+
+               storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
+               storageUg_misces_handle_selecting(ad);
+       }
+
+#if 0
+       if (NULL == ad->misces_lo_noitem) {
+               ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
+
+               Evas_Object *btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
+               elm_object_disabled_set(btn, EINA_TRUE);
+               ad->gl_misces = NULL;
+
+               if (ad->misces_lo_noitem) {
+                       elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
+               }
+       }
+#endif
 
-       setting_update_gl_item_chk_status(d_item, !(d_item->chk_status));
 
-       storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
-       storageUg_misces_handle_selecting(ad);
 }
 
 static void storageUg_misces_genlist_chk_cb(void *data, Evas_Object *obj,
                                             void *event_info)
 {
+       SETTING_TRACE_BEGIN;
+
        Node_Info *node;
        SettingStorageUG *ad;
        Setting_GenGroupItem_Data *d_item = data;
@@ -253,32 +498,19 @@ static void storageUg_misces_genlist_chk_cb(void *data, Evas_Object *obj,
        ret_if(data == NULL);
 
        node = d_item->userdata;
-       ad = node->ad;
-       d_item->chk_status = elm_check_state_get(obj);
+       if (node)
+       {
+               ad = node->ad;
+               d_item->chk_status = elm_check_state_get(obj);
 
-       storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
-       storageUg_misces_handle_selecting(ad);
+               storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
+               storageUg_misces_handle_selecting(ad);
+       } else {
+               SETTING_TRACE_ERROR(">>>>>>>>> node is NULL");
+       }
 }
 
-static inline Evas_Object *storageUg_misces_no_item(Evas_Object *parent)
-{
-       Evas_Object *layout, *icon;
-
-       layout = elm_layout_add(parent);
-       elm_layout_theme_set(layout, "layout", "nocontents", "default");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-       icon = elm_image_add(layout);
-       elm_image_file_set(icon, SETTING_ICON_PATH_CFG "/00_nocontents_text.png", NULL);
-       elm_object_part_content_set(layout, "nocontents.image", icon);
-
-       elm_object_domain_translatable_part_text_set(layout, "elm.text", SYSTEM_PACKAGE,
-                                                    STORAGEUG_STR_NO_FILES);
-       elm_layout_signal_emit(layout, "text,disabled", "");
 
-       return layout;
-}
 
 static inline void storageUg_misces_clear_sel_list(Eina_List *list)
 {
@@ -290,8 +522,123 @@ static inline void storageUg_misces_clear_sel_list(Eina_List *list)
        eina_list_free(list);
 }
 
+
+
+/**
+ * "Select All" - check button handler
+ */
+static inline void setting_storage_select_all_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retm_if(data == NULL, "Data parameter is NULL");
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+       SettingStorageUG *ad = (SettingStorageUG *)list_item->userdata;
+
+       list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
+       ad->misces_is_select_all = elm_check_state_get(obj);
+
+       SETTING_TRACE_ERROR("1");
+
+
+
+       Eina_List *l = NULL;
+       Evas_Object *toolbar;
+       Node_Info *node = NULL;
+       Setting_GenGroupItem_Data *item_data = NULL;
+
+
+       SETTING_TRACE_ERROR("2 : ad->misces_is_select_all--->%d", ad->misces_is_select_all);
+       SETTING_TRACE_ERROR("ad->misces_list--->%x", ad->misces_list);
+       EINA_LIST_FOREACH(ad->misces_list, l, node) {
+               if (node && node->data) {
+                       item_data = node->data;
+                       SETTING_TRACE_ERROR("2.1");
+                       if (item_data) {
+                               item_data->chk_status = ad->misces_is_select_all;
+                               SETTING_TRACE_ERROR("2.2");
+                               elm_object_item_data_set(item_data->item, item_data);
+                               SETTING_TRACE_ERROR("2.3");
+                               storageUg_misces_handle_sel_list(ad, node->id, item_data->chk_status);
+                               SETTING_TRACE_ERROR("2.4");
+                       }
+               }
+       }
+
+       SETTING_TRACE_ERROR("3");
+       elm_genlist_realized_items_update(ad->gl_misces);
+
+       SETTING_TRACE_ERROR("4");
+       bool select_all_state = ad->misces_is_select_all;
+       if (select_all_state) {
+               char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
+
+               snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_sz_all);
+               elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
+
+               toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
+               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
+               ad->misces_checked = ad->misces_sz_all;
+       } else {
+               elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
+               elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
+
+               toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
+               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
+               ad->misces_checked = 0;
+               SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
+       }
+       SETTING_TRACE_ERROR("5");
+}
+
+/**
+ * Delete 'Select All' item in genlist
+ */
+static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *gl = ad->gl_misces;
+
+       Elm_Object_Item *it = elm_genlist_first_item_get(gl);
+       if (it) {
+               elm_object_item_del     (it);
+       }
+}
+
+
+
+/**
+ * "Select All" check button
+ */
+static inline void storageUg_misces_gl_append_select_all_item(SettingStorageUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       int checked = 0;
+       Setting_GenGroupItem_Data *item_data = NULL;
+       //ad->gl_misces
+
+       evas_object_data_set(ad->gl_misces, "InsertType", "Prepend");
+
+       item_data = setting_create_Gendial_field_def(ad->gl_misces,
+                                                            &(itc_1text_1icon), storageUg_misces_sel_all_clicked, ad,
+                                                                SWALLOW_Type_1ICON_1RADIO, NULL, NULL, checked, _("IDS_ST_BODY_SELECT_ALL"), NULL,
+                                                            setting_storage_select_all_chk_btn_cb);
+
+       if (item_data) {
+               item_data->userdata = ad;
+               item_data->isItemHideFlag = TRUE;
+       } else {
+               SETTING_TRACE_ERROR("item_data is NULL");
+       }
+
+       evas_object_data_set(ad->gl_misces, "InsertType", "");
+}
+
+
+
 static inline void storageUg_misces_gl_append_items(SettingStorageUG *ad)
 {
+       SETTING_TRACE_BEGIN;
        int checked;
        Node_Info *node;
        Eina_List *found, *cur, *tmp_sel_list;
@@ -315,13 +662,14 @@ static inline void storageUg_misces_gl_append_items(SettingStorageUG *ad)
 
                item_data = setting_create_Gendial_field_def(ad->gl_misces,
                                                             &(itc_1text_1icon), storageUg_misces_genlist_sel, ad,
-                                                            SWALLOW_Type_1CHECK_RIGHT, NULL, NULL, checked, node->name, node->path,
+                                                                SWALLOW_Type_1CHECK_RIGHT_INVISIBLE, NULL, NULL, checked, node->name, node->path,
                                                             storageUg_misces_genlist_chk_cb);
 
                if (item_data) {
                        item_data->userdata = node;
                        node->data = item_data;
                        node->ad = ad;
+                       item_data->isItemHideFlag = TRUE;
                } else {
                        SETTING_TRACE_ERROR("item_data is NULL");
                }
@@ -339,15 +687,13 @@ static inline Evas_Object *storageUg_misces_genlist(Evas_Object *parent)
                SETTING_TRACE_ERROR("elm_genlist_add() Fail");
                return NULL;
        }
-
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       elm_genlist_block_count_set(genlist, 2);
        evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-       elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
        evas_object_show(genlist);
 
-       evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, NULL);
-
        return genlist;
 }
 
@@ -359,7 +705,9 @@ static void storageUg_misces_delete_list(SettingStorageUG *ad)
 
        ad->misces_checked = 0;
        Setting_GenGroupItem_Data *item_data = NULL;
-       Elm_Object_Item *it = elm_genlist_first_item_get(ad->gl_misces);
+
+       /* Elm_Object_Item *it = elm_genlist_first_item_get(ad->gl_misces); */
+       Elm_Object_Item *it = elm_genlist_nth_item_get(ad->gl_misces, 1); /* second */
 
        while (it) {
                item_data = elm_object_item_data_get(it);
@@ -369,11 +717,14 @@ static void storageUg_misces_delete_list(SettingStorageUG *ad)
                        if (item_data->chk_status) {
                                elm_object_item_del(item_data->item);
                                Node_Info *node = item_data->userdata;
-                               ad->misces_list = eina_list_remove(ad->misces_list, node);
-                               FREE(node->id);
-                               FREE(node->path);
-                               FREE(node->name);
-                               FREE(node);
+                               if (node)
+                               {
+                                       ad->misces_list = eina_list_remove(ad->misces_list, node);
+                                       FREE(node->id);
+                                       FREE(node->path);
+                                       FREE(node->name);
+                                       FREE(node);
+                               }
                        }
                }
        }
@@ -393,24 +744,28 @@ static void storageUg_misces_delete_list(SettingStorageUG *ad)
                        evas_object_hide(btn_cancel);
                }
                if (NULL == ad->misces_lo_noitem) {
-                       ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
+                       ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
                }
 
-
                ad->gl_misces = NULL;
 
                if (ad->misces_lo_noitem) {
                        elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
                }
-
        }
 }
 
+/**
+ *
+ * int misces_sz_all
+ */
 static void storageUg_misces_add_list(SettingStorageUG *ad)
 {
        Evas_Object *toolbar, *btn;
        Evas_Object *lo_new = NULL;
 
+       SETTING_TRACE("Entering storageUg_misces_add_list");
+
        ret_if(NULL == ad);
 
        ad->misces_checked = 0;
@@ -418,10 +773,11 @@ static void storageUg_misces_add_list(SettingStorageUG *ad)
 
        if (0 == ad->misces_sz_all) {
                if (NULL == ad->misces_lo_noitem) {
-                       lo_new = ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
+                       lo_new = ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
 
                        btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
-                       elm_object_disabled_set(btn, EINA_TRUE);
+                       if (NULL != btn)
+                               elm_object_disabled_set(btn, EINA_TRUE);
                        ad->gl_misces = NULL;
                }
        } else {
@@ -431,17 +787,19 @@ static void storageUg_misces_add_list(SettingStorageUG *ad)
                        lo_new = ad->gl_misces = storageUg_misces_genlist(ad->navi);
 
                storageUg_misces_gl_append_items(ad);
+
                ad->misces_lo_noitem = NULL;
        }
 
        if (lo_new) {
-               elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content",
-                                                lo_new);
+               elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", lo_new);
        }
 
+       /* disable toolbar object */
        if (0 == ad->misces_checked) {
                toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
-               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
+               if (NULL != toolbar)
+                       elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
        }
 }
 
@@ -453,7 +811,7 @@ void storageUg_misces_delete_files_cb(int fn_result, SettingStorageUG *ad)
 
        /* update genlist */
        SETTING_TRACE("After deleting, updating the file list");
-       /*      storageUg_misces_add_list(ad); */
+
        storageUg_misces_delete_list(ad);
 
        if (SETTING_RETURN_SUCCESS != fn_result) {
@@ -473,6 +831,11 @@ void storageUg_misces_delete_files_cb(int fn_result, SettingStorageUG *ad)
        }
 }
 
+
+/**
+ * [controller] delete actual files with ad->misces_list
+ * 
+ */
 static int storageUg_misces_delete_files(SettingStorageUG *ad)
 {
        Eina_List *l = NULL;
@@ -501,6 +864,10 @@ static int storageUg_misces_delete_files(SettingStorageUG *ad)
        return SETTING_RETURN_SUCCESS;
 }
 
+
+/**
+ * [UI] Done button -> create popup -> button handler
+ */
 static void storageUg_misces_delete_resp(void *data, Evas_Object *obj,
                                          void *event_info)
 {
@@ -522,60 +889,85 @@ static void storageUg_misces_delete_resp(void *data, Evas_Object *obj,
                return;
        }
 
+       SETTING_TRACE(">>>>> checked : %d before deletion ", ad->misces_checked);
+
        if (ad->misces_checked) {
                ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
-                                                                 NULL, NULL, storageUg_popup_del, 0, TRUE, TRUE);
+                                                                 NULL, NULL, storageUg_popup_del, 0, TRUE, TRUE, 0);
 
                if (ad->del_worker)
                        storageUg_stop_async_worker(ad->del_worker);
                ad->del_worker = storageUg_start_async_worker(storageUg_misces_delete_files,
                                                              storageUg_misces_delete_files_cb, ad);
        } else {
-               ad->popup = setting_create_popup_without_btn(ad, ad->win, NULL,
-                                                            STORAGEUG_STR_NO_SELECTED, storageUg_popup_del,
-                                                            SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
+               ad->popup = setting_create_popup(ad, ad->win, NULL,
+                                                                                STORAGEUG_STR_NO_SELECTED, storageUg_popup_del,
+                                                                                SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE, 0);
        }
 }
 
-static void storageUg_misces_delete_cb(void *data, Evas_Object *obj,
-                                       void *event_info)
+
+/**
+ * Done button handler for 'delete'
+ */
+static void storageUg_misces_delete_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SettingStorageUG *ad = (SettingStorageUG *) data;
 
        ret_if(NULL == data);
 
-       ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
-                                                 STORAGEUG_STR_DELETE_Q, storageUg_misces_delete_resp, 0,
-                                                 2, STORAGEUG_STR_DELETE, STORAGEUG_STR_CANCEL);
+       ad->popup = setting_create_popup(ad, ad->win, NULL,
+                                                                        STORAGEUG_STR_DELETE_Q, storageUg_misces_delete_resp,
+                                                                        0, FALSE, FALSE,
+                                                                        2, STORAGEUG_STR_DELETE, STORAGEUG_STR_CANCEL);
 }
 
-static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj,
-                                             void *event_info)
+
+/**
+ * Genlist Touch handler
+ * @todo setting_storage_select_all_chk_btn_cb is similar to this function
+ */
+static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj, void *event_info)
 {
+       SETTING_TRACE_BEGIN;
        Eina_List *l = NULL;
        Evas_Object *toolbar;
        Node_Info *node = NULL;
        SettingStorageUG *ad = data;
+       //Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+
        Setting_GenGroupItem_Data *item_data = NULL;
 
+       SETTING_TRACE_ERROR("1");
+
        ret_if(data == NULL);
 
        ad->misces_is_select_all = elm_check_state_get(obj);
 
+       SETTING_TRACE_ERROR("2 : ad->misces_is_select_all--->%d", ad->misces_is_select_all);
+       SETTING_TRACE_ERROR("ad->misces_list--->%x", ad->misces_list);
        EINA_LIST_FOREACH(ad->misces_list, l, node) {
                if (node && node->data) {
                        item_data = node->data;
+                       SETTING_TRACE_ERROR("2.1");
                        if (item_data) {
-                               item_data->chk_status = ad->misces_is_select_all;
+                               item_data->chk_status = (ad->misces_is_select_all == 1) ? 0 : 1;
+                               SETTING_TRACE_ERROR("2.2");
                                elm_object_item_data_set(item_data->item, item_data);
+                               SETTING_TRACE_ERROR("2.3");
                                storageUg_misces_handle_sel_list(ad, node->id, item_data->chk_status);
+                               SETTING_TRACE_ERROR("2.4");
                        }
                }
        }
 
+       SETTING_TRACE_ERROR("3");
        elm_genlist_realized_items_update(ad->gl_misces);
 
-       if (ad->misces_is_select_all) {
+       SETTING_TRACE_ERROR("4");
+       bool select_all_state = (ad->misces_is_select_all == 1) ? 0 : 1;
+
+       if (select_all_state) {
                char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
 
                snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_sz_all);
@@ -591,50 +983,79 @@ static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj,
                toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
                elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
                ad->misces_checked = 0;
+               SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
        }
+       SETTING_TRACE_ERROR("5");
 }
 
-static inline Evas_Object *storageUg_misces_create_sel_all(Evas_Object *parent,
-                                                           SettingStorageUG *ad)
+/**
+ * Naviframe 'cancel' button handler
+ */
+static void
+storageUg_misces_cancel_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       Evas_Object *btn, *icon;
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "data is NULL");
+       SettingStorageUG *ad = data;
 
-       btn = elm_button_add(parent);
-       elm_object_style_set(btn, "naviframe/title_icon");
+       //ad->misces_ctx_popup_selected = true;
+       if (ad->misces_ctx_popup_selected) {
 
-       icon = elm_icon_add(btn);
-       elm_image_file_set(icon, SETTING_ICON_PATH_CFG"select_all.png", NULL);
+               SETTING_TRACE_ERROR("ad->misces_ctx_popup_selected == true");
 
-       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_BOTH, 1 , 1);
-       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+               // change UI style
+               ad->misces_ctx_popup_selected = false;
 
-       elm_object_part_content_set(btn, "icon", icon);
-       evas_object_smart_callback_add(btn, "clicked", storageUg_misces_sel_all_clicked, ad);
+               // 1. remove 1st item of genlist
+               storageUg_misces_gl_remove_select_all_item(ad);
+               // 2. remove all 'toggle' from all list
+               _genlist_check_hide(ad, true);
 
-       evas_object_show(btn);
+               // remove sub text of naviframe title
+               elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
+               elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
+
+               Evas_Object *toolbar = NULL;
+               toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
+               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
+               ad->misces_checked = 0;
+
+               #if 0
+               // delete all items
+               if (ad->misces_list) {
+                       storageUg_misces_clear_list(ad->misces_list);
+                       ad->misces_list = NULL;
+               }
+               #endif
+
+               // change button style
+               _update_navibar_buttons(ad);
+
+               SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
+
+       } else {
+               SETTING_TRACE_ERROR("ad->misces_ctx_popup_selected == false, go naviframe_back");
+               elm_naviframe_item_pop(ad->navi);
+       }
 
-       return btn;
-}
-static void
-storageUg_misces_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       setting_retm_if(data == NULL, "data is NULL");
-       SettingStorageUG *ad = data;
-       elm_naviframe_item_pop(ad->navi);
        SETTING_TRACE_END;
 }
+
 static void
-layout_select_all_down_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+setting_storage_click_softkey_delete_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       Evas_Object *layout = obj;
-       SettingStorageUG *ad = data;
-       Evas_Object *check = elm_object_part_content_get(ad->select_all_layout, "elm.icon");
-       Eina_Bool state = elm_check_state_get(check);
-       elm_check_state_set(check, !state);
-       storageUg_misces_sel_all_clicked(ad, check, NULL);
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retm_if(data == NULL, "Data parameter is NULL");
+
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       return;
 }
 
+//--------------------------------------------------
+//     name: "storageview_layout";
+//--------------------------------------------------
 static int storageUg_misces_create(void *data)
 {
        SettingStorageUG *ad = data;
@@ -646,39 +1067,22 @@ static int storageUg_misces_create(void *data)
        storageUg_meisces_get_list(ad);
 
        if (ad->misces_sz_all > 0) {
-               Evas_Object *box = elm_box_add(ad->navi);
-               evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-               /*select all layout*/
-               Evas_Object *layout = elm_layout_add(box);
-               elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
-               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
-               evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_show(layout);
-               ad->select_all_layout = layout;
-
-               Evas_Object *check = elm_check_add(layout);
-               evas_object_propagate_events_set(check, EINA_FALSE);
-               elm_object_part_content_set(layout, "elm.icon", check);
-               elm_object_part_text_set(layout, "elm.text.main", "Select All");
-               evas_object_smart_callback_add(check, "changed", storageUg_misces_sel_all_clicked, ad);
-               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, layout_select_all_down_cb, ad);
-               evas_object_show(layout);
-               elm_box_pack_end(box, layout);
 
                /*misc file list*/
                storageUg_misces_add_list(ad);
+               // focus a list
                elm_object_focus_set(ad->gl_misces, EINA_TRUE);
-               evas_object_show(ad->gl_misces);
-               elm_box_pack_end(box, ad->gl_misces);
-               evas_object_show(box);
 
-               ad->misces_navi_it = setting_push_layout_navi_bar(_(STR_DELETE_ITEMS),
-                                                                 STORAGEUG_STR_BACK, NULL, NULL,
-                                                                 (setting_call_back_func)storageUg_misces_back_cb, storageUg_misces_delete_cb,
-                                                                 NULL, ad, box, ad->navi, NULL);
+               // IDS_ST_BODY_MISCELLANEOUS_FILES
+               // STR_DELETE_ITEMS
+               ad->misces_navi_it = setting_push_layout_navi_bar(_(IDS_ST_BODY_MISCELLANEOUS_FILES),
+                                                                                                                       NULL, NULL, NULL,
+                                                                                                                       (setting_call_back_func)storageUg_misces_back_cb,
+                                                                                                                       NULL,
+                                                                                                                       NULL,
+                                                                                                                       ad, NULL, ad->navi, NULL);
 
+               elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->gl_misces);
 
                /* Title Cancel Button */
                ad->title_left_btn = elm_button_add(ad->navi);
@@ -690,12 +1094,18 @@ static int storageUg_misces_create(void *data)
                elm_object_style_set(ad->title_right_btn, "naviframe/title_done");
                evas_object_smart_callback_add(ad->title_right_btn, "clicked", storageUg_misces_delete_cb, ad);
        } else {
-               ad->misces_navi_it = setting_push_layout_navi_bar(_(STR_DELETE_ITEMS),
-                                                                 STORAGEUG_STR_BACK, NULL, NULL,
-                                                                 (setting_call_back_func)storageUg_misces_back_cb, NULL,
-                                                                 NULL, ad, NULL, ad->navi, NULL);
+
+               ad->misces_navi_it = setting_push_layout_navi_bar(_(IDS_ST_BODY_MISCELLANEOUS_FILES),
+                                                                                                                       NULL,
+                                                                                                                       NULL,
+                                                                                                                       NULL,
+                                                                                                                       (setting_call_back_func)storageUg_misces_back_cb,
+                                                                                                                       NULL,
+                                                                                                                       NULL,
+                                                                                                                       ad, NULL, ad->navi, NULL);
+
                if (NULL == ad->misces_lo_noitem) {
-                       ad->misces_lo_noitem = storageUg_misces_no_item(ad->navi);
+                       ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
 
                        Evas_Object *btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
                        elm_object_disabled_set(btn, EINA_TRUE);
@@ -706,6 +1116,13 @@ static int storageUg_misces_create(void *data)
                        }
                }
        }
+       elm_naviframe_item_pop_cb_set(ad->misces_navi_it, storageUg_misces_back_cb, ad);
+
+       // Add ctx popup handler
+       Evas_Object* btn = elm_button_add(ad->navi);
+       elm_object_style_set(btn, "naviframe/more/default");
+       evas_object_smart_callback_add(btn, "clicked", create_ctxpopup_more_button_cb, ad);
+       elm_object_item_part_content_set(ad->misces_navi_it, "toolbar_more_btn", btn);
 
        setting_view_storage_misc.is_create = 1;
 
@@ -744,6 +1161,7 @@ static int storageUg_misces_destroy(void *data)
        ad->misces_checked = 0;
 
        setting_view_storage_misc.is_create = 0;
+       elm_naviframe_item_pop(ad->navi);
 
        return SETTING_RETURN_SUCCESS;
 }
@@ -755,7 +1173,6 @@ static int storageUg_misces_update(void *data)
        retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        storageUg_misces_add_list(ad);
-
        return SETTING_RETURN_SUCCESS;
 }