[Bug] Fix N_SE-11764 : get size of all music files from db using APIs of capi-content...
authorJing Yigang <yigang.jing@samsung.com>
Fri, 19 Oct 2012 01:16:27 +0000 (09:16 +0800)
committerJing Yigang <yigang.jing@samsung.com>
Fri, 19 Oct 2012 01:16:27 +0000 (09:16 +0800)
Change-Id: I15ae2c2472ee9d010de6d031a8f6b8742a0ef55c

packaging/org.tizen.setting.spec
setting-storage/CMakeLists.txt
setting-storage/include/setting-storage-main.h
setting-storage/include/setting-storage.h
setting-storage/src/setting-storage-main.c
setting-storage/src/setting-storage-miscellaneous-files.c
setting-storage/src/setting-storage.c

index 30f7393..dbcd483 100755 (executable)
@@ -53,6 +53,7 @@ BuildRequires:  pkgconfig(pango)
 BuildRequires:  pkgconfig(capi-system-runtime-info)
 BuildRequires:  pkgconfig(capi-media-player)
 BuildRequires:  pkgconfig(capi-media-sound-manager)
+BuildRequires:  pkgconfig(capi-content-media-content)
 BuildRequires:  pkgconfig(capi-system-device)
 BuildRequires:  pkgconfig(capi-appfw-application)
 BuildRequires:  pkgconfig(capi-appfw-app-manager)
@@ -61,6 +62,7 @@ BuildRequires:  pkgconfig(capi-system-haptic)
 BuildRequires:  pkgconfig(capi-system-info)
 BuildRequires:  pkgconfig(capi-system-system-settings)
 BuildRequires:  pkgconfig(capi-network-bluetooth)
+BuildRequires:  pkgconfig(pkgmgr)
 BuildRequires:  sysman-internal-devel
 BuildRequires:  cmake
 BuildRequires:  edje-tools
