[PACKAGE UPLOAD] VERSION 0.0.56
authorEunmi Son <eunmi.son@samsung.com>
Tue, 22 Jan 2013 21:47:24 +0000 (01:47 +0400)
committerEunmi Son <eunmi.son@samsung.com>
Tue, 22 Jan 2013 21:47:24 +0000 (01:47 +0400)
Implement tabbar in list view

Change-Id: Ica7b98ff127e80bd18a40068efb748983ef6b6ea

packaging/ug-setting-manage-applications-efl.spec
ug/include/mgr-app-string.h
ug/include/mgr-app-uigadget.h
ug/src/mgr-app-view-app-list.c

index 0841090..1b21a65 100644 (file)
@@ -3,7 +3,7 @@
 
 Name:          ug-setting-manage-applications-efl
 Summary:       Manage Application package
-Version:       0.0.55
+Version:       0.0.56
 Release:       0
 Group:         Applications/System
 License:       Flora Software License
index e498200..cb4bb99 100644 (file)
@@ -29,6 +29,7 @@ extern "C" {
 #define MGRAPP_STR_YES dgettext("sys_string", "IDS_COM_SK_YES")\r
 #define MGRAPP_STR_NO dgettext("sys_string", "IDS_COM_SK_NO")\r
 #define MGRAPP_STR_ERROR dgettext("sys_string", "IDS_COM_POP_ERROR")\r
+#define MGRAPP_STR_ALL dgettext("sys_string", "IDS_COM_BODY_ALL")\r
 \r
 #define MGRAPP_STR_MANAGE_APPLICATIONS dgettext(PACKAGE, "IDS_ST_BODY_MANAGE_APPLICATIONS")\r
 #define MGRAPP_STR_APPLICATION_INFO dgettext(PACKAGE, "IDS_ST_HEADER_APPLICATION_INFO")\r
@@ -50,6 +51,8 @@ extern "C" {
 #define MGRAPP_STR_STORAGE dgettext(PACKAGE, "IDS_ST_BODY_STORAGE")\r
 #define MGRAPP_STR_LAUNCH_BY_DEFAULT dgettext(PACKAGE, "IDS_ST_BODY_LAUNCH_BY_DEFAULT")\r
 \r
+#define MGRAPP_STR_RUNNING "Running"\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index c50bc6a..5fc048a 100755 (executable)
@@ -42,6 +42,13 @@ typedef enum {
        VIEW_TYPE_MAX
 } view_type_t;
 
+typedef enum {
+       LIST_SEG_TYPE_APPLICATION = 0,
+       LIST_SEG_TYPE_RUNNING,
+       LIST_SEG_TYPE_ALL,
+       LIST_SEG_TYPE_MAX
+} seg_type_t;
+
 struct ug_data {
        Evas_Object             *win_main;
        Evas_Object                     *bg;
index 40340e4..8cbaf3f 100755 (executable)
@@ -27,6 +27,8 @@
 #include <stdbool.h>
 #include <package-manager.h>
 #include <pkgmgr-info.h>
+#include <appsvc.h>
+#include <app_manager.h>
 
 #define WRT_PREFIX                     "wgt"
 #define TPK_PREFIX                     "tpk"
@@ -68,6 +70,8 @@ static GList *_installed_list = NULL;
 static int _installed_cnt = 0;
 static int _target_idx = 0;
 static Eina_Bool _is_done = false;
+static Elm_Object_Item *_tabbar_item[VIEW_TYPE_MAX] = {NULL,};
+static Elm_Object_Item *_navi_it = NULL;
 
 static Elm_Genlist_Item_Class *itc = NULL;
 static Elm_Genlist_Item_Class *itc_sep = NULL;
@@ -81,6 +85,24 @@ static void _free_resources(struct ug_data * ugd)
 {
        MGR_APP_BEGIN();
 
+       mgr_app_app_info_t *app_info = NULL;
+       int i = 0;
+
+       for (i = 0; i < _installed_cnt; i++ ) {
+               app_info = (mgr_app_app_info_t *)g_list_nth_data(_installed_list, 0);
+               if (NULL == app_info) {
+                       continue;
+               }
+               MGR_APP_MEM_FREE(app_info->pkg_label);
+               MGR_APP_MEM_FREE(app_info->pkg_name);
+               //MGR_APP_MEM_FREE(app_info->app_name);
+               //MGR_APP_MEM_FREE(app_info->app_type);
+               MGR_APP_MEM_FREE(app_info->pkg_type);
+               MGR_APP_MEM_FREE(app_info->icon_path);
+               //MGR_APP_MEM_FREE(app_info->appid);
+               _installed_list = g_list_remove(_installed_list, app_info);
+       }
+
        elm_genlist_item_class_free(itc);
        elm_genlist_item_class_free(itc_sep);
 }
@@ -121,7 +143,7 @@ static void _gl_del(void *data, Evas_Object *obj)
        ret_if(data == NULL);
        mgr_app_app_info_t *app_info = (mgr_app_app_info_t *)data;
 
-
+#if 0
        // TODO
        MGR_APP_MEM_FREE(app_info->pkg_name);
        MGR_APP_MEM_FREE(app_info->pkg_label);
@@ -131,6 +153,8 @@ static void _gl_del(void *data, Evas_Object *obj)
        MGR_APP_MEM_FREE(app_info->icon_path);
        //MGR_APP_MEM_FREE(app_info->appid);
        //MGR_APP_MEM_FREE(app_info);
+#endif
+
        MGR_APP_END();
 }
 
@@ -1017,7 +1041,7 @@ static int _pkgmgr_iter_fn(pkgmgr_pkginfo_h handle, void *data)
        return 0;
 }
 
-static void _create_genlist_app_list(Evas_Object *parent, void *data)
+static void _create_genlist_app_list(seg_type_t seg, void *data)
 {
        MGR_APP_BEGIN();
 
@@ -1026,6 +1050,7 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
        Evas_Object             *genlist        = NULL;
        Evas_Object     *index          = NULL;
        Elm_Object_Item *item_sep       = NULL;
+       Evas_Object *layout = NULL;
 
        Elm_Object_Item *item = NULL;
        char *letter = NULL;
@@ -1035,7 +1060,7 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
 
        int r = PKGMGR_R_ERROR;
        int i = 0;
-
+       bool is_running = false;
 
        /* set the genlist item style */
        itc = elm_genlist_item_class_new();
@@ -1055,18 +1080,20 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
        itc_sep->func.state_get = NULL;
        itc_sep->func.del               = NULL;
 
+       layout = mgr_app_create_layout_file(ugd->navi_bar, EDC_FILE, EDC_GROUPS);
+       ret_if(NULL == layout);
 
        /* Create index */
-       index = elm_index_add(parent);
+       index = elm_index_add(layout);
        ret_if(index == NULL);
-       elm_object_part_content_set(parent, "elm.swallow.content.index", index);
+       elm_object_part_content_set(layout, "elm.swallow.content.index", index);
        evas_object_show(index);
 
 
        /* add a genlist */
-       genlist = elm_genlist_add(parent);
+       genlist = elm_genlist_add(layout);
        ret_if(genlist == NULL);
-       elm_object_part_content_set(parent, "elm.swallow.content.genlist", genlist);
+       elm_object_part_content_set(layout, "elm.swallow.content.genlist", genlist);
        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);
@@ -1079,20 +1106,6 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
        _index = index;
        _index_cnt = 0;
 
-#if 0
-       //r = pkgmgrinfo_appinfo_get_installed_list(_app_list_cb, NULL);
-       //if (PKGMGR_R_OK != r) {
-       //      MGR_APP_DEBUG_ERR("pkgmgrinfo_appinfo_get_installed_list failed. %d", r);
-       //}
-#endif
-       r = pkgmgr_pkginfo_get_list(_pkgmgr_iter_fn, data);
-       //r = pkgmgr_get_pkg_list(_pkgmgr_iter_fn, data); // deprecated api ??
-       if (PKGMGR_R_OK != r) {
-               MGR_APP_DEBUG_ERR("pkgmgr_get_pkg_list failed. %d", r);
-       }
-
-       /* sorting by pkg_name */
-       _installed_list = g_list_sort(_installed_list, _app_list_qsort_cb);
 
        /* header border */
        item_sep = elm_genlist_item_append(genlist, itc_sep, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
@@ -1108,6 +1121,12 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
                }
                MGR_APP_DEBUG("genlist %d app_info->pkg_label: %s", i, app_info->pkg_label);
 
+               if (LIST_SEG_TYPE_RUNNING == seg
+                               && APP_MANAGER_ERROR_NONE == app_manager_is_running(app_info->pkg_name, &is_running)
+                               && false == is_running) {
+                       continue;
+               }
+               
                item = elm_genlist_item_append(genlist, itc, (void*)app_info, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, (void*)ugd);
 
                /* fast scroll insertion */
@@ -1118,6 +1137,7 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
                }
 
                MGR_APP_MEM_FREE(letter);
