4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-storage-main.h>
23 #include <package-manager.h>
25 #include <media_content.h>
27 static int setting_storage_main_create(void *cb);
28 static int setting_storage_main_destroy(void *cb);
29 static int setting_storage_main_update(void *cb);
30 static int setting_storage_main_cleanup(void *cb);
32 static void __setting_storage_main_click_softkey_back_cb(void *data, Evas_Object *obj,
35 setting_view setting_view_storage_main = {
36 .create = setting_storage_main_create,
37 .destroy = setting_storage_main_destroy,
38 .update = setting_storage_main_update,
39 .cleanup = setting_storage_main_cleanup,
42 static char *__gl_text_get(void *data, Evas_Object *obj, const char *part)
45 Setting_GenGroupItem_Data *item_data = data;
47 if (!safeStrCmp(part, "elm.text.1")) {
48 return (char *)g_strdup(item_data->keyStr);
53 static Evas_Object *__gl_content_get(void *data, Evas_Object *obj, const char *part)
56 Setting_GenGroupItem_Data *item_data = data;
57 SettingStorageUG *ad = (SettingStorageUG *) item_data->userdata;
59 int width = SETTING_STORAGE_ICON_WIDTH;
60 int height = SETTING_STORAGE_ICON_HEIGHT;
61 float temp_size = 0.0;
63 if (!safeStrCmp(part, "elm.icon")){
64 Evas_Object *status_box = NULL;
65 status_box = elm_box_add(obj);
66 retvm_if(status_box == NULL, NULL, "Cannot get box");
67 elm_box_horizontal_set(status_box, 1);
68 evas_object_size_hint_align_set(status_box, 0.0, EVAS_HINT_FILL);
69 evas_object_show(status_box);
71 Evas *evas = evas_object_evas_get(obj);
74 unsigned int apps_size = 0;
75 temp_size = ((float)ad->apps_status.dTotal / ad->internal_status.dTotal) * width;
76 if (temp_size < 1 && temp_size > 0) {
79 apps_size = (unsigned int)temp_size;
82 Evas_Object *apps = NULL;
83 apps = evas_object_image_add(evas);
84 evas_object_size_hint_weight_set(apps, 0.0, EVAS_HINT_EXPAND);
85 evas_object_image_load_size_set(apps, apps_size, height);
86 evas_object_image_file_set(apps, SETTING_STORAGE_APPS_ICON_PATH, NULL);
87 evas_object_image_fill_set(apps, 0, 0, apps_size, height);
88 evas_object_size_hint_min_set(apps, apps_size, height);
89 evas_object_show(apps);
90 elm_box_pack_end(status_box, apps);
93 /* pictures, videos */
94 unsigned int pics_videos_size = 0;
95 temp_size = ((float)ad->pics_videos_status.dTotal / ad->internal_status.dTotal) * width;
96 if (temp_size < 1 && temp_size > 0) {
99 pics_videos_size = (unsigned int)temp_size;
101 if (pics_videos_size > 0) {
102 Evas_Object *pics = NULL;
103 pics = evas_object_image_add(evas);
104 evas_object_size_hint_weight_set(pics, 0.0, EVAS_HINT_EXPAND);
105 evas_object_image_load_size_set(pics, pics_videos_size, height);
106 evas_object_image_file_set(pics, SETTING_STORAGE_PICS_ICON_PATH, NULL);
107 evas_object_image_fill_set(pics, 0, 0, pics_videos_size, height);
108 evas_object_size_hint_min_set(pics, pics_videos_size, height);
109 evas_object_show(pics);
110 elm_box_pack_end(status_box, pics);
114 unsigned int downloads_size = 0;
115 temp_size = ((float)ad->downloads_status.dTotal / ad->internal_status.dTotal) * width;
116 if (temp_size < 1 && temp_size > 0) {
119 downloads_size = (unsigned int)temp_size;
121 if (downloads_size > 0) {
122 Evas_Object *downs = NULL;
123 downs = evas_object_image_add(evas);
124 evas_object_size_hint_weight_set(downs, 0.0, EVAS_HINT_EXPAND);
125 evas_object_image_load_size_set(downs, downloads_size, height);
126 evas_object_image_file_set(downs, SETTING_STORAGE_DOWNS_ICON_PATH, NULL);
127 evas_object_image_fill_set(downs, 0, 0, downloads_size, height);
128 evas_object_size_hint_min_set(downs, downloads_size, height);
129 evas_object_show(downs);
130 elm_box_pack_end(status_box, downs);
134 unsigned int audio_size = 0;
135 temp_size = ((float)ad->audio_status.dTotal / ad->internal_status.dTotal) * width;
136 if (temp_size < 1 && temp_size > 0) {
139 audio_size = (unsigned int)temp_size;
141 if (audio_size > 0) {
142 Evas_Object *audio = NULL;
143 audio = evas_object_image_add(evas);
144 evas_object_size_hint_weight_set(audio, 0.0, EVAS_HINT_EXPAND);
145 evas_object_image_load_size_set(audio, audio_size, height);
146 evas_object_image_file_set(audio, SETTING_STORAGE_AUDIO_ICON_PATH, NULL);
147 evas_object_image_fill_set(audio, 0, 0, audio_size, height);
148 evas_object_size_hint_min_set(audio, audio_size, height);
149 evas_object_show(audio);
150 elm_box_pack_end(status_box, audio);
153 /* Miscellaneous files */
154 unsigned int others_size = 0;
155 temp_size = ((float)ad->others_status.dTotal / ad->internal_status.dTotal) * width;
156 if (temp_size < 1 && temp_size > 0) {
159 others_size = (unsigned int)temp_size;
161 if (others_size > 0) {
162 Evas_Object *misc = NULL;
163 misc = evas_object_image_add(evas);
164 evas_object_size_hint_weight_set(misc, 0.0, EVAS_HINT_EXPAND);
165 evas_object_image_load_size_set(misc, others_size, height);
166 evas_object_image_file_set(misc, SETTING_STORAGE_MISCES_ICON_PATH, NULL);
167 evas_object_image_fill_set(misc, 0, 0, others_size, height);
168 evas_object_size_hint_min_set(misc, others_size, height);
169 evas_object_show(misc);
170 elm_box_pack_end(status_box, misc);
174 unsigned int avail_size = 0;
175 temp_size = ((float)ad->internal_status.dAvail / ad->internal_status.dTotal) * width;
176 if (temp_size < 1 && temp_size > 0) {
179 avail_size = (unsigned int)temp_size;
181 if (avail_size > 0) {
182 Evas_Object *avail = NULL;
183 avail = evas_object_image_add(evas);
184 evas_object_size_hint_weight_set(avail, 0.0, EVAS_HINT_EXPAND);
185 evas_object_image_load_size_set(avail, avail_size, height);
186 evas_object_image_file_set(avail, SETTING_STORAGE_AVAIL_ICON_PATH, NULL);
187 evas_object_image_fill_set(avail, 0, 0, avail_size, height);
188 evas_object_size_hint_min_set(avail, avail_size, height);
189 evas_object_show(avail);
190 elm_box_pack_end(status_box, avail);
198 static void __gl_del(void *data, Evas_Object *obj)
200 /* SETTING_TRACE_BEGIN; */
201 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
203 G_FREE(item_data->keyStr);
208 static int __setting_storage_main_fs_stat(double *total, double *avail, const char *path)
211 setting_retvm_if(NULL == total || NULL == avail, SETTING_RETURN_FAIL, "Null output parameters");
215 if (!statvfs(path, &s)) {
216 SETTING_TRACE("f_bsize = %ld f_blocks = %ld f_bavail = %ld f_frsize = %ld",
217 s.f_bsize, s.f_blocks, s.f_bavail, s.f_frsize);
218 *total = (double)s.f_frsize * s.f_blocks;
219 *avail = (double)s.f_bsize * s.f_bavail;
221 return SETTING_RETURN_FAIL;
224 return SETTING_RETURN_SUCCESS;
227 static long __setting_storage_main_folder_size_get(char *path)
230 setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
232 unsigned long size = 0;
233 Eina_List *file_list = NULL;
234 Eina_List *dir_list = NULL;
236 if (ecore_file_is_dir(path)) {
237 int ret = SETTING_RETURN_FAIL;
238 ret = setting_storage_file_list_get(path, &dir_list, &file_list);
240 if (ret == SETTING_RETURN_SUCCESS) {
242 int dir_list_len = setting_storage_list_len_get(dir_list);
243 int file_list_len = setting_storage_list_len_get(file_list);
244 SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
245 for (i = 0; i < file_list_len; i++) {
246 Node_Info *pNode = NULL;
247 pNode = (Node_Info *)eina_list_nth(file_list, i);
252 for (i = 0; i < dir_list_len; i++) {
253 Node_Info *pNode = NULL;
254 char *full_path = NULL;
255 pNode = (Node_Info *)eina_list_nth(dir_list, i);
258 full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
259 SETTING_TRACE("full_path is [%s]", full_path);
260 size += (__setting_storage_main_folder_size_get(full_path));
267 eina_list_free(file_list);
272 eina_list_free(dir_list);
279 static int __setting_storage_status_size_transition(double size, char *size_desc)
282 SETTING_TRACE("size = %f", size);
283 double tmp_size = 0.0;
285 if (size < SETTING_STORAGE_MEGABYTE_VALUE) { // size < 1MB: show x.xKB
286 tmp_size = size / SETTING_STORAGE_KILOBYTE_VALUE;
287 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "KB");
288 retv_if(ret < 0, SETTING_RETURN_FAIL);
289 } else if (size < SETTING_STORAGE_GIGABYTE_VALUE) { // size < 1GB: show x.xMB
290 tmp_size = size / SETTING_STORAGE_MEGABYTE_VALUE;
291 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "MB");
292 retv_if(ret < 0, SETTING_RETURN_FAIL);
293 } else { // 1G <= size: show x.xGB
294 tmp_size = size / SETTING_STORAGE_GIGABYTE_VALUE;
295 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "GB");
296 retv_if(ret < 0, SETTING_RETURN_FAIL);
299 return SETTING_RETURN_SUCCESS;
303 static void __setting_storage_main_internal_storage_status_get(void *data)
306 setting_retm_if(data == NULL, "Data parameter is NULL");
307 SettingStorageUG *ad = (SettingStorageUG *) data;
311 int ret = SETTING_RETURN_SUCCESS;
312 Setting_Storage_Status internal_status;
314 ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_OPT_PATH);
315 setting_retm_if(ret == SETTING_RETURN_FAIL, "get opt status failed");
316 internal_status.dTotal = dTotal;
317 internal_status.dAvail = dAvail;
321 ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_MEDIA_PATH);
322 setting_retm_if(ret == SETTING_RETURN_FAIL, "get media status failed");
324 internal_status.dTotal += dTotal;
325 internal_status.dAvail += dAvail;
327 ad->internal_status = internal_status;
330 static void __setting_storage_main_pictures_videos_status_get(void *data)
333 setting_retm_if(data == NULL, "Data parameter is NULL");
334 SettingStorageUG *ad = (SettingStorageUG *) data;
337 int ret = SETTING_RETURN_SUCCESS;
338 Setting_Storage_Status pics_videos_status;
340 dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_PICTURES_PATH);
341 setting_retm_if(ret == SETTING_RETURN_FAIL, "get pictures status failed");
342 pics_videos_status.dTotal = dTotal;
343 //SETTING_TRACE("pics_videos_status = %f", dTotal);
346 dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_VIDEOS_PATH);
347 setting_retm_if(ret == SETTING_RETURN_FAIL, "get video status failed");
348 //SETTING_TRACE("pics_videos_status = %f", dTotal);
349 pics_videos_status.dTotal += dTotal;
351 //SETTING_TRACE("pics_videos_status = %f", pics_videos_status.dTotal);
353 ad->pics_videos_status = pics_videos_status;
356 static void __setting_storage_main_downloads_status_get(void *data)
359 setting_retm_if(data == NULL, "Data parameter is NULL");
360 SettingStorageUG *ad = (SettingStorageUG *) data;
363 int ret = SETTING_RETURN_SUCCESS;
364 Setting_Storage_Status downloads_status;
366 dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_DOWNLOADS_PATH);
367 setting_retm_if(ret == SETTING_RETURN_FAIL, "get pictures status failed");
368 downloads_status.dTotal = dTotal;
370 //SETTING_TRACE("downloads_status = %f", dTotal);
372 ad->downloads_status = downloads_status;
375 static bool __setting_storage_main_media_item_cb(media_info_h media, void *data)
378 setting_retvm_if(media == NULL, true, "media is NULL");
379 setting_retvm_if(data == NULL, true, "Data parameter is NULL");
380 SettingStorageUG *ad = (SettingStorageUG *) data;
382 media_content_type_e media_type = 0;
383 unsigned long long size = 0;
385 media_info_get_media_type(media, &media_type);
386 //SETTING_TRACE("media_type : [%d]", media_type);
388 if(media_type == MEDIA_CONTENT_TYPE_MUSIC) {
389 SETTING_TRACE("MEDIA_CONTENT_TYPE_MUSIC");
391 media_info_get_size(media, &size);
392 //SETTING_TRACE("size : [%lld]", size);
393 ad->audio_status.dTotal += size;
395 SETTING_TRACE("Other Content");
401 static void __setting_storage_main_audio_status_get(void *data)
404 setting_retm_if(data == NULL, "Data parameter is NULL");
405 SettingStorageUG *ad = (SettingStorageUG *) data;
407 ad->audio_status.dTotal = 0;
409 int ret = MEDIA_CONTENT_ERROR_NONE;
410 filter_h filter = NULL;
413 char *condition = "MEDIA_TYPE=3"; /*0-image, 1-video, 2-sound, 3-music, 4-other*/
415 ret = media_filter_create(&filter);
416 if(ret != MEDIA_CONTENT_ERROR_NONE) {
417 SETTING_TRACE("Fail to create filter");
421 ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
422 if(ret != MEDIA_CONTENT_ERROR_NONE) {
423 media_filter_destroy(filter);
424 SETTING_TRACE("Fail to set condition");
428 ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_NOCASE);
429 if(ret != MEDIA_CONTENT_ERROR_NONE) {
430 media_filter_destroy(filter);
431 SETTING_TRACE("Fail to set order");
435 ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, ad);
436 if(ret != MEDIA_CONTENT_ERROR_NONE) {
437 media_filter_destroy(filter);
438 SETTING_TRACE("Fail to get media");
443 static int __setting_storage_main_miscellaneous_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
446 setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
449 struct dirent *ent = NULL;
450 char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
452 pDir = opendir(path);
453 setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
455 while ((ent = readdir(pDir)) != NULL) {
456 if (safeStrCmp(ent->d_name, ".") == 0
457 || safeStrCmp(ent->d_name, "..") == 0
458 || safeStrCmp(ent->d_name, ".tmp_download") == 0
459 || safeStrCmp(ent->d_name, ".video-hub") == 0
460 || safeStrCmp(ent->d_name, "Camera") == 0
461 || safeStrCmp(ent->d_name, "Downloads") == 0
462 || safeStrCmp(ent->d_name, "Images") == 0
463 || safeStrCmp(ent->d_name, "Others") == 0
464 || safeStrCmp(ent->d_name, "Sounds") == 0
465 || safeStrCmp(ent->d_name, "Videos") == 0
466 || safeStrCmp(ent->d_name, "lost+found") == 0) {
469 /*only deal with dirs and regular files*/
470 if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
474 Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
480 memset(pNode, 0, sizeof(Node_Info));
482 g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
485 g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
488 int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
493 if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
498 if (ent->d_type & DT_DIR) {
499 *dir_list = eina_list_append(*dir_list, pNode);
501 *file_list = eina_list_append(*file_list, pNode);
506 return SETTING_RETURN_SUCCESS;
510 * Miscellaneous files is all directories files under /opt/media/ except below default directories:
511 * ++++++++++++++++++++++++++++++++++++++++++++++++
514 * drwxrwxrwx 11 app app 4096 Jan 4 12:42 .
515 * drwxr-xr-x 20 root root 4096 Jan 7 10:09 ..
516 * drwxr-xr-x 2 root root 4096 Jan 4 08:46 .tmp_download
517 * drwxr-xr-x 2 app app 4096 Jan 4 08:47 .video-hub
518 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Camera
519 * drwxrwxrwx 3 app app 4096 Jan 4 08:46 Downloads
520 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Images
521 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Others
522 * drwxrwxrwx 3 app app 4096 Oct 5 2012 Sounds
523 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Videos
524 * drwxrwxrwx 2 app app 16384 Oct 5 2012 lost+found
525 * ++++++++++++++++++++++++++++++++++++++++++++++++
527 static void __setting_storage_main_miscellaneous_size_get(void *data)
530 setting_retm_if(data == NULL, "Data parameter is NULL");
531 SettingStorageUG *ad = (SettingStorageUG *) data;
533 unsigned long size = 0;
534 Eina_List *file_list = NULL;
535 Eina_List *dir_list = NULL;
537 char *path = SETTING_STORAGE_MEDIA_PATH;
539 if (ecore_file_is_dir(path)) {
540 int ret = SETTING_RETURN_FAIL;
541 ret = __setting_storage_main_miscellaneous_list_get(path, &dir_list, &file_list);
543 if (ret == SETTING_RETURN_SUCCESS) {
545 int dir_list_len = setting_storage_list_len_get(dir_list);
546 int file_list_len = setting_storage_list_len_get(file_list);
547 SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
548 for (i = 0; i < file_list_len; i++) {
549 Node_Info *pNode = NULL;
550 pNode = (Node_Info *)eina_list_nth(file_list, i);
554 SETTING_TRACE("path is [%s], name is [%s]", pNode->path, pNode->name);
556 for (i = 0; i < dir_list_len; i++) {
557 Node_Info *pNode = NULL;
558 char *full_path = NULL;
559 pNode = (Node_Info *)eina_list_nth(dir_list, i);
562 full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
563 SETTING_TRACE("full_path is [%s]", full_path);
564 size += (__setting_storage_main_folder_size_get(full_path));
571 eina_list_free(file_list);
576 eina_list_free(dir_list);
580 ad->others_status.dTotal = size;
583 static void __setting_storage_main_apps_list_free(void *data)
585 setting_retm_if(data == NULL, "Data parameter is NULL");
586 SettingStorageUG *ad = (SettingStorageUG *) data;
590 EINA_LIST_FOREACH (ad->apps_list, l, app_info)
592 G_FREE(app_info->pkg_name);
593 G_FREE(app_info->pkg_type);
596 eina_list_free(ad->apps_list);
597 ad->apps_list = NULL;
600 static ail_cb_ret_e __setting_storage_main_appinfo_func_cb(const ail_appinfo_h ail_info, void *data)
602 setting_retvm_if(data == NULL, AIL_CB_RET_CONTINUE, "Data parameter is NULL");
603 SettingStorageUG *ad = (SettingStorageUG *) data;
605 char *pkg_name = NULL;
606 char *pkg_type = NULL;
608 ail_appinfo_get_str(ail_info, AIL_PROP_PACKAGE_STR, &pkg_name);
609 setting_retvm_if(pkg_name == NULL, AIL_CB_RET_CONTINUE, "get pkg_name failed");
611 ail_appinfo_get_str(ail_info, AIL_PROP_X_SLP_PACKAGETYPE_STR, &pkg_type);
612 setting_retvm_if(pkg_type == NULL, AIL_CB_RET_CONTINUE, "get pkg_type failed");
614 App_Info *app_info = (App_Info*)calloc(1, sizeof(App_Info));
615 setting_retvm_if(app_info == NULL, AIL_CB_RET_CONTINUE, "failed to calloc");
617 app_info->pkg_name = (char *)g_strdup(pkg_name);
618 app_info->pkg_type = (char *)g_strdup(pkg_type);
619 ad->apps_list = eina_list_append(ad->apps_list, app_info);
620 return AIL_CB_RET_CONTINUE;
623 static void __setting_storage_main_applications_list_get(void *data)
626 setting_retm_if(data == NULL, "Data parameter is NULL");
627 SettingStorageUG *ad = (SettingStorageUG *) data;
629 __setting_storage_main_apps_list_free(ad);
631 /* get app_info from AIL */
632 ail_filter_h filter_rpm = NULL;
633 ail_filter_h filter_wrt = NULL;
634 ail_filter_h filter_tpk = NULL;
636 ail_filter_new(&filter_rpm);
637 ail_filter_new(&filter_wrt);
638 ail_filter_new(&filter_tpk);
640 ail_filter_add_str(filter_rpm, AIL_PROP_X_SLP_PACKAGETYPE_STR, RPM_PREFIX);
641 ail_filter_add_str(filter_wrt, AIL_PROP_X_SLP_PACKAGETYPE_STR, WRT_PREFIX);
642 ail_filter_add_str(filter_tpk, AIL_PROP_X_SLP_PACKAGETYPE_STR, TPK_PREFIX);
644 ail_filter_list_appinfo_foreach(filter_rpm, __setting_storage_main_appinfo_func_cb, (void*)ad);
645 ail_filter_list_appinfo_foreach(filter_wrt, __setting_storage_main_appinfo_func_cb, (void*)ad);
646 ail_filter_list_appinfo_foreach(filter_tpk, __setting_storage_main_appinfo_func_cb, (void*)ad);
648 ail_filter_destroy(filter_rpm);
649 ail_filter_destroy(filter_wrt);
650 ail_filter_destroy(filter_tpk);
653 static void __setting_storage_main_applications_status_get(void *data)
656 setting_retm_if(data == NULL, "Data parameter is NULL");
657 SettingStorageUG *ad = (SettingStorageUG *) data;
659 __setting_storage_main_applications_list_get(ad);
661 ad->apps_status.dTotal = 0;
665 EINA_LIST_FOREACH (ad->apps_list, l, app_info)
667 //SETTING_TRACE("pkg_name: %s ", app_info->pkg_name);
668 //SETTING_TRACE("pkg_type: %s", app_info->pkg_type);
669 pkgmgr_info *pkg_info = pkgmgr_info_new(app_info->pkg_type, app_info->pkg_name);
671 SETTING_TRACE("pkg_info is null, couldn't get the sizes");
672 app_info->total_size = 0;
675 buf = pkgmgr_info_get_string(pkg_info, STR_INSTALLED_SIZE);
677 //SETTING_TRACE("size : %s", buf);
678 app_info->total_size = atoi(buf);
681 app_info->total_size = 0;
683 pkgmgr_info_free(pkg_info);
686 ad->apps_status.dTotal += app_info->total_size;
689 char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
690 int ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
691 setting_retm_if(ret == SETTING_RETURN_FAIL, "failed to transform");
693 G_FREE(ad->apps->sub_desc);
694 ad->apps->sub_desc = (char *)g_strdup(apps_desc);
695 elm_object_item_data_set(ad->apps->item, ad->apps);
696 elm_genlist_item_update(ad->apps->item);
698 elm_object_item_data_set(ad->internal->item, ad->internal);
699 elm_genlist_item_update(ad->internal->item);
701 if (ad->pop_progress) {
702 evas_object_del(ad->pop_progress);
703 ad->pop_progress = NULL;
707 static Eina_Bool __setting_storage_main_timer_cb(void *data)
710 setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "data is NULL");
711 SettingStorageUG *ad = (SettingStorageUG *)data;
713 __setting_storage_main_applications_status_get(ad);
714 return ECORE_CALLBACK_CANCEL;
717 static void __setting_storage_main_launch_ug_destroy_cb(ui_gadget_h ug, void *priv)
720 /* restore the '<-' button on the navigate bar */
721 retm_if(priv == NULL, "priv is NULL");
722 SettingStorageUG *ad = (SettingStorageUG *) priv;
726 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navibar);
727 retm_if(navi_it == NULL, "navi_it is NULL");
728 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
730 if (back_btn != NULL) {
731 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
734 if (ad->pop_progress) {
735 evas_object_del(ad->pop_progress);
736 ad->pop_progress = NULL;
738 ad->pop_progress = setting_create_popup_with_progressbar(ad, ad->win_get,
740 NULL, NULL, NULL, 0, TRUE, TRUE);
743 ecore_timer_del(ad->timer);
746 ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
749 static void __setting_storage_main_launch_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
752 retm_if(priv == NULL, "priv is NULL");
753 SettingStorageUG *ad = (SettingStorageUG *) priv;
754 Evas_Object *base = NULL;
755 base = (Evas_Object *) ug_get_layout(ug);
756 retm_if(base == NULL, "base is NULL");
759 case UG_MODE_FULLVIEW:
760 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
761 elm_win_resize_object_add(ad->win_get, base);
762 evas_object_show(base);
770 static void __setting_storage_main_launch_manage_app_ug(void *data)
774 retm_if(data == NULL, "Data parameter is NULL");
776 SettingStorageUG *ad = (SettingStorageUG *) data;
779 if (service_create(&svc)) {
783 service_add_extra_data(svc, "viewtype", "manage-applications");
785 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
787 SETTING_TRACE_ERROR("calloc failed");
788 service_destroy(svc);
791 cbs->layout_cb = __setting_storage_main_launch_ug_layout_cb;
792 cbs->result_cb = NULL;
793 cbs->destroy_cb = __setting_storage_main_launch_ug_destroy_cb;
794 cbs->priv = (void *)ad;
796 ui_gadget_h ug = ug_create(ad->ug, "setting-manage-applications-efl", UG_MODE_FULLVIEW, svc, cbs);
797 if (NULL == ug) { /* error handling */
798 SETTING_TRACE_ERROR("NULL == ug");
802 service_destroy(svc);
806 static void __setting_storage_main_app_launch(char *app_name)
809 setting_retm_if(app_name == NULL, "app_name is NULL");
811 app_launcher(app_name);
814 static void __setting_storage_main_Gendial_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
818 setting_retm_if(data == NULL, "Data parameter is NULL");
819 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
820 elm_genlist_item_selected_set(item, 0);
821 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
823 SettingStorageUG *ad = (SettingStorageUG *) data;
825 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
828 if (!safeStrCmp(SETTING_STORAGE_DEFAULT_STORAGE_STR, list_item->keyStr)) {
829 setting_view_change(&setting_view_storage_main,
830 &setting_view_storage_default_storage, ad);
831 } else if (!safeStrCmp(SETTING_STORAGE_MISCES_STR, list_item->keyStr)) {
832 setting_view_change(&setting_view_storage_main,
833 &setting_view_storage_miscellaneous_files, ad);
838 if (!safeStrCmp("IDS_ST_BODY_APPLICATIONS", list_item->keyStr)) {
839 __setting_storage_main_launch_manage_app_ug(ad);
840 } else if (!safeStrCmp(SETTING_STORAGE_DEFAULT_STORAGE_STR, list_item->keyStr)) {
841 setting_view_change(&setting_view_storage_main,
842 &setting_view_storage_default_storage, ad);
843 } else if (!safeStrCmp(SETTING_STORAGE_PICS_STR, list_item->keyStr)) {
844 __setting_storage_main_app_launch("org.tizen.gallery");
845 } else if (!safeStrCmp(SETTING_STORAGE_DOWNS_STR, list_item->keyStr)) {
846 __setting_storage_main_app_launch("org.tizen.download-manager");
847 } else if (!safeStrCmp(SETTING_STORAGE_AUDIO_STR, list_item->keyStr)) {
848 __setting_storage_main_app_launch("org.tizen.music-player");
849 } else if (!safeStrCmp(SETTING_STORAGE_MISCES_STR, list_item->keyStr)) {
850 setting_view_change(&setting_view_storage_main,
851 &setting_view_storage_miscellaneous_files, ad);
858 static int __setting_storage_main_check_mmc_status()
861 struct stat parent_stat, mount_stat;
863 ret = stat(SETTING_STORAGE_MMC_PATH, &mount_stat);
864 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard");
866 ret = stat(SETTING_STORAGE_MMC_PARENT_PATH, &parent_stat);
867 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard/..");
869 /* Does not mounted, same st_dev */
870 if(mount_stat.st_dev == parent_stat.st_dev) {
872 } else { /* MMC mounted, diff st_dev */
877 static void __setting_storage_main_sd_card_info_get(char* szTotal, char* szAvail)
879 int mmc_status = __setting_storage_main_check_mmc_status();
880 setting_retm_if(mmc_status == -1, "check mmc status failed");
882 /* Does not mounted, same st_dev */
883 if (mmc_status == 0) {
884 snprintf(szTotal, SETTING_STORAGE_MAX_STR_LEN, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
885 snprintf(szAvail, SETTING_STORAGE_MAX_STR_LEN, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
887 /* MMC mounted, diff st_dev */
892 int ret = SETTING_RETURN_SUCCESS;
893 ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_MMC_PATH);
894 setting_retm_if(ret == SETTING_RETURN_FAIL, "get sd card size detail failed");
896 ret = __setting_storage_status_size_transition(dTotal, szTotal);
897 setting_retm_if(ret == SETTING_RETURN_FAIL, "__setting_storage_status_size_transition failed");
899 ret = __setting_storage_status_size_transition(dAvail, szAvail);
900 setting_retm_if(ret == SETTING_RETURN_FAIL, "__setting_storage_status_size_transition failed");
902 SETTING_TRACE("Total[%s], Avail[%s]", szTotal, szAvail);
906 static int __setting_storage_main_mmc_content_init(void *data, setting_storage_mmc_cb cb)
909 setting_retvm_if(NULL == data, SETTING_RETURN_FAIL, "data is NULL");
910 setting_retvm_if(NULL == cb, SETTING_RETURN_FAIL, "cb is NULL");
911 SettingStorageUG *ad = (SettingStorageUG *)data;
912 if (ad->mmc_content == NULL) {
913 ad->mmc_content = (struct mmc_contents *)calloc(1, sizeof(struct mmc_contents *));
914 if (ad->mmc_content == NULL ) {
915 SETTING_TRACE_ERROR("calloc failed");
916 return SETTING_RETURN_FAIL;
919 ad->mmc_content->mmc_cb = cb;
920 ad->mmc_content->user_data = ad;
921 return SETTING_RETURN_SUCCESS;
924 static void __setting_storage_status_sd_card_popup_format_response_cb(void *data,
925 Evas_Object *obj, void *event_info)
928 setting_retm_if(data == NULL, "Data parameter is NULL");
929 SettingStorageUG *ad = (SettingStorageUG *)data;
932 evas_object_del(ad->popup);
936 char sd_total[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
937 char sd_available[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
938 __setting_storage_main_sd_card_info_get(sd_total, sd_available);
941 G_FREE(ad->sd_total->sub_desc);
942 ad->sd_total->sub_desc = (char *)g_strdup(sd_total);
943 elm_object_item_data_set(ad->sd_total->item, ad->sd_total);
944 elm_genlist_item_update(ad->sd_total->item);
946 if (ad->sd_available) {
947 G_FREE(ad->sd_available->sub_desc);
948 ad->sd_available->sub_desc = (char *)g_strdup(sd_available);
949 elm_object_item_data_set(ad->sd_available->item, ad->sd_available);
950 elm_genlist_item_update(ad->sd_available->item);
954 static void __setting_storage_status_sd_card_popup_response_cb(void *data,
955 Evas_Object *obj, void *event_info)
958 setting_retm_if(data == NULL, "Data parameter is NULL");
959 SettingStorageUG *ad = (SettingStorageUG *)data;
962 evas_object_del(ad->popup);
967 static void __setting_storage_main_sd_card_mount_cb(int val, void *data)
970 setting_retm_if(data == NULL, "Data parameter is NULL");
971 SettingStorageUG *ad = (SettingStorageUG *) data;
974 evas_object_del(ad->popup);
979 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
981 SETTING_TRACE("mount success");
983 } else if (val == SETTING_STORAGE_SYSMAN_REQUEST_MOUNT_ALREADY) {
984 desc = _(SETTING_STORAGE_SD_CARD_MOUNT_ALREADY_DESC);
986 desc = _("IDS_COM_POP_FAILED");
989 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, desc,
990 __setting_storage_status_sd_card_popup_response_cb,
991 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
994 static void __setting_storage_main_sd_card_unmount_cb(int val, void *data)
997 setting_retm_if(data == NULL, "Data parameter is NULL");
998 SettingStorageUG *ad = (SettingStorageUG *) data;
1001 evas_object_del(ad->popup);
1005 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
1007 SETTING_TRACE("unmount success");
1010 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
1011 __setting_storage_status_sd_card_popup_response_cb,
1012 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1016 static void __setting_storage_main_sd_card_mount_unmount(void *data)
1018 SETTING_TRACE_BEGIN;
1019 setting_retm_if(data == NULL, "Data parameter is NULL");
1020 SettingStorageUG *ad = (SettingStorageUG *)data;
1022 int mmc_status = __setting_storage_main_check_mmc_status();
1023 setting_retm_if(mmc_status == -1, "check mmc status failed");
1026 evas_object_del(ad->popup);
1030 /* Show progressbar popup */
1031 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
1032 "pending_list", NULL, NULL,
1033 __setting_storage_status_sd_card_popup_response_cb,
1034 SETTING_STORAGE_PROGRESSBAR_TIMEOUT, TRUE, TRUE);
1037 /* Does not mounted, same st_dev */
1038 if (mmc_status == 0) {
1039 ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_mount_cb);
1040 if (ret == SETTING_RETURN_FAIL) {
1041 SETTING_TRACE_ERROR("__setting_storage_main_mmc_content_init fail");
1043 evas_object_del(ad->popup);
1046 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
1047 NULL, _("IDS_COM_POP_FAILED"),
1048 __setting_storage_status_sd_card_popup_response_cb,
1049 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1052 ret = sysman_request_mount_mmc(ad->mmc_content);
1054 SETTING_TRACE_ERROR("fail to call sysman_request_mount_mmc");
1057 /* MMC mounted, diff st_dev */
1059 ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_unmount_cb);
1060 if (ret == SETTING_RETURN_FAIL) {
1061 SETTING_TRACE_ERROR("__setting_storage_main_sd_card_unmount_cb fail");
1063 evas_object_del(ad->popup);
1066 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
1067 NULL, _("IDS_COM_POP_FAILED"),
1068 __setting_storage_status_sd_card_popup_response_cb,
1069 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1073 ret = sysman_request_unmount_mmc(ad->mmc_content,
1074 MNT_FORCE); /* 1 = MNT_FORCE */
1076 SETTING_TRACE_ERROR("fail to call sysman_request_unmount_mmc");
1080 /* if fail, popup failed info */
1083 evas_object_del(ad->popup);
1086 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
1087 NULL, _("IDS_COM_POP_FAILED"),
1088 __setting_storage_status_sd_card_popup_response_cb,
1089 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1094 static void __setting_storage_main_sd_card_format_cb(int val, void *data)
1096 SETTING_TRACE_BEGIN;
1097 setting_retm_if(data == NULL, "Data parameter is NULL");
1098 SettingStorageUG *ad = (SettingStorageUG *) data;
1101 evas_object_del(ad->popup);
1105 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
1106 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_SUCCESS"),
1107 __setting_storage_status_sd_card_popup_format_response_cb,
1108 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1111 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
1112 __setting_storage_status_sd_card_popup_response_cb,
1113 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1117 static void __setting_storage_main_sd_card_format_popup_yes(void *data)
1119 SETTING_TRACE_BEGIN;
1120 setting_retm_if(data == NULL, "Data parameter is NULL");
1121 SettingStorageUG *ad = (SettingStorageUG *) data;
1124 evas_object_del(ad->popup);
1128 /* Show Formatting..... popup */
1129 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
1130 "list_process", _("IDS_ST_POP_MSG_FORMATTING"),
1131 NULL, __setting_storage_status_sd_card_popup_response_cb,
1132 SETTING_STORAGE_PROGRESSBAR_TIMEOUT, TRUE, TRUE);
1134 int ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_format_cb);
1135 if (ret == SETTING_RETURN_FAIL) {
1136 SETTING_TRACE_ERROR("__setting_storage_main_mmc_content_init fail");
1138 evas_object_del(ad->popup);
1141 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
1142 NULL, _("IDS_COM_POP_FAILED"),
1143 __setting_storage_status_sd_card_popup_response_cb,
1144 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1148 ret = sysman_request_format_mmc(ad->mmc_content);
1149 /* if fail, destory popup */
1151 SETTING_TRACE_ERROR("fail to call sysman_request_format_mmc");
1153 evas_object_del(ad->popup);
1156 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
1157 NULL, _("IDS_COM_POP_FAILED"),
1158 __setting_storage_status_sd_card_popup_response_cb,
1159 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
1163 static void __setting_storage_main_sd_card_format_popup_no(void *data)
1165 SETTING_TRACE_BEGIN;
1166 setting_retm_if(data == NULL, "Data parameter is NULL");
1167 SettingStorageUG *ad = (SettingStorageUG *) data;
1170 evas_object_del(ad->popup);
1175 static void __setting_storage_main_sd_card_ask_format_resp_cb(void *data, Evas_Object *obj, void *event_info)
1177 SETTING_TRACE_BEGIN;
1178 setting_retm_if(data == NULL, "Data parameter is NULL");
1179 int response_type = btn_type(obj);
1180 if (POPUP_RESPONSE_OK == response_type) {
1181 __setting_storage_main_sd_card_format_popup_yes(data);
1182 } else if (POPUP_RESPONSE_CANCEL == response_type) {
1183 __setting_storage_main_sd_card_format_popup_no(data);
1187 static void __setting_storage_main_sd_card_format_popup_create(void *data)
1189 SETTING_TRACE_BEGIN;
1190 setting_retm_if(data == NULL, "Data parameter is NULL");
1191 SettingStorageUG *ad = (SettingStorageUG *) data;
1194 evas_object_del(ad->popup);
1198 ad->popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
1199 _(SETTING_STORAGE_FORMAT_ASK_MSG),
1200 __setting_storage_main_sd_card_ask_format_resp_cb, 0,
1201 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
1204 static void __setting_storage_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1207 SETTING_TRACE_BEGIN;
1208 setting_retm_if(data == NULL, "Data parameter is NULL");
1209 setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1211 SettingStorageUG *ad = (SettingStorageUG *) data;
1212 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1213 elm_genlist_item_selected_set(item, 0);
1214 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1216 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1217 if (list_item == ad->sd_mount) {
1218 __setting_storage_main_sd_card_mount_unmount(ad);
1219 } else if (list_item == ad->sd_format) {
1220 __setting_storage_main_sd_card_format_popup_create(ad);
1224 static void __setting_storage_main_sd_card_info_append(void* data)
1226 SETTING_TRACE_BEGIN;
1227 setting_retm_if(data == NULL, "Data parameter is NULL");
1228 SettingStorageUG *ad = (SettingStorageUG *) data;
1230 /* remove the sd info items */
1232 elm_object_item_del(ad->sd_mount->item);
1233 ad->sd_mount = NULL;
1236 elm_object_item_del(ad->sd_total->item);
1237 ad->sd_total = NULL;
1239 if (ad->sd_available) {
1240 elm_object_item_del(ad->sd_available->item);
1241 ad->sd_available = NULL;
1243 if (ad->sd_format) {
1244 elm_object_item_del(ad->sd_format->item);
1245 ad->sd_format = NULL;
1248 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
1249 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
1250 setting_retm_if(ret != 0, "Get vconf failed");
1252 if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED) {
1253 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1254 ad, SWALLOW_Type_INVALID, NULL,
1255 NULL, 0, SETTING_STORAGE_MOUNT_STR,
1256 _(SETTING_STORAGE_INSERT_STR),
1259 setting_disable_genlist_item(ad->sd_mount->item);
1261 } else if (mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
1262 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2),
1263 __setting_storage_main_mouse_up_Gendial_list_cb,
1264 ad, SWALLOW_Type_INVALID, NULL,
1265 NULL, 0, SETTING_STORAGE_MOUNT_STR,
1266 _(SETTING_STORAGE_INSERT_STR),
1268 } else if (mmc_mode == VCONFKEY_SYSMAN_MMC_MOUNTED) {
1269 char sd_total[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
1270 char sd_available[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
1271 __setting_storage_main_sd_card_info_get(sd_total, sd_available);
1273 ad->sd_total = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1274 ad, SWALLOW_Type_INVALID, NULL,
1275 NULL, 0, "IDS_ST_BODY_TOTAL_SPACE",
1279 ad->sd_total->userdata = ad;
1280 elm_genlist_item_select_mode_set(ad->sd_total->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1282 SETTING_TRACE_ERROR("ad->sd_total is NULL");
1285 ad->sd_available = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1286 ad, SWALLOW_Type_INVALID, NULL,
1287 NULL, 0, "IDS_ST_BODY_AVAILABLE_SPACE",
1290 if (ad->sd_available) {
1291 ad->sd_available->userdata = ad;
1292 elm_genlist_item_select_mode_set(ad->sd_available->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1294 SETTING_TRACE_ERROR("ad->sd_available is NULL");
1297 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1298 __setting_storage_main_mouse_up_Gendial_list_cb,
1299 ad, SWALLOW_Type_INVALID, NULL,
1300 NULL, 0, "IDS_ST_BODY_UNMOUNT_SD_CARD", NULL,
1303 ad->sd_mount->userdata = ad;
1305 SETTING_TRACE_ERROR("ad->sd_mount is NULL");
1308 ad->sd_format = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1309 __setting_storage_main_mouse_up_Gendial_list_cb,
1310 ad, SWALLOW_Type_INVALID, NULL,
1312 "IDS_ST_BODY_FORMAT_SD_CARD",
1314 if (ad->sd_format) {
1315 ad->sd_format->userdata = ad;
1317 SETTING_TRACE_ERROR("ad->sd_format is NULL");
1320 SETTING_TRACE_ERROR("error status of sd card");
1323 Elm_Object_Item *item = NULL;
1324 item = elm_genlist_item_append(ad->genlist, &itc_bottom_seperator, NULL, NULL,
1325 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1326 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1329 static void __setting_storage_vconf_change_cb(keynode_t *key, void *data)
1331 SETTING_TRACE_BEGIN;
1332 setting_retm_if(NULL == key, "key is NULL");
1333 setting_retm_if(NULL == data, "data is NULL");
1334 SettingStorageUG *ad = (SettingStorageUG *)data;
1335 int status = vconf_keynode_get_int(key);
1336 char *vconf_name = vconf_keynode_get_name(key);
1338 if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
1339 SETTING_TRACE("status:%d", status);
1340 /* remove last item -> seperator */
1341 Elm_Object_Item *last_item = NULL;
1342 last_item = elm_genlist_last_item_get(ad->genlist);
1344 elm_object_item_del(last_item);
1346 __setting_storage_main_sd_card_info_append(ad);
1350 /* ***************************************************
1354 ***************************************************/
1355 static int setting_storage_main_create(void *cb)
1357 SETTING_TRACE_BEGIN;
1359 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1361 SettingStorageUG *ad = (SettingStorageUG *) cb;
1363 int ret = SETTING_RETURN_SUCCESS;
1365 ret = media_content_connect();
1366 if(ret == MEDIA_CONTENT_ERROR_NONE) {
1367 SETTING_TRACE("media_content_connect is success");
1369 SETTING_TRACE_ERROR("media_content_connect is failed");
1370 return SETTING_RETURN_FAIL;
1373 retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
1374 "win_main_layout is NULL");
1377 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
1380 _("IDS_COM_BODY_BACK"),
1382 __setting_storage_main_click_softkey_back_cb,
1384 ad, &ad->genlist, &ad->navibar);
1386 ad->itc_2text_1icon_4.item_style = "dialogue/2text.1icon.4";
1387 ad->itc_2text_1icon_4.func.text_get = __gl_text_get;
1388 ad->itc_2text_1icon_4.func.content_get = __gl_content_get;
1389 ad->itc_2text_1icon_4.func.state_get = NULL;
1390 ad->itc_2text_1icon_4.func.del = __gl_del;
1392 __setting_storage_main_internal_storage_status_get(ad);
1394 __setting_storage_main_pictures_videos_status_get(ad);
1396 __setting_storage_main_downloads_status_get(ad);
1398 __setting_storage_main_audio_status_get(ad);
1400 __setting_storage_main_miscellaneous_size_get(ad);
1402 Elm_Object_Item *item = NULL;
1404 bool is_emulator = isEmulBin();
1407 item = elm_genlist_item_append(ad->genlist, &itc_seperator, NULL, NULL,
1408 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1409 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1411 /* Default storage */
1412 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1413 __setting_storage_main_Gendial_mouse_up_cb,
1414 ad, SWALLOW_Type_INVALID, NULL, NULL,
1415 0, SETTING_STORAGE_DEFAULT_STORAGE_STR,
1419 setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
1420 SETTING_STORAGE_INTERNAL_STORAGE_STR,
1424 char total_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1425 ret = __setting_storage_status_size_transition(ad->internal_status.dTotal, total_desc);
1426 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1429 ad->internal = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
1430 setting_retvm_if(!ad->internal, SETTING_RETURN_FAIL, "calloc failed");
1433 ad->internal->userdata = ad;
1434 ad->internal->keyStr = (char *)g_strdup(total_desc);
1435 ad->internal->item = elm_genlist_item_append(ad->genlist, &(ad->itc_2text_1icon_4), ad->internal, NULL,
1436 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1437 elm_genlist_item_select_mode_set(ad->internal->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1439 SETTING_TRACE_ERROR("ad->internal is NULL");
1440 return SETTING_RETURN_FAIL;
1444 ad->apps_status.dTotal = 0; /* initial value */
1445 char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1446 ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
1447 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1449 ad->apps = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1450 __setting_storage_main_Gendial_mouse_up_cb,
1451 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_APPS_ICON_PATH,
1452 NULL, 0, "IDS_ST_BODY_APPLICATIONS",
1455 ad->apps->userdata = ad;
1457 elm_genlist_item_select_mode_set(ad->apps->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1460 SETTING_TRACE_ERROR("ad->apps is NULL");
1461 return SETTING_RETURN_FAIL;
1464 /* Pictures, Videos */
1465 char pics_videos_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1466 ret = __setting_storage_status_size_transition(ad->pics_videos_status.dTotal, pics_videos_desc);
1467 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1468 ad->pics_videos = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1469 __setting_storage_main_Gendial_mouse_up_cb,
1470 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_PICS_ICON_PATH,
1471 NULL, 0, SETTING_STORAGE_PICS_STR,
1472 pics_videos_desc, NULL);
1473 if (ad->pics_videos) {
1474 ad->pics_videos->userdata = ad;
1476 elm_genlist_item_select_mode_set(ad->pics_videos->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1479 SETTING_TRACE_ERROR("ad->pics_videos is NULL");
1480 return SETTING_RETURN_FAIL;
1484 char downloads_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1485 ret = __setting_storage_status_size_transition(ad->downloads_status.dTotal, downloads_desc);
1486 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1487 ad->downloads = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1488 __setting_storage_main_Gendial_mouse_up_cb,
1489 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_DOWNS_ICON_PATH,
1490 NULL, 0, SETTING_STORAGE_DOWNS_STR,
1493 if (ad->downloads) {
1494 ad->downloads->userdata = ad;
1496 elm_genlist_item_select_mode_set(ad->downloads->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1499 SETTING_TRACE_ERROR("ad->downloads is NULL");
1500 return SETTING_RETURN_FAIL;
1504 char audio_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1505 ret = __setting_storage_status_size_transition(ad->audio_status.dTotal, audio_desc);
1506 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1507 ad->audio = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1508 __setting_storage_main_Gendial_mouse_up_cb,
1509 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_AUDIO_ICON_PATH,
1510 NULL, 0, SETTING_STORAGE_AUDIO_STR,
1514 ad->audio->userdata = ad;
1517 elm_genlist_item_select_mode_set(ad->audio->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1520 SETTING_TRACE_ERROR("ad->audio is NULL");
1521 return SETTING_RETURN_FAIL;
1524 /* Miscellaneous files */
1525 char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1526 ret = __setting_storage_status_size_transition(ad->others_status.dTotal, others_desc);
1527 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1529 ad->others = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1530 __setting_storage_main_Gendial_mouse_up_cb,
1531 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_MISCES_ICON_PATH,
1532 NULL, 0, SETTING_STORAGE_MISCES_STR,
1535 ad->others->userdata = ad;
1537 SETTING_TRACE_ERROR("ad->others is NULL");
1538 return SETTING_RETURN_FAIL;
1542 char avail_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1543 ret = __setting_storage_status_size_transition(ad->internal_status.dAvail, avail_desc);
1544 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1546 ad->avail = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3), NULL,
1547 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_AVAIL_ICON_PATH,
1548 NULL, 0, SETTING_STORAGE_AVAIL_STR,
1551 ad->avail->userdata = ad;
1552 elm_genlist_item_select_mode_set(ad->avail->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1554 SETTING_TRACE_ERROR("ad->avail is NULL");
1555 return SETTING_RETURN_FAIL;
1560 /* Format USB storage */
1561 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text), NULL,
1562 ad, SWALLOW_Type_INVALID, NULL,
1564 SETTING_STORAGE_FORMAT_STR,
1567 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon), NULL,
1568 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
1569 NULL, NULL, 0, SETTING_STORAGE_FORMAT_DESC_STR, NULL,
1574 setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
1575 "IDS_ST_BODY_SD_CARD", NULL);
1576 __setting_storage_main_sd_card_info_append(ad);
1578 ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
1579 __setting_storage_vconf_change_cb, ad);
1581 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1584 item = elm_genlist_item_append(ad->genlist, &itc_bottom_seperator, NULL, NULL,
1585 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1586 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1590 ecore_timer_del(ad->timer);
1593 ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
1595 setting_view_storage_main.is_create = 1;
1596 return SETTING_RETURN_SUCCESS;
1599 static int setting_storage_main_destroy(void *cb)
1602 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1604 SettingStorageUG *ad = (SettingStorageUG *) cb;
1606 int ret = media_content_disconnect();
1607 if (ret == MEDIA_CONTENT_ERROR_NONE) {
1608 SETTING_TRACE("media_content_disconnect is success");
1610 SETTING_TRACE_ERROR("media_content_disconnect is failed");
1613 if (ad->pop_progress) {
1614 evas_object_del(ad->pop_progress);
1615 ad->pop_progress = NULL;
1619 ecore_timer_del(ad->timer);
1623 __setting_storage_main_apps_list_free(ad);
1626 ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
1627 __setting_storage_vconf_change_cb);
1629 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1634 evas_object_del(ad->popup);
1638 if (ad->ly_main != NULL) {
1639 evas_object_del(ad->ly_main);
1640 setting_view_storage_main.is_create = 0;
1643 return SETTING_RETURN_SUCCESS;
1646 static int setting_storage_main_update(void *cb)
1648 SETTING_TRACE_BEGIN;
1650 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1652 SettingStorageUG *ad = (SettingStorageUG *) cb;
1654 __setting_storage_main_miscellaneous_size_get(ad);
1656 char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1657 int ret = __setting_storage_status_size_transition(ad->others_status.dTotal, others_desc);
1658 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1660 G_FREE(ad->others->sub_desc);
1661 ad->others->sub_desc = (char *)g_strdup(others_desc);
1662 elm_object_item_data_set(ad->others->item, ad->others);
1663 elm_genlist_item_update(ad->others->item);
1665 if (ad->ly_main != NULL) {
1666 evas_object_show(ad->ly_main);
1669 return SETTING_RETURN_SUCCESS;
1672 static int setting_storage_main_cleanup(void *cb)
1675 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1677 SettingStorageUG *ad = (SettingStorageUG *) cb;
1679 if (ad->ly_main != NULL) {
1680 evas_object_hide(ad->ly_main);
1683 return SETTING_RETURN_SUCCESS;
1686 /* ***************************************************
1690 ***************************************************/
1692 static void __setting_storage_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1696 ret_if(data == NULL);
1698 SettingStorageUG *ad = (SettingStorageUG *) data;
1699 /* Send destroy request */
1700 ug_destroy_me(ad->ug);