index 9806960..893afac 100755 (executable)
@@ -3,7 +3,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/${SETTING_COMMON}/include)
 
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs_storage REQUIRED ecore ecore-file evas elementary appcore-common appcore-efl ui-gadget-1 capi-appfw-application sysman fontconfig libxml-2.0)
+pkg_check_modules(pkgs_storage REQUIRED ecore ecore-file evas elementary appcore-common appcore-efl ui-gadget-1 capi-appfw-application sysman fontconfig 
+libxml-2.0 ail pkgmgr capi-content-media-content)
 
 FOREACH(flag ${pkgs_storage_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 18d385a..facd275 100755 (executable)
@@ -23,6 +23,9 @@
 
 #include <setting-storage.h>
 
-
+#define WRT_PREFIX                     "wgt"
+#define TPK_PREFIX                     "tpk"
+#define RPM_PREFIX                     "rpm"
+#define STR_INSTALLED_SIZE             "installed_size"
 
 #endif                         /* __SETTING_STORAGE_MAIN_H__ */
index b5b07a6..383451e 100755 (executable)
 #include <setting-common-draw-widget.h>
 #include <setting-common-view.h>
 
+#include <sys/statvfs.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <dirent.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <sysman.h>
+
 #define SETTING_STORAGE_PROGRESSBAR_TIMEOUT 10
 #define SETTING_STORAGE_POPUP_TIMER    2
 
@@ -99,6 +107,12 @@ struct _Node_Info {
        unsigned int size;
 };
 
+typedef struct _app_info_t {
+       char    *pkg_name;
+       char    *pkg_type;
+       int     total_size;
+} App_Info;
+
 typedef struct _SettingStorageUG SettingStorageUG;
 
 /**
@@ -162,11 +176,18 @@ struct _SettingStorageUG {
        Setting_GenGroupItem_Data *data_rdo;
        Setting_GenGroupItem_Data *data_dvb_h;
 
-       Setting_Done_List_Data *miscellaneous_list;  /* miscellaneous files list */
+       Setting_Done_List_Data miscellaneous_list;  /* miscellaneous files list */
+
+       Eina_List *apps_list;
+       Ecore_Timer *timer;
+       Evas_Object *pop_progress;
 };
 
 extern setting_view setting_view_storage_main;
 extern setting_view setting_view_storage_default_storage;
 extern setting_view setting_view_storage_miscellaneous_files;
 
+int setting_storage_file_list_get(char *path, Eina_List **dir_list, Eina_List **file_list);
+int setting_storage_list_len_get(const Eina_List *list);
+int setting_storage_file_stat_get(const char *filename, Node_Info **node);
 #endif                         /* __SETTING_STORAGE_H__ */
index c216fe8..5ea4394 100755 (executable)
  */
 #include <setting-storage-main.h>
 #include <Ecore_X.h>
-#include <sys/statvfs.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <sysman.h>
+#include <package-manager.h>
+#include <ail.h>
+#include <media_content.h>
 
 static int setting_storage_main_create(void *cb);
 static int setting_storage_main_destroy(void *cb);
@@ -228,89 +224,6 @@ static int __setting_storage_main_fs_stat(double *total, double *avail, const ch
        return SETTING_RETURN_SUCCESS;
 }
 
-static int __setting_storage_main_file_stat_get(const char *filename, Node_Info **node)
-{
-       setting_retvm_if(!filename || !node, SETTING_RETURN_FAIL, "NULL input parameters");
-       struct stat statbuf;
-       if (stat(filename, &statbuf) == -1) {
-               SETTING_TRACE_ERROR("failed to call stat");
-               return SETTING_RETURN_FAIL;
-       }
-
-       if (*node == NULL) {
-               SETTING_TRACE_ERROR("node is NULL");
-               return SETTING_RETURN_FAIL;
-       }
-
-       (*node)->size = statbuf.st_size;
-
-       return SETTING_RETURN_SUCCESS;
-}
-
-static int __setting_storage_main_file_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
-{
-       SETTING_TRACE_BEGIN;
-       setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
-
-       DIR *pDir = NULL;
-       struct dirent *ent = NULL;
-       char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
-
-       pDir = opendir(path);
-       setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
-
-       while ((ent = readdir(pDir)) != NULL) {
-               if (safeStrCmp(ent->d_name, ".") == 0 || safeStrCmp(ent->d_name, "..") == 0) {
-                       continue;
-               }
-               /*only deal with dirs and regular files*/
-               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
-                       continue;
-               }
-
-               Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
-
-               if (pNode == NULL) {
-                       continue;
-               }
-
-               memset(pNode, 0, sizeof(Node_Info));
-               /*get path*/
-               g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
-
-               /*get name*/
-               g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
-
-               /*get size*/
-               int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
-               if (copiednum < 0) {
-                       FREE(pNode);
-                       continue;
-               }
-               if (__setting_storage_main_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
-                       FREE(pNode);
-                       continue;
-               }
-
-               if (ent->d_type & DT_DIR) {
-                       *dir_list = eina_list_append(*dir_list, pNode);
-               } else {
-                       *file_list = eina_list_append(*file_list, pNode);
-               }
-       }
-       closedir(pDir);
-
-       return SETTING_RETURN_SUCCESS;
-}
-
-static int __setting_storage_main_list_len_get(const Eina_List *list)
-{
-       if (list == NULL)
-               return 0;
-
-       return eina_list_count(list);
-}
-
 static long __setting_storage_main_folder_size_get(char *path)
 {
        SETTING_TRACE_BEGIN;
@@ -322,12 +235,12 @@ static long __setting_storage_main_folder_size_get(char *path)
 
        if (ecore_file_is_dir(path)) {
                int ret = SETTING_RETURN_FAIL;
-               ret = __setting_storage_main_file_list_get(path, &dir_list, &file_list);
+               ret = setting_storage_file_list_get(path, &dir_list, &file_list);
 
                if (ret == SETTING_RETURN_SUCCESS) {
                        int i = 0;
-                       int dir_list_len =  __setting_storage_main_list_len_get(dir_list);
-                       int file_list_len = __setting_storage_main_list_len_get(file_list);
+                       int dir_list_len =  setting_storage_list_len_get(dir_list);
+                       int file_list_len = setting_storage_list_len_get(file_list);
                        SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
                        for (i = 0; i < file_list_len; i++) {
                                Node_Info *pNode = NULL;
@@ -407,6 +320,7 @@ static void __setting_storage_main_internal_storage_status_get(void *data)
        dAvail = 0.0;
        ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_MEDIA_PATH);
        setting_retm_if(ret == SETTING_RETURN_FAIL, "get media status failed");
+
        internal_status.dTotal += dTotal;
        internal_status.dAvail += dAvail;
 
@@ -458,23 +372,346 @@ static void __setting_storage_main_downloads_status_get(void *data)
        ad->downloads_status = downloads_status;
 }
 
+static bool __setting_storage_main_media_item_cb(media_info_h media, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(media == NULL, true, "media is NULL");
+       setting_retvm_if(data == NULL, true, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       media_content_type_e media_type = 0;
+       unsigned long long size = 0;
+
+       media_info_get_media_type(media, &media_type);
+       //SETTING_TRACE("media_type : [%d]", media_type);
+
+       if(media_type == MEDIA_CONTENT_TYPE_MUSIC) {
+               SETTING_TRACE("MEDIA_CONTENT_TYPE_MUSIC");
+
+               media_info_get_size(media, &size);
+               //SETTING_TRACE("size : [%lld]", size);
+               ad->audio_status.dTotal += size;
+       } else {
+               SETTING_TRACE("Other Content");
+       }
+
+       return true;
+}
+
 static void __setting_storage_main_audio_status_get(void *data)
 {
        SETTING_TRACE_BEGIN;
        setting_retm_if(data == NULL, "Data parameter is NULL");
        SettingStorageUG *ad = (SettingStorageUG *) data;
 
-       double dTotal = 0.0;
-       int ret = SETTING_RETURN_SUCCESS;
-       Setting_Storage_Status audio_status;
+       ad->audio_status.dTotal = 0;
 
-       dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_AUDIO_PATH);
-       setting_retm_if(ret == SETTING_RETURN_FAIL, "get audio status failed");
-       audio_status.dTotal = dTotal;
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       filter_h filter = NULL;
 
-       //SETTING_TRACE("audio_status = %f", dTotal);
+       /*Set Filter*/
+       char *condition = "MEDIA_TYPE=3";       /*0-image, 1-video, 2-sound, 3-music, 4-other*/
 
-       ad->audio_status = audio_status;
+       ret = media_filter_create(&filter);
+       if(ret != MEDIA_CONTENT_ERROR_NONE) {
+               SETTING_TRACE("Fail to create filter");
+               return;
+       }
+
+       ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
+       if(ret != MEDIA_CONTENT_ERROR_NONE) {
+               media_filter_destroy(filter);
+               SETTING_TRACE("Fail to set condition");
+               return;
+       }
+
+       ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_NOCASE);
+       if(ret != MEDIA_CONTENT_ERROR_NONE) {
+               media_filter_destroy(filter);
+               SETTING_TRACE("Fail to set order");
+               return;
+       }
+
+       ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, ad);
+       if(ret != MEDIA_CONTENT_ERROR_NONE) {
+               media_filter_destroy(filter);
+               SETTING_TRACE("Fail to get media");
+               return;
+       }
+}
+
+static int __setting_storage_main_miscellaneous_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+       DIR *pDir = NULL;
+       struct dirent *ent = NULL;
+       char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+
+       pDir = opendir(path);
+       setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
+
+       while ((ent = readdir(pDir)) != NULL) {
+               if (safeStrCmp(ent->d_name, ".") == 0
+                       || safeStrCmp(ent->d_name, "..") == 0
+                       || safeStrCmp(ent->d_name, ".tmp_download") == 0
+                       || safeStrCmp(ent->d_name, ".video-hub") == 0
+                       || safeStrCmp(ent->d_name, "Camera") == 0
+                       || safeStrCmp(ent->d_name, "Downloads") == 0
+                       || safeStrCmp(ent->d_name, "Images") == 0
+                       || safeStrCmp(ent->d_name, "Others") == 0
+                       || safeStrCmp(ent->d_name, "Sounds") == 0
+                       || safeStrCmp(ent->d_name, "Videos") == 0
+                       || safeStrCmp(ent->d_name, "lost+found") == 0) {
+                       continue;
+               }
+               /*only deal with dirs and regular files*/
+               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                       continue;
+               }
+
+               Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
+
+               if (pNode == NULL) {
+                       continue;
+               }
+
+               memset(pNode, 0, sizeof(Node_Info));
+               /*get path*/
+               g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
+
+               /*get name*/
+               g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
+
+               /*get size*/
+               int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
+               if (copiednum < 0) {
+                       FREE(pNode);
+                       continue;
+               }
+               if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
+                       FREE(pNode);
+                       continue;
+               }
+
+               if (ent->d_type & DT_DIR) {
+                       *dir_list = eina_list_append(*dir_list, pNode);
+               } else {
+                       *file_list = eina_list_append(*file_list, pNode);
+               }
+       }
+       closedir(pDir);
+
+       return SETTING_RETURN_SUCCESS;
+}
+
+/**
+  * Miscellaneous files is all directories files under /opt/media/ except below default directories:
+  * ++++++++++++++++++++++++++++++++++++++++++++++++
+  *  -sh-4.1# ls -all
+  *  total 56
+  *  drwxrwxrwx 11 app  app   4096 Jan  4 12:42 .
+  *  drwxr-xr-x 20 root root  4096 Jan  7 10:09 ..
+  *  drwxr-xr-x  2 root root  4096 Jan  4 08:46 .tmp_download
+  *  drwxr-xr-x  2 app  app   4096 Jan  4 08:47 .video-hub
+  *  drwxrwxrwx  2 app  app   4096 Oct  5      2012 Camera
+  *  drwxrwxrwx  3 app  app   4096 Jan  4 08:46 Downloads
+  *  drwxrwxrwx  2 app  app   4096 Oct  5      2012 Images
+  *  drwxrwxrwx  2 app  app   4096 Oct  5      2012 Others
+  *  drwxrwxrwx  3 app  app   4096 Oct  5      2012 Sounds
+  *  drwxrwxrwx  2 app  app   4096 Oct  5      2012 Videos
+  *  drwxrwxrwx  2 app  app  16384 Oct  5      2012 lost+found
+  * ++++++++++++++++++++++++++++++++++++++++++++++++
+  */
+static void __setting_storage_main_miscellaneous_size_get(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       unsigned long size = 0;
+       Eina_List *file_list = NULL;
+       Eina_List *dir_list = NULL;
+
+       char *path = SETTING_STORAGE_MEDIA_PATH;
+
+       if (ecore_file_is_dir(path)) {
+               int ret = SETTING_RETURN_FAIL;
+               ret = __setting_storage_main_miscellaneous_list_get(path, &dir_list, &file_list);
+
+               if (ret == SETTING_RETURN_SUCCESS) {
+                       int i = 0;
+                       int dir_list_len =  setting_storage_list_len_get(dir_list);
+                       int file_list_len = setting_storage_list_len_get(file_list);
+                       SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
+                       for (i = 0; i < file_list_len; i++) {
+                               Node_Info *pNode = NULL;
+                               pNode = (Node_Info *)eina_list_nth(file_list, i);
+                               if (pNode == NULL)
+                                       continue;
+                               size += pNode->size;
+                               SETTING_TRACE("path is [%s], name is [%s]", pNode->path, pNode->name);
+                       }
+                       for (i = 0; i < dir_list_len; i++) {
+                               Node_Info *pNode = NULL;
+                               char *full_path = NULL;
+                               pNode = (Node_Info *)eina_list_nth(dir_list, i);
+                               if (pNode == NULL)
+                                       continue;
+                               full_path =  g_strconcat(pNode->path, "/", pNode->name, NULL);
+                               SETTING_TRACE("full_path is [%s]", full_path);
+                               size += (__setting_storage_main_folder_size_get(full_path));
+                               FREE(full_path);
+                       }
+               }
+       }
+
+       if (file_list) {
+               eina_list_free(file_list);
+               file_list = NULL;
+       }
+
+       if (dir_list) {
+               eina_list_free(dir_list);
+               dir_list = NULL;
+       }
+
+       ad->others_status.dTotal = size;
+}
+
+static void __setting_storage_main_apps_list_free(void *data)
+{
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       Eina_List *l = NULL;
+       App_Info *app_info;
+       EINA_LIST_FOREACH (ad->apps_list, l, app_info)
+       {
+               G_FREE(app_info->pkg_name);
+               G_FREE(app_info->pkg_type);
+               FREE(app_info);
+       }
+       eina_list_free(ad->apps_list);
+       ad->apps_list = NULL;
+}
+
+static ail_cb_ret_e __setting_storage_main_appinfo_func_cb(const ail_appinfo_h ail_info, void *data)
+{
+       setting_retvm_if(data == NULL, AIL_CB_RET_CONTINUE, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       char *pkg_name = NULL;
+       char *pkg_type = NULL;
+
+       ail_appinfo_get_str(ail_info, AIL_PROP_PACKAGE_STR, &pkg_name);
+       setting_retvm_if(pkg_name == NULL, AIL_CB_RET_CONTINUE, "get pkg_name failed");
+
+       ail_appinfo_get_str(ail_info, AIL_PROP_X_SLP_PACKAGETYPE_STR, &pkg_type);
+       setting_retvm_if(pkg_type == NULL, AIL_CB_RET_CONTINUE, "get pkg_type failed");
+
+       App_Info *app_info = (App_Info*)calloc(1, sizeof(App_Info));
+       setting_retvm_if(app_info == NULL, AIL_CB_RET_CONTINUE, "failed to calloc");
+
+       app_info->pkg_name = (char *)g_strdup(pkg_name);
+       app_info->pkg_type = (char *)g_strdup(pkg_type);
+       ad->apps_list = eina_list_append(ad->apps_list, app_info);
+       return AIL_CB_RET_CONTINUE;
+}
+
+static void __setting_storage_main_applications_list_get(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       __setting_storage_main_apps_list_free(ad);
+
+       /* get app_info from AIL */
+       ail_filter_h filter_rpm = NULL;
+       ail_filter_h filter_wrt = NULL;
+       ail_filter_h filter_tpk = NULL;
+
+       ail_filter_new(&filter_rpm);
+       ail_filter_new(&filter_wrt);
+       ail_filter_new(&filter_tpk);
+
+       ail_filter_add_str(filter_rpm, AIL_PROP_X_SLP_PACKAGETYPE_STR, RPM_PREFIX);
+       ail_filter_add_str(filter_wrt, AIL_PROP_X_SLP_PACKAGETYPE_STR, WRT_PREFIX);
+       ail_filter_add_str(filter_tpk, AIL_PROP_X_SLP_PACKAGETYPE_STR, TPK_PREFIX);
+
+       ail_filter_list_appinfo_foreach(filter_rpm, __setting_storage_main_appinfo_func_cb, (void*)ad);
+       ail_filter_list_appinfo_foreach(filter_wrt, __setting_storage_main_appinfo_func_cb, (void*)ad);
+       ail_filter_list_appinfo_foreach(filter_tpk, __setting_storage_main_appinfo_func_cb, (void*)ad);
+
+       ail_filter_destroy(filter_rpm);
+       ail_filter_destroy(filter_wrt);
+       ail_filter_destroy(filter_tpk);
+}
+
+static void __setting_storage_main_applications_status_get(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       __setting_storage_main_applications_list_get(ad);
+
+       ad->apps_status.dTotal = 0;
+
+       Eina_List *l = NULL;
+       App_Info *app_info;
+       EINA_LIST_FOREACH (ad->apps_list, l, app_info)
+       {
+               //SETTING_TRACE("pkg_name: %s ", app_info->pkg_name);
+               //SETTING_TRACE("pkg_type: %s", app_info->pkg_type);
+               pkgmgr_info *pkg_info = pkgmgr_info_new(app_info->pkg_type, app_info->pkg_name);
+               if (!pkg_info) {
+                       SETTING_TRACE("pkg_info is null, couldn't get the sizes");
+                       app_info->total_size = 0;
+               } else {
+                       char *buf = NULL;
+                       buf = pkgmgr_info_get_string(pkg_info, STR_INSTALLED_SIZE);
+                       if (buf) {
+                               //SETTING_TRACE("size : %s", buf);
+                               app_info->total_size = atoi(buf);
+                               G_FREE(buf);
+                       } else {
+                               app_info->total_size = 0;
+                       }
+                       pkgmgr_info_free(pkg_info);
+               }
+
+               ad->apps_status.dTotal += app_info->total_size;
+       }
+
+       char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
+       int ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
+       setting_retm_if(ret == SETTING_RETURN_FAIL, "failed to transform");
+
+       G_FREE(ad->apps->sub_desc);
+       ad->apps->sub_desc = (char *)g_strdup(apps_desc);
+       elm_object_item_data_set(ad->apps->item, ad->apps);
+       elm_genlist_item_update(ad->apps->item);
+
+       elm_object_item_data_set(ad->internal->item, ad->internal);
+       elm_genlist_item_update(ad->internal->item);
+
+       if (ad->pop_progress) {
+               evas_object_del(ad->pop_progress);
+               ad->pop_progress = NULL;
+       }
+}
+
+static Eina_Bool __setting_storage_main_timer_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "data is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *)data;
+
+       __setting_storage_main_applications_status_get(ad);
+       return ECORE_CALLBACK_CANCEL;
 }
 
 static void __setting_storage_main_launch_ug_destroy_cb(ui_gadget_h ug, void *priv)