+
        }
 
        /* footer border */
@@ -1129,13 +1149,13 @@ static void _create_genlist_app_list(Evas_Object *parent, void *data)
        evas_object_smart_callback_add(index, "changed", _index_changed, NULL);
        evas_object_smart_callback_add(index, "selected", _index_selected, NULL);
 
+       elm_object_item_part_content_set(_navi_it, "elm.swallow.content", layout);
 
        /* register pkg-mgr listener */
        ret_if(ugd->pc_listen == NULL);
        r = pkgmgr_client_listen_status(ugd->pc_listen, mgrapp_view_listen_cb, (void*)ugd);
        if (r < 0) {
                MGR_APP_DEBUG_ERR("status listen failed!\n");
-               MGR_APP_MEM_FREE(genlist);
                return ;
        }
 
@@ -1159,6 +1179,39 @@ static void _doubletap_sensor_cb(void *data)
        MGR_APP_END();
 }
 
+static void _create_genlist_app_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MGR_APP_BEGIN();
+
+       ret_if(NULL == data);
+               
+       _create_genlist_app_list(LIST_SEG_TYPE_APPLICATION, data);
+
+       MGR_APP_END();
+}
+
+static void _create_genlist_all_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MGR_APP_BEGIN();
+
+       ret_if(NULL == data);
+       
+       _create_genlist_app_list(LIST_SEG_TYPE_ALL, data);
+
+       MGR_APP_END();
+}
+
+static void _create_genlist_running_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MGR_APP_BEGIN();
+
+       ret_if(NULL == data);
+               
+       _create_genlist_app_list(LIST_SEG_TYPE_RUNNING, data);
+
+       MGR_APP_END();
+}
+
 void mgrapp_view_list_create(void *data)
 {
        MGR_APP_BEGIN();
@@ -1168,13 +1221,17 @@ void mgrapp_view_list_create(void *data)
        struct ug_data *ugd = (struct ug_data *)data;
        Evas_Object *layout = NULL;
        Evas_Object *back_btn = NULL;
-
-       mgrapp_set_view_type(VIEW_TYPE_APP_LIST);
+       Evas_Object *tabbar = NULL;
+       Elm_Object_Item *tool_it = NULL;
+       Elm_Object_Item *navi_it = NULL;
+       int r = 0;
        
-       layout = mgr_app_create_layout_file(ugd->navi_bar, EDC_FILE, EDC_GROUPS);
-       ret_if(NULL == layout);
+       mgrapp_set_view_type(VIEW_TYPE_APP_LIST);
 
-       _create_genlist_app_list(layout, ugd);
+       Evas_Object *nocontents = NULL;
+       nocontents = elm_layout_add(ugd->navi_bar);
+       ret_if(NULL == nocontents);
+       elm_layout_theme_set(nocontents, "layout", "nocontents", "full");
 
        /* back button */
        back_btn = elm_button_add(ugd->navi_bar);
@@ -1182,7 +1239,34 @@ void mgrapp_view_list_create(void *data)
        elm_object_style_set(back_btn, "naviframe/end_btn/default");
        evas_object_smart_callback_add(back_btn, "clicked", _app_list_back_cb, (void*)ugd);
 
-       elm_naviframe_item_push(ugd->navi_bar, MGRAPP_STR_MANAGE_APPLICATIONS, back_btn, NULL, layout, NULL);
+       _navi_it = navi_it = elm_naviframe_item_push(ugd->navi_bar, MGRAPP_STR_MANAGE_APPLICATIONS, back_btn, NULL, nocontents, "tabbar");
+
+#if 0
+       //r = pkgmgrinfo_appinfo_get_installed_list(_app_list_cb, NULL);
+       //if (PKGMGR_R_OK != r) {
+       //      MGR_APP_DEBUG_ERR("pkgmgrinfo_appinfo_get_installed_list failed. %d", r);
+       //}
+#endif
+       r = pkgmgr_pkginfo_get_list(_pkgmgr_iter_fn, data);
+       //r = pkgmgr_get_pkg_list(_pkgmgr_iter_fn, data); // deprecated api ??
+       if (PKGMGR_R_OK != r) {
+               MGR_APP_DEBUG_ERR("pkgmgr_get_pkg_list failed. %d", r);
+       }
+
+       /* sorting by pkg_label */
+       _installed_list = g_list_sort(_installed_list, _app_list_qsort_cb);
+
+       /* create toolbar */
+       tabbar = elm_toolbar_add(ugd->navi_bar);
+       ret_if(NULL == tabbar);
+       elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_object_style_set(tabbar, "tabbar");
+       elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+
+       _tabbar_item[LIST_SEG_TYPE_APPLICATION] = elm_toolbar_item_append(tabbar, NULL, MGRAPP_STR_APPLICATION, _create_genlist_app_cb, (void*)ugd);
+       _tabbar_item[LIST_SEG_TYPE_RUNNING] = elm_toolbar_item_append(tabbar, NULL, MGRAPP_STR_RUNNING, _create_genlist_running_cb, (void*)ugd);
+       _tabbar_item[LIST_SEG_TYPE_ALL] = elm_toolbar_item_append(tabbar, NULL, MGRAPP_STR_ALL, _create_genlist_all_cb, (void*)ugd);
+       elm_toolbar_item_selected_set(_tabbar_item[LIST_SEG_TYPE_APPLICATION], EINA_TRUE);
 
        mgr_app_doubletap_sensor_set_cb(_doubletap_sensor_cb, _genlist);
        mgr_app_doubletap_sensor_enable();