@@ -493,6 +730,20 @@ static void __setting_storage_main_launch_ug_destroy_cb(ui_gadget_h ug, void *pr
        if (back_btn != NULL) {
                elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
        }
+
+       if (ad->pop_progress) {
+               evas_object_del(ad->pop_progress);
+               ad->pop_progress = NULL;
+       }
+       ad->pop_progress = setting_create_popup_with_progressbar(ad, ad->win_get,
+                                "pending_list",
+                                NULL, NULL, NULL, 0, TRUE, TRUE);
+
+       if(ad->timer) {
+               ecore_timer_del(ad->timer);
+               ad->timer = NULL;
+       }
+       ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
 }
 
 static void __setting_storage_main_launch_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
@@ -557,17 +808,7 @@ static void __setting_storage_main_app_launch(char *app_name)
        SETTING_TRACE_BEGIN;
        setting_retm_if(app_name == NULL, "app_name is NULL");
 
-       #if 0
-       if(aul_app_is_running((const char *)app_name)) {
-               SETTING_TRACE_DEBUG("%s is already launched.", app_name);
-               aul_open_app((const char *)app_name);
-       } else {
-               SETTING_TRACE_DEBUG("%s will be launched. ", app_name);
-               aul_launch_app((const char *)app_name, NULL);
-       }
-       #else
-               app_launcher(app_name);
-       #endif
+       app_launcher(app_name);
 }
 
 static void __setting_storage_main_Gendial_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
@@ -1119,11 +1360,19 @@ static int setting_storage_main_create(void *cb)
 
        SettingStorageUG *ad = (SettingStorageUG *) cb;
 
+       int ret = SETTING_RETURN_SUCCESS;
+
+       ret = media_content_connect();
+       if(ret == MEDIA_CONTENT_ERROR_NONE) {
+               SETTING_TRACE("media_content_connect is success");
+       } else {
+               SETTING_TRACE_ERROR("media_content_connect is failed");
+               return SETTING_RETURN_FAIL;
+       }
+
        retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
                 "win_main_layout is NULL");
 
-       int ret = SETTING_RETURN_SUCCESS;
-
        ad->ly_main =
            setting_create_layout_navi_bar_genlist(ad->win_main_layout,
                                                   ad->win_get,
@@ -1148,6 +1397,8 @@ static int setting_storage_main_create(void *cb)
 
        __setting_storage_main_audio_status_get(ad);
 
+       __setting_storage_main_miscellaneous_size_get(ad);
+
        Elm_Object_Item *item = NULL;
 
        bool is_emulator = isEmulBin();
@@ -1190,7 +1441,7 @@ static int setting_storage_main_create(void *cb)
        }
 
        /* Applications */
-       ad->apps_status.dTotal = 230.45 * 1024 * 1024; /* for test*/
+       ad->apps_status.dTotal = 0; /* initial value */
        char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
        ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
        setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
@@ -1271,15 +1522,11 @@ static int setting_storage_main_create(void *cb)
        }
 
        /* Miscellaneous files */
-       ad->others_status.dTotal = ad->internal_status.dTotal - ad->internal_status.dAvail
-                                - ad->apps_status.dTotal - ad->pics_videos_status.dTotal
-                                - ad->downloads_status.dTotal - ad->audio_status.dTotal;
-       ad->others_status.dAvail = 0.0;
        char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
        ret = __setting_storage_status_size_transition(ad->others_status.dTotal, others_desc);
        setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
 
-       ad->others = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3), 
+       ad->others = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
                                             __setting_storage_main_Gendial_mouse_up_cb,
                                             ad, SWALLOW_Type_INVALID, SETTING_STORAGE_MISCES_ICON_PATH,
                                             NULL, 0, SETTING_STORAGE_MISCES_STR,
@@ -1309,6 +1556,7 @@ static int setting_storage_main_create(void *cb)
        }
 
        if (!is_emulator) {
+#if DISABLED_CODE
                /* Format USB storage */
                setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text), NULL,
                                                     ad, SWALLOW_Type_INVALID, NULL,
@@ -1320,6 +1568,7 @@ static int setting_storage_main_create(void *cb)
                                                 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
                                                 NULL, NULL, 0, SETTING_STORAGE_FORMAT_DESC_STR, NULL,
                                                 NULL);
+#endif
 
                /* SD card info */
                setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
@@ -1337,6 +1586,12 @@ static int setting_storage_main_create(void *cb)
                elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        }
 
+       if(ad->timer) {
+               ecore_timer_del(ad->timer);
+               ad->timer = NULL;
+       }
+       ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
+
        setting_view_storage_main.is_create = 1;
        return SETTING_RETURN_SUCCESS;
 }
@@ -1348,8 +1603,27 @@ static int setting_storage_main_destroy(void *cb)
 
        SettingStorageUG *ad = (SettingStorageUG *) cb;
 
+       int ret = media_content_disconnect();
+       if (ret == MEDIA_CONTENT_ERROR_NONE) {
+               SETTING_TRACE("media_content_disconnect is success");
+       } else {
+               SETTING_TRACE_ERROR("media_content_disconnect is failed");
+       }
+
+       if (ad->pop_progress) {
+               evas_object_del(ad->pop_progress);
+               ad->pop_progress = NULL;
+       }
+
+       if(ad->timer) {
+               ecore_timer_del(ad->timer);
+               ad->timer = NULL;
+       }
+
+       __setting_storage_main_apps_list_free(ad);
+
        if (!isEmulBin()) {
-               int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
+               ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
                                __setting_storage_vconf_change_cb);
                if (ret != 0) {
                        SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
@@ -1377,6 +1651,17 @@ static int setting_storage_main_update(void *cb)
 
        SettingStorageUG *ad = (SettingStorageUG *) cb;
 
+       __setting_storage_main_miscellaneous_size_get(ad);
+
+       char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
+       int ret = __setting_storage_status_size_transition(ad->others_status.dTotal, others_desc);
+       setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
+
+       G_FREE(ad->others->sub_desc);
+       ad->others->sub_desc = (char *)g_strdup(others_desc);
+       elm_object_item_data_set(ad->others->item, ad->others);
+       elm_genlist_item_update(ad->others->item);
+
        if (ad->ly_main != NULL) {
                evas_object_show(ad->ly_main);
        }
index c818c38..e776d3c 100755 (executable)
@@ -32,6 +32,69 @@ setting_view setting_view_storage_miscellaneous_files = {
        .cleanup = setting_storage_miscellaneous_files_cleanup,
 };
 
+static int __setting_storage_miscellaneous_files_list_get(char *path, Eina_List **list)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+       DIR *pDir = NULL;
+       struct dirent *ent = NULL;
+       char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+
+       pDir = opendir(path);
+       setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
+
+       while ((ent = readdir(pDir)) != NULL) {
+               if (safeStrCmp(ent->d_name, ".") == 0
+                       || safeStrCmp(ent->d_name, "..") == 0
+                       || safeStrCmp(ent->d_name, ".tmp_download") == 0
+                       || safeStrCmp(ent->d_name, ".video-hub") == 0
+                       || safeStrCmp(ent->d_name, "Camera") == 0
+                       || safeStrCmp(ent->d_name, "Downloads") == 0
+                       || safeStrCmp(ent->d_name, "Images") == 0
+                       || safeStrCmp(ent->d_name, "Others") == 0
+                       || safeStrCmp(ent->d_name, "Sounds") == 0
+                       || safeStrCmp(ent->d_name, "Videos") == 0
+                       || safeStrCmp(ent->d_name, "lost+found") == 0) {
+                       continue;
+               }
+               /*only deal with dirs and regular files*/
+               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                       continue;
+               }
+
+               Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
+
+               if (pNode == NULL) {
+                       continue;
+               }
+
+               memset(pNode, 0, sizeof(Node_Info));
+               /*get path*/
+               g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
+
+               /*get name*/
+               g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
+
+               /*get size*/
+               int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
+               if (copiednum < 0) {
+                       FREE(pNode);
+                       continue;
+               }
+               if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
+                       FREE(pNode);
+                       continue;
+               }
+
+               *list = eina_list_append(*list, pNode);
+       }
+       closedir(pDir);
+
+       return SETTING_RETURN_SUCCESS;
+}
+
+
 static int setting_storage_miscellaneous_files_create(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -55,19 +118,25 @@ static int setting_storage_miscellaneous_files_create(void *cb)
                                   NULL, ad, view_layout, ad->navibar,
                                   &controllbar);
 
-       Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)calloc(1, sizeof(Setting_Done_List_Data));
-       setting_retvm_if(list_data == NULL, SETTING_RETURN_FAIL, "failed to calloc");
+       Setting_Done_List_Data *list_data = &(ad->miscellaneous_list);
 
-       ad->miscellaneous_list = list_data;
        list_data->win_main = ad->win_main_layout;
        list_data->UG_data = ad;
        list_data->ly_parent = view_layout;
        list_data->controllbar = controllbar;
        list_data->select_all_checked = EINA_FALSE;
 
+       Eina_List *list = NULL;
+       __setting_storage_miscellaneous_files_list_get(SETTING_STORAGE_MEDIA_PATH, &list);
+
+       int count = eina_list_count(list);
        int i = 0;
-       for (; i < 2; i++) {
-               list_data->chk_items[i].item_name = "file";
+       for (; i < count; i++) {
+               Node_Info *pNode = NULL;
+               pNode = (Node_Info *)eina_list_nth(list, i);
+               if (pNode == NULL)
+                       continue;
+               list_data->chk_items[i].item_name = pNode->name;
        }
 
        list_data->cur_item_num = i;
@@ -75,6 +144,17 @@ static int setting_storage_miscellaneous_files_create(void *cb)
        scroller = setting_create_done_list(list_data);
        elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
 
+       if (list) {
+               eina_list_free(list);
+               list = NULL;
+       }
+
+       if(i == 0) {
+               /* disable "Delete" button */
+               Elm_Object_Item *delete_button = elm_toolbar_first_item_get(controllbar);
+               elm_object_item_disabled_set(delete_button, EINA_TRUE);
+       }
+
        setting_view_storage_miscellaneous_files.is_create = 1;
        return SETTING_RETURN_SUCCESS;
 }
@@ -85,9 +165,14 @@ static int setting_storage_miscellaneous_files_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
        SettingStorageUG *ad = (SettingStorageUG *)cb;
 
-       if (ad->miscellaneous_list->selInfoPop) {
-               evas_object_del(ad->miscellaneous_list->selInfoPop);
-               ad->miscellaneous_list->selInfoPop = NULL;
+       if (ad->miscellaneous_list.selInfoPop) {
+               evas_object_del(ad->miscellaneous_list.selInfoPop);
+               ad->miscellaneous_list.selInfoPop = NULL;
+       }
+
+       if (ad->popup) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
        }
 
        elm_naviframe_item_pop(ad->navibar);
@@ -120,10 +205,163 @@ static void __setting_storage_miscellaneous_files_cancel_cb(void *data,
        setting_view_change(&setting_view_storage_miscellaneous_files, &setting_view_storage_main, ad);
 }
 
+static int __setting_storage_file_remove(char *path)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+       int ret = SETTING_RETURN_FAIL;
+
+       Eina_List *file_list = NULL;
+       Eina_List *dir_list = NULL;
+
+       if (ecore_file_is_dir(path)) {
+               ret = setting_storage_file_list_get(path, &dir_list, &file_list);
+
+               if (ret == SETTING_RETURN_SUCCESS) {
+                       int i = 0;
+                       int dir_list_len =  setting_storage_list_len_get(dir_list);
+                       int file_list_len = setting_storage_list_len_get(file_list);
+                       SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
+                       for (i = 0; i < file_list_len; i++) {
+                               Node_Info *pNode = NULL;
+                               char *full_path = NULL;
+                               pNode = (Node_Info *)eina_list_nth(file_list, i);
+                               if (pNode == NULL)
+                                       continue;
+                               full_path =  g_strconcat(pNode->path, "/", pNode->name, NULL);
+                               SETTING_TRACE("full_path is [%s]", full_path);
+                               ret = ecore_file_remove(full_path);
+                       }
+                       for (i = 0; i < dir_list_len; i++) {
+                               Node_Info *pNode = NULL;
+                               char *full_path = NULL;
+                               pNode = (Node_Info *)eina_list_nth(dir_list, i);
+                               if (pNode == NULL)
+                                       continue;
+                               full_path =  g_strconcat(pNode->path, "/", pNode->name, NULL);
+                               SETTING_TRACE("full_path is [%s]", full_path);
+                               ret = (__setting_storage_file_remove(full_path));
+                               ret = ecore_file_remove(full_path);
+                               FREE(full_path);
+                       }
+                       SETTING_TRACE("full_path is [%s]", path);
+                       ret = ecore_file_remove(path);
+               }
+       } else {
+               SETTING_TRACE("path is [%s]", path);
+               ret = ecore_file_remove(path);
+       }
+
+       if (file_list) {
+               eina_list_free(file_list);
+               file_list = NULL;
+       }
+
+       if (dir_list) {
+               eina_list_free(dir_list);
+               dir_list = NULL;
+       }
+
+       return ret;
+}
+
+static void __setting_storage_miscellaneous_files_genlist_update(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       Evas_Object *view_layout = ad->miscellaneous_list.ly_parent;
+
+       Evas_Object *scroller = NULL;
+       scroller = elm_object_part_content_get(view_layout, "elm.swallow.contents");
+       setting_retm_if(NULL == scroller, "scroller is NULL");
+       elm_genlist_clear(scroller);
+
+       elm_object_part_content_unset(view_layout, "elm.swallow.contents");
+       evas_object_del(scroller);
+       scroller = NULL;
+
+       Eina_List *list = NULL;
+       __setting_storage_miscellaneous_files_list_get(SETTING_STORAGE_MEDIA_PATH, &list);
+
+       int count = eina_list_count(list);
+       int i = 0;
+       for (; i < count; i++) {
+               Node_Info *pNode = NULL;
+               pNode = (Node_Info *)eina_list_nth(list, i);
+               if (pNode == NULL)
+                       continue;
+               ad->miscellaneous_list.chk_items[i].item_name = pNode->name;
+       }
+
+       ad->miscellaneous_list.cur_item_num = i;
+       SETTING_TRACE("list_data->cur_item_num:%d", ad->miscellaneous_list.cur_item_num);
+       scroller = setting_create_done_list(&ad->miscellaneous_list);
+       elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
+
+       if (list) {
+               eina_list_free(list);
+               list = NULL;
+       }
+
+       if(i == 0) {
+               /* disable "Delete" button */
+               Elm_Object_Item *delete_button = elm_toolbar_first_item_get(ad->miscellaneous_list.controllbar);
+               elm_object_item_disabled_set(delete_button, EINA_TRUE);
+       }
+}
+
 static void __setting_storage_miscellaneous_files_delete_cb(void *data,
                                        Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data parameter is NULL");
-       //SettingStorageUG *ad = (SettingStorageUG *) data;
+       SettingStorageUG *ad = (SettingStorageUG *) data;
+
+       if (ad->miscellaneous_list.selInfoPop) {
+               evas_object_del(ad->miscellaneous_list.selInfoPop);
+               ad->miscellaneous_list.selInfoPop = NULL;
+       }
+
+       if (!setting_done_list_is_some_item_selected(&ad->miscellaneous_list)) {
+               setting_create_simple_popup(NULL, ad->win_get, NULL, "No item selected");
+       } else {
+               int i = 0;
+               for (; i < ad->miscellaneous_list.cur_item_num; i++) {
+                       if (!ad->miscellaneous_list.chk_items[i].data_GenItem->chk_status) {
+                               continue;
+                       }
+
+                       char path[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+                       snprintf(path, SETTING_STORAGE_CHILDPATH_LEN, "%s/%s", SETTING_STORAGE_MEDIA_PATH,
+                                       ad->miscellaneous_list.chk_items[i].item_name);
+                       SETTING_TRACE("path = %s", path);
+                       /*unselect item*/
+                       elm_check_state_set(ad->miscellaneous_list.chk_items[i].data_GenItem->eo_check, 0);
+                       ad->miscellaneous_list.chk_items[i].data_GenItem->chk_status = 0;
+
+                       int ret = __setting_storage_file_remove(path);
+                       if (!ret) {
+                               SETTING_TRACE_ERROR("failed to __setting_storage_file_remove");
+                               if (ad->popup) {
+                                       evas_object_del(ad->popup);
+                                       ad->popup = NULL;
+                               }
+                               ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
+                                                       _("IDS_COM_POP_FAILED"),
+                                                       NULL, NULL, POPUP_INTERVAL, FALSE, FALSE);
+                               return;
+                       }
+
+               }
+
+               /* update genlist */
+               __setting_storage_miscellaneous_files_genlist_update(ad);
+
+               /* reset sel_all item */
+               elm_check_state_set(ad->miscellaneous_list.select_all_checkbox, 0);
+               ad->miscellaneous_list.select_all_checked = EINA_FALSE;
+       }
 }
index 045dd0f..bf963f2 100755 (executable)
 #define UG_MODULE_API __attribute__ ((visibility("default")))
 #endif
 
+int setting_storage_file_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+       DIR *pDir = NULL;
+       struct dirent *ent = NULL;
+       char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+
+       pDir = opendir(path);
+       setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
+
+       while ((ent = readdir(pDir)) != NULL) {
+               if (safeStrCmp(ent->d_name, ".") == 0 || safeStrCmp(ent->d_name, "..") == 0) {
+                       continue;
+               }
+               /*only deal with dirs and regular files*/
+               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                       continue;
+               }
+
+               Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
+
+               if (pNode == NULL) {
+                       continue;
+               }
+
+               memset(pNode, 0, sizeof(Node_Info));
+               /*get path*/
+               g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
+
+               /*get name*/
+               g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
+
+               /*get size*/
+               int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
+               if (copiednum < 0) {
+                       FREE(pNode);
+                       continue;
+               }
+               if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
+                       FREE(pNode);
+                       continue;
+               }
+
+               if (ent->d_type & DT_DIR) {
+                       *dir_list = eina_list_append(*dir_list, pNode);
+               } else {
+                       *file_list = eina_list_append(*file_list, pNode);
+               }
+       }
+       closedir(pDir);
+
+       return SETTING_RETURN_SUCCESS;
+}
+
+int setting_storage_list_len_get(const Eina_List *list)
+{
+       if (list == NULL)
+               return 0;
+
+       return eina_list_count(list);
+}
+
+int setting_storage_file_stat_get(const char *filename, Node_Info **node)
+{
+       setting_retvm_if(!filename || !node, SETTING_RETURN_FAIL, "NULL input parameters");
+       struct stat statbuf;
+       if (stat(filename, &statbuf) == -1) {
+               SETTING_TRACE_ERROR("failed to call stat");
+               return SETTING_RETURN_FAIL;
+       }
+
+       if (*node == NULL) {
+               SETTING_TRACE_ERROR("node is NULL");
+               return SETTING_RETURN_FAIL;
+       }
+
+       (*node)->size = statbuf.st_size;
+
+       return SETTING_RETURN_SUCCESS;
+}
+
 static void setting_storage_ug_cb_resize(void *data, Evas *e, Evas_Object *obj,
                                      void *event_info)
 {
@@ -44,6 +127,8 @@ static void *setting_storage_ug_on_create(ui_gadget_h ug, enum ug_mode mode,
 
        setting_retvm_if(storageUG->win_main_layout == NULL, NULL, "cannot get main window ");
 
+       setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
+
        /* register view node table */
        setting_view_node_table_intialize();
        setting_view_node_table_register(&setting_view_storage_main, NULL);