3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include <setting-storage-main.h>
19 #include <package-manager.h>
22 static int setting_storage_main_create(void *cb);
23 static int setting_storage_main_destroy(void *cb);
24 static int setting_storage_main_update(void *cb);
25 static int setting_storage_main_cleanup(void *cb);
27 static void __setting_storage_main_click_softkey_back_cb(void *data, Evas_Object *obj,
30 setting_view setting_view_storage_main = {
31 .create = setting_storage_main_create,
32 .destroy = setting_storage_main_destroy,
33 .update = setting_storage_main_update,
34 .cleanup = setting_storage_main_cleanup,
37 static Evas_Object *__setting_storage_main_image_add(Evas *evas, char *icon_path, int width, int height)
39 Evas_Object *image = NULL;
40 image = evas_object_image_add(evas);
41 evas_object_size_hint_weight_set(image, 0.0, EVAS_HINT_EXPAND);
42 evas_object_image_load_size_set(image, width, height);
43 evas_object_image_file_set(image, icon_path, NULL);
44 evas_object_image_fill_set(image, 0, 0, width, height);
45 evas_object_size_hint_min_set(image, width, height);
46 evas_object_show(image);
51 static char *__gl_text_get(void *data, Evas_Object *obj, const char *part)
54 Setting_GenGroupItem_Data *item_data = data;
56 if (!safeStrCmp(part, "elm.text.1")) {
57 return (char *)g_strdup(item_data->keyStr);
62 static Evas_Object *__gl_content_get(void *data, Evas_Object *obj, const char *part)
65 Setting_GenGroupItem_Data *item_data = data;
66 SettingStorageUG *ad = (SettingStorageUG *) item_data->userdata;
68 int width = SETTING_STORAGE_ICON_WIDTH;
69 int height = SETTING_STORAGE_ICON_HEIGHT;
71 app_device_orientation_e m = elm_win_rotation_get(ad->win_get);
72 if(APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m) {
73 width = SETTING_STORAGE_ICON_LANDSCAPE_WIDTH;
75 width = SETTING_STORAGE_ICON_WIDTH;
77 float temp_size = 0.0;
79 /* use size (applications + picture/videos + audio + miscellaneous + available) as 100% */
80 double total_size = ad->apps_status.dTotal + ad->pics_videos_status.dTotal +
81 + ad->audio_status.dTotal +
82 ad->others_status.dTotal + ad->internal_status.dAvail;
84 if (!safeStrCmp(part, "elm.icon")){
85 Evas_Object *status_box = NULL;
86 status_box = elm_box_add(obj);
87 retvm_if(status_box == NULL, NULL, "Cannot get box");
88 item_data->eo_check = status_box;
89 elm_box_horizontal_set(status_box, 1);
90 evas_object_size_hint_align_set(status_box, 0.0, EVAS_HINT_FILL);
91 evas_object_show(status_box);
93 Evas *evas = evas_object_evas_get(obj);
96 unsigned int apps_size = 0;
97 temp_size = ((float)ad->apps_status.dTotal / total_size) * width;
98 if (temp_size < 1 && temp_size > 0) {
101 apps_size = (unsigned int)temp_size;
104 Evas_Object *apps = __setting_storage_main_image_add(evas, SETTING_STORAGE_APPS_ICON_PATH, apps_size, height);
105 elm_box_pack_end(status_box, apps);
108 /* pictures, videos */
109 unsigned int pics_videos_size = 0;
110 temp_size = ((float)ad->pics_videos_status.dTotal / total_size) * width;
111 if (temp_size < 1 && temp_size > 0) {
112 pics_videos_size = 1;
114 pics_videos_size = (unsigned int)temp_size;
116 if (pics_videos_size > 0) {
117 Evas_Object *pics = __setting_storage_main_image_add(evas, SETTING_STORAGE_PICS_ICON_PATH, pics_videos_size, height);
118 elm_box_pack_end(status_box, pics);
122 unsigned int audio_size = 0;
123 temp_size = ((float)ad->audio_status.dTotal / total_size) * width;
124 if (temp_size < 1 && temp_size > 0) {
127 audio_size = (unsigned int)temp_size;
129 if (audio_size > 0) {
130 Evas_Object *audio = __setting_storage_main_image_add(evas, SETTING_STORAGE_AUDIO_ICON_PATH, audio_size, height);
131 elm_box_pack_end(status_box, audio);
134 /* Miscellaneous files */
135 unsigned int others_size = 0;
136 temp_size = ((float)ad->others_status.dTotal / total_size) * width;
137 if (temp_size < 1 && temp_size > 0) {
140 others_size = (unsigned int)temp_size;
142 if (others_size > 0) {
143 Evas_Object *misc = __setting_storage_main_image_add(evas, SETTING_STORAGE_MISCES_ICON_PATH, others_size, height);
144 elm_box_pack_end(status_box, misc);
148 unsigned int avail_size = 0;
149 temp_size = ((float)ad->internal_status.dAvail / total_size) * width;
150 if (temp_size < 1 && temp_size > 0) {
153 avail_size = (unsigned int)temp_size;
155 int sum = apps_size + pics_videos_size + audio_size + others_size;
156 if ((sum + avail_size) > width) {
157 avail_size = width - sum;
160 if (avail_size > 0) {
161 Evas_Object *avail = __setting_storage_main_image_add(evas, SETTING_STORAGE_AVAIL_ICON_PATH, avail_size, height);
162 elm_box_pack_end(status_box, avail);
170 static void __gl_del(void *data, Evas_Object *obj)
172 /* SETTING_TRACE_BEGIN; */
173 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
175 G_FREE(item_data->keyStr);
180 static int __setting_storage_main_fs_stat(double *total, double *avail, const char *path)
183 setting_retvm_if(NULL == total || NULL == avail, SETTING_RETURN_FAIL, "Null output parameters");
187 if (!statvfs(path, &s)) {
188 SETTING_TRACE("f_bsize = %ld f_blocks = %ld f_bavail = %ld f_frsize = %ld",
189 s.f_bsize, s.f_blocks, s.f_bavail, s.f_frsize);
190 *total = (double)s.f_frsize * s.f_blocks;
191 *avail = (double)s.f_bsize * s.f_bavail;
193 return SETTING_RETURN_FAIL;
196 return SETTING_RETURN_SUCCESS;
199 static int __setting_storage_status_size_transition(double size, char *size_desc)
201 //SETTING_TRACE_BEGIN;
202 //SETTING_TRACE("size = %f", size);
203 double tmp_size = 0.0;
205 if (size < SETTING_STORAGE_MEGABYTE_VALUE) { // size < 1MB: show x.xKB
206 tmp_size = size / SETTING_STORAGE_KILOBYTE_VALUE;
207 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "KB");
208 retv_if(ret < 0, SETTING_RETURN_FAIL);
209 } else if (size < SETTING_STORAGE_GIGABYTE_VALUE) { // size < 1GB: show x.xMB
210 tmp_size = size / SETTING_STORAGE_MEGABYTE_VALUE;
211 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "MB");
212 retv_if(ret < 0, SETTING_RETURN_FAIL);
213 } else { // 1G <= size: show x.xGB
214 tmp_size = size / SETTING_STORAGE_GIGABYTE_VALUE;
215 ret = snprintf(size_desc, SETTING_STORAGE_MAX_STR_LEN, "%4.2lf%s", tmp_size, "GB");
216 retv_if(ret < 0, SETTING_RETURN_FAIL);
219 return SETTING_RETURN_SUCCESS;
223 static void __setting_storage_main_internal_storage_status_get(void *data)
226 setting_retm_if(data == NULL, "Data parameter is NULL");
227 SettingStorageUG *ad = (SettingStorageUG *) data;
231 int ret = SETTING_RETURN_SUCCESS;
232 Setting_Storage_Status internal_status;
234 ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_OPT_USR_PATH);
235 setting_retm_if(ret == SETTING_RETURN_FAIL, "get opt status failed");
236 internal_status.dTotal = dTotal;
237 internal_status.dAvail = dAvail;
239 ad->internal_status = internal_status;
242 static bool __setting_storage_main_media_item_cb(media_info_h media, void *data)
244 //SETTING_TRACE_BEGIN;
245 setting_retvm_if(media == NULL, true, "media is NULL");
246 setting_retvm_if(data == NULL, true, "Data parameter is NULL");
247 double *total_size = (double *) data;
249 unsigned long long size = 0;
251 char *file_path = NULL;
252 media_info_get_file_path(media, &file_path);
254 if (!ecore_file_exists(file_path)) {
260 media_info_get_size(media, &size);
261 //SETTING_TRACE("size : [%lld]", size);
267 static double __setting_storage_main_pictures_videos_status_get()
270 double total_size = 0.0;
272 int ret = MEDIA_CONTENT_ERROR_NONE;
273 filter_h filter = NULL;
276 char *condition = "(MEDIA_TYPE=0 OR MEDIA_TYPE=1) and MEDIA_PATH LIKE \'/opt/usr/%%\'"; /*0-image, 1-video, 2-sound, 3-music, 4-other*/
278 ret = media_filter_create(&filter);
279 if(ret != MEDIA_CONTENT_ERROR_NONE) {
280 SETTING_TRACE_ERROR("Fail to create filter");
284 ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
285 if(ret != MEDIA_CONTENT_ERROR_NONE) {
286 media_filter_destroy(filter);
287 SETTING_TRACE_ERROR("Fail to set condition");
291 ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, &total_size);
292 if(ret != MEDIA_CONTENT_ERROR_NONE) {
293 media_filter_destroy(filter);
294 SETTING_TRACE_ERROR("Fail to get media");
298 ret = media_filter_destroy(filter);
299 if (ret != MEDIA_CONTENT_ERROR_NONE) {
300 SETTING_TRACE_ERROR("destroy filter failed\n\n");
307 static double __setting_storage_main_audio_status_get()
311 double total_size = 0.0;
313 int ret = MEDIA_CONTENT_ERROR_NONE;
314 filter_h filter = NULL;
317 char *condition = "MEDIA_TYPE=3 and MEDIA_PATH LIKE \'/opt/usr/%%\'"; /*0-image, 1-video, 2-sound, 3-music, 4-other*/
319 ret = media_filter_create(&filter);
320 if(ret != MEDIA_CONTENT_ERROR_NONE) {
321 SETTING_TRACE("Fail to create filter");
325 ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
326 if(ret != MEDIA_CONTENT_ERROR_NONE) {
327 media_filter_destroy(filter);
328 SETTING_TRACE("Fail to set condition");
332 ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, &total_size);
333 if(ret != MEDIA_CONTENT_ERROR_NONE) {
334 media_filter_destroy(filter);
335 SETTING_TRACE("Fail to get media");
339 ret = media_filter_destroy(filter);
340 if (ret != MEDIA_CONTENT_ERROR_NONE) {
341 SETTING_TRACE_ERROR("destroy filter failed\n\n");
348 static bool __setting_storage_main_other_item_cb(media_info_h media, void *data)
350 //SETTING_TRACE_BEGIN;
351 setting_retvm_if(media == NULL, true, "media is NULL");
352 setting_retvm_if(data == NULL, true, "Data parameter is NULL");
353 double *total_size = (double *) data;
355 unsigned long long size = 0;
357 char *file_path = NULL;
358 media_info_get_file_path(media, &file_path);
360 if (!ecore_file_exists(file_path)) {
365 if (!safeStrNCmp(file_path, PATH1, sizeof(PATH1)) ||
366 !safeStrNCmp(file_path, PATH2, sizeof(PATH2)) ||
367 !safeStrNCmp(file_path, PATH3, sizeof(PATH3)) ||
368 !safeStrNCmp(file_path, PATH4, sizeof(PATH4)) ||
369 !safeStrNCmp(file_path, PATH5, sizeof(PATH5)) ||
370 !safeStrNCmp(file_path, PATH6, sizeof(PATH6)) ||
371 !safeStrNCmp(file_path, PATH7, sizeof(PATH7)) ||
372 !safeStrNCmp(file_path, PATH8, sizeof(PATH8)) ||
373 !safeStrNCmp(file_path, PATH9, sizeof(PATH9)))
379 media_info_get_size(media, &size);
380 //SETTING_TRACE("size : [%lld]", size);
387 * Miscellaneous files is all directories files under /opt/usr/media/ except below default directories:
388 * ++++++++++++++++++++++++++++++++++++++++++++++++
391 * drwxrwxrwx 11 app app 4096 Jan 4 12:42 .
392 * drwxr-xr-x 20 root root 4096 Jan 7 10:09 ..
393 * drwxr-xr-x 2 root root 4096 Jan 4 08:46 .tmp_download
394 * drwxr-xr-x 2 app app 4096 Jan 4 08:47 .video-hub
395 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Camera
396 * drwxrwxrwx 3 app app 4096 Jan 4 08:46 Downloads
397 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Images
398 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Others
399 * drwxrwxrwx 3 app app 4096 Oct 5 2012 Sounds
400 * drwxrwxrwx 2 app app 4096 Oct 5 2012 Videos
401 * drwxrwxrwx 2 app app 16384 Oct 5 2012 lost+found
402 * ++++++++++++++++++++++++++++++++++++++++++++++++
404 static double __setting_storage_main_miscellaneous_size_get()
407 double total_size = 0.0;
409 int ret = MEDIA_CONTENT_ERROR_NONE;
410 filter_h filter = NULL;
413 char *condition = "(MEDIA_TYPE=4) and MEDIA_PATH LIKE \'/opt/usr/media/%%\'";
415 ret = media_filter_create(&filter);
416 if(ret != MEDIA_CONTENT_ERROR_NONE) {
417 SETTING_TRACE_ERROR("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_ERROR("Fail to set condition");
428 ret = media_info_foreach_media_from_db(filter, __setting_storage_main_other_item_cb, &total_size);
429 if(ret != MEDIA_CONTENT_ERROR_NONE) {
430 media_filter_destroy(filter);
431 SETTING_TRACE_ERROR("Fail to get media");
435 ret = media_filter_destroy(filter);
436 if (ret != MEDIA_CONTENT_ERROR_NONE) {
437 SETTING_TRACE_ERROR("destroy filter failed");
444 static void __setting_storage_main_launch_ug_destroy_cb(ui_gadget_h ug, void *priv)
447 /* restore the '<-' button on the navigate bar */
448 retm_if(priv == NULL, "priv is NULL");
449 SettingStorageUG *ad = (SettingStorageUG *) priv;
453 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navibar);
454 retm_if(navi_it == NULL, "navi_it is NULL");
455 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
457 if (back_btn != NULL) {
458 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
461 setting_view_update(&setting_view_storage_main, ad);
464 static void __setting_storage_main_launch_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
467 retm_if(priv == NULL, "priv is NULL");
468 SettingStorageUG *ad = (SettingStorageUG *) priv;
469 Evas_Object *base = NULL;
470 base = (Evas_Object *) ug_get_layout(ug);
471 retm_if(base == NULL, "base is NULL");
474 case UG_MODE_FULLVIEW:
475 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
476 //elm_win_resize_object_add(ad->win_get, base);
477 evas_object_show(base);
485 static void __setting_storage_main_launch_manage_app_ug(void *data)
489 retm_if(data == NULL, "Data parameter is NULL");
491 SettingStorageUG *ad = (SettingStorageUG *) data;
494 if (service_create(&svc)) {
498 service_add_extra_data(svc, "viewtype", "manage-applications");
500 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
502 SETTING_TRACE_ERROR("calloc failed");
503 service_destroy(svc);
506 cbs->layout_cb = __setting_storage_main_launch_ug_layout_cb;
507 cbs->result_cb = NULL;
508 cbs->destroy_cb = __setting_storage_main_launch_ug_destroy_cb;
509 cbs->priv = (void *)ad;
511 ui_gadget_h ug = ug_create(ad->ug, "setting-manage-applications-efl", UG_MODE_FULLVIEW, svc, cbs);
512 if (NULL == ug) { /* error handling */
513 SETTING_TRACE_ERROR("NULL == ug");
517 service_destroy(svc);
521 static void __setting_storage_main_app_launch(char *app_name)
524 setting_retm_if(app_name == NULL, "app_name is NULL");
526 app_launcher(app_name);
529 static void __setting_storage_main_Gendial_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
533 setting_retm_if(data == NULL, "Data parameter is NULL");
534 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
535 elm_genlist_item_selected_set(item, 0);
536 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
538 SettingStorageUG *ad = (SettingStorageUG *) data;
540 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
543 if (!safeStrCmp(SETTING_STORAGE_DEFAULT_STORAGE_STR, list_item->keyStr)) {
544 setting_view_change(&setting_view_storage_main,
545 &setting_view_storage_default_storage, ad);
546 } else if (!safeStrCmp(SETTING_STORAGE_MISCES_STR, list_item->keyStr)) {
547 setting_view_change(&setting_view_storage_main,
548 &setting_view_storage_miscellaneous_files, ad);
553 if (!safeStrCmp("IDS_ST_BODY_APPLICATIONS", list_item->keyStr)) {
554 __setting_storage_main_launch_manage_app_ug(ad);
555 } else if (!safeStrCmp(SETTING_STORAGE_DEFAULT_STORAGE_STR, list_item->keyStr)) {
556 setting_view_change(&setting_view_storage_main,
557 &setting_view_storage_default_storage, ad);
558 } else if (!safeStrCmp(SETTING_STORAGE_PICS_STR, list_item->keyStr)) {
559 __setting_storage_main_app_launch("org.tizen.gallery");
560 } else if (!safeStrCmp(SETTING_STORAGE_AUDIO_STR, list_item->keyStr)) {
561 __setting_storage_main_app_launch("org.tizen.music-player");
562 } else if (!safeStrCmp(SETTING_STORAGE_MISCES_STR, list_item->keyStr)) {
563 setting_view_change(&setting_view_storage_main,
564 &setting_view_storage_miscellaneous_files, ad);
571 static int __setting_storage_main_check_mmc_status()
574 struct stat parent_stat, mount_stat;
576 ret = stat(SETTING_STORAGE_MMC_PATH, &mount_stat);
577 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard");
579 ret = stat(SETTING_STORAGE_MMC_PARENT_PATH, &parent_stat);
580 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard/..");
582 /* Does not mounted, same st_dev */
583 if(mount_stat.st_dev == parent_stat.st_dev) {
585 } else { /* MMC mounted, diff st_dev */
590 static void __setting_storage_main_sd_card_info_get(char* szTotal, char* szAvail)
592 int mmc_status = __setting_storage_main_check_mmc_status();
593 setting_retm_if(mmc_status == -1, "check mmc status failed");
595 /* Does not mounted, same st_dev */
596 if (mmc_status == 0) {
597 snprintf(szTotal, SETTING_STORAGE_MAX_STR_LEN, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
598 snprintf(szAvail, SETTING_STORAGE_MAX_STR_LEN, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
600 /* MMC mounted, diff st_dev */
605 int ret = SETTING_RETURN_SUCCESS;
606 ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_MMC_PATH);
607 setting_retm_if(ret == SETTING_RETURN_FAIL, "get sd card size detail failed");
609 ret = __setting_storage_status_size_transition(dTotal, szTotal);
610 setting_retm_if(ret == SETTING_RETURN_FAIL, "__setting_storage_status_size_transition failed");
612 ret = __setting_storage_status_size_transition(dAvail, szAvail);
613 setting_retm_if(ret == SETTING_RETURN_FAIL, "__setting_storage_status_size_transition failed");
615 SETTING_TRACE("Total[%s], Avail[%s]", szTotal, szAvail);
619 static int __setting_storage_main_mmc_content_init(void *data, setting_storage_mmc_cb cb)
622 setting_retvm_if(NULL == data, SETTING_RETURN_FAIL, "data is NULL");
623 setting_retvm_if(NULL == cb, SETTING_RETURN_FAIL, "cb is NULL");
624 SettingStorageUG *ad = (SettingStorageUG *)data;
625 if (ad->mmc_content == NULL) {
626 ad->mmc_content = (struct mmc_contents *)calloc(1, sizeof(struct mmc_contents));
627 if (ad->mmc_content == NULL ) {
628 SETTING_TRACE_ERROR("calloc failed");
629 return SETTING_RETURN_FAIL;
632 ad->mmc_content->mmc_cb = cb;
633 ad->mmc_content->user_data = ad;
634 return SETTING_RETURN_SUCCESS;
637 #if SUPPORT_SD_CARD_FORMAT
638 static void __setting_storage_status_sd_card_popup_format_response_cb(void *data,
639 Evas_Object *obj, void *event_info)
642 setting_retm_if(data == NULL, "Data parameter is NULL");
643 SettingStorageUG *ad = (SettingStorageUG *)data;
646 evas_object_del(ad->popup);
650 char sd_total[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
651 char sd_available[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
652 __setting_storage_main_sd_card_info_get(sd_total, sd_available);
655 G_FREE(ad->sd_total->sub_desc);
656 ad->sd_total->sub_desc = (char *)g_strdup(sd_total);
657 elm_object_item_data_set(ad->sd_total->item, ad->sd_total);
658 elm_genlist_item_update(ad->sd_total->item);
660 if (ad->sd_available) {
661 G_FREE(ad->sd_available->sub_desc);
662 ad->sd_available->sub_desc = (char *)g_strdup(sd_available);
663 elm_object_item_data_set(ad->sd_available->item, ad->sd_available);
664 elm_genlist_item_update(ad->sd_available->item);
669 static void __setting_storage_status_sd_card_popup_response_cb(void *data,
670 Evas_Object *obj, void *event_info)
673 setting_retm_if(data == NULL, "Data parameter is NULL");
674 SettingStorageUG *ad = (SettingStorageUG *)data;
677 evas_object_del(ad->popup);
682 static void __setting_storage_main_sd_card_mount_cb(int val, void *data)
685 setting_retm_if(data == NULL, "Data parameter is NULL");
686 SettingStorageUG *ad = (SettingStorageUG *) data;
689 evas_object_del(ad->popup);
694 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
696 SETTING_TRACE("mount success");
698 } else if (val == SETTING_STORAGE_SYSMAN_REQUEST_MOUNT_ALREADY) {
699 desc = _(SETTING_STORAGE_SD_CARD_MOUNT_ALREADY_DESC);
701 desc = _("IDS_COM_POP_FAILED");
704 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, desc,
705 __setting_storage_status_sd_card_popup_response_cb,
706 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
709 static void __setting_storage_main_sd_card_unmount_cb(int val, void *data)
712 setting_retm_if(data == NULL, "Data parameter is NULL");
713 SettingStorageUG *ad = (SettingStorageUG *) data;
716 evas_object_del(ad->popup);
720 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
722 SETTING_TRACE("unmount success");
725 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
726 __setting_storage_status_sd_card_popup_response_cb,
727 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
731 static void __setting_storage_main_sd_card_mount_unmount(void *data)
734 setting_retm_if(data == NULL, "Data parameter is NULL");
735 SettingStorageUG *ad = (SettingStorageUG *)data;
737 int mmc_status = __setting_storage_main_check_mmc_status();
738 setting_retm_if(mmc_status == -1, "check mmc status failed");
741 evas_object_del(ad->popup);
745 /* Show progressbar popup */
746 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
747 "pending_list", NULL, NULL,
748 __setting_storage_status_sd_card_popup_response_cb,
749 SETTING_STORAGE_PROGRESSBAR_TIMEOUT, TRUE, TRUE);
752 /* Does not mounted, same st_dev */
753 if (mmc_status == 0) {
754 ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_mount_cb);
755 if (ret == SETTING_RETURN_FAIL) {
756 SETTING_TRACE_ERROR("__setting_storage_main_mmc_content_init fail");
758 evas_object_del(ad->popup);
761 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
762 NULL, _("IDS_COM_POP_FAILED"),
763 __setting_storage_status_sd_card_popup_response_cb,
764 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
767 ret = sysman_request_mount_mmc(ad->mmc_content);
769 SETTING_TRACE_ERROR("fail to call sysman_request_mount_mmc");
772 /* MMC mounted, diff st_dev */
774 ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_unmount_cb);
775 if (ret == SETTING_RETURN_FAIL) {
776 SETTING_TRACE_ERROR("__setting_storage_main_sd_card_unmount_cb fail");
778 evas_object_del(ad->popup);
781 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
782 NULL, _("IDS_COM_POP_FAILED"),
783 __setting_storage_status_sd_card_popup_response_cb,
784 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
788 ret = sysman_request_unmount_mmc(ad->mmc_content,
789 MNT_FORCE); /* 1 = MNT_FORCE */
791 SETTING_TRACE_ERROR("fail to call sysman_request_unmount_mmc");
795 /* if fail, popup failed info */
798 evas_object_del(ad->popup);
801 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
802 NULL, _("IDS_COM_POP_FAILED"),
803 __setting_storage_status_sd_card_popup_response_cb,
804 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
808 #if SUPPORT_SD_CARD_FORMAT
809 static void __setting_storage_main_sd_card_scan_cb(media_content_error_e err, void *data)
812 setting_retm_if(data == NULL, "Data parameter is NULL");
813 SettingStorageUG *ad = (SettingStorageUG *) data;
815 SETTING_TRACE("scan_cb result = %d", err);
818 evas_object_del(ad->popup);
822 if (err == MEDIA_CONTENT_ERROR_NONE) {
823 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_SUCCESS"),
824 __setting_storage_status_sd_card_popup_format_response_cb,
825 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
828 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
829 __setting_storage_status_sd_card_popup_response_cb,
830 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
834 static void __setting_storage_main_sd_card_format_cb(int val, void *data)
837 setting_retm_if(data == NULL, "Data parameter is NULL");
838 SettingStorageUG *ad = (SettingStorageUG *) data;
840 if (val == SETTING_STORAGE_SYSMAN_REQUEST_SUCCESS) {
841 int ret = media_content_scan_folder(SETTING_STORAGE_MMC_PATH, __setting_storage_main_sd_card_scan_cb, ad);
843 if(ret != MEDIA_CONTENT_ERROR_NONE) {
844 SETTING_TRACE_ERROR("Fail to media_content_scan_file : %d", ret);
849 evas_object_del(ad->popup);
852 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
853 __setting_storage_status_sd_card_popup_response_cb,
854 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
858 static void __setting_storage_main_sd_card_format_popup_yes(void *data)
861 setting_retm_if(data == NULL, "Data parameter is NULL");
862 SettingStorageUG *ad = (SettingStorageUG *) data;
865 evas_object_del(ad->popup);
869 /* Show Formatting..... popup */
870 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
871 "pending_list", NULL,
875 int ret = __setting_storage_main_mmc_content_init(ad, __setting_storage_main_sd_card_format_cb);
876 if (ret == SETTING_RETURN_FAIL) {
877 SETTING_TRACE_ERROR("__setting_storage_main_mmc_content_init fail");
879 evas_object_del(ad->popup);
882 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
883 NULL, _("IDS_COM_POP_FAILED"),
884 __setting_storage_status_sd_card_popup_response_cb,
885 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
889 ret = sysman_request_format_mmc(ad->mmc_content);
890 /* if fail, destory popup */
892 SETTING_TRACE_ERROR("fail to call sysman_request_format_mmc");
894 evas_object_del(ad->popup);
897 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
898 NULL, _("IDS_COM_POP_FAILED"),
899 __setting_storage_status_sd_card_popup_response_cb,
900 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
904 static void __setting_storage_main_sd_card_format_popup_no(void *data)
907 setting_retm_if(data == NULL, "Data parameter is NULL");
908 SettingStorageUG *ad = (SettingStorageUG *) data;
911 evas_object_del(ad->popup);
916 static void __setting_storage_main_sd_card_ask_format_resp_cb(void *data, Evas_Object *obj, void *event_info)
919 setting_retm_if(data == NULL, "Data parameter is NULL");
920 int response_type = btn_type(obj);
921 if (POPUP_RESPONSE_OK == response_type) {
922 __setting_storage_main_sd_card_format_popup_yes(data);
923 } else if (POPUP_RESPONSE_CANCEL == response_type) {
924 __setting_storage_main_sd_card_format_popup_no(data);
928 static void __setting_storage_main_sd_card_format_popup_create(void *data)
931 setting_retm_if(data == NULL, "Data parameter is NULL");
932 SettingStorageUG *ad = (SettingStorageUG *) data;
935 evas_object_del(ad->popup);
939 ad->popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
940 _(SETTING_STORAGE_FORMAT_ASK_MSG),
941 __setting_storage_main_sd_card_ask_format_resp_cb, 0,
942 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
946 static void __setting_storage_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
950 setting_retm_if(data == NULL, "Data parameter is NULL");
951 setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
953 SettingStorageUG *ad = (SettingStorageUG *) data;
954 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
955 elm_genlist_item_selected_set(item, 0);
956 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
958 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
961 int ret = vconf_get_int(VCONFKEY_FILEMANAGER_DB_STATUS, &db_status);
962 setting_retm_if(ret != 0, "fail to get vconf");
964 /* if SD card is busy, show popup */
965 if (db_status != VCONFKEY_FILEMANAGER_DB_UPDATED) {
967 evas_object_del(ad->popup);
970 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
971 NULL, _("IDS_ST_BODY_SORRY_YOUR_SD_CARD_IS_BUSY"),
972 __setting_storage_status_sd_card_popup_response_cb,
973 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE);
977 if (list_item == ad->sd_mount) {
978 __setting_storage_main_sd_card_mount_unmount(ad);
980 #if SUPPORT_SD_CARD_FORMAT
981 else if (list_item == ad->sd_format) {
982 __setting_storage_main_sd_card_format_popup_create(ad);
987 static void __setting_storage_main_sd_card_info_append(void* data)
990 setting_retm_if(data == NULL, "Data parameter is NULL");
991 SettingStorageUG *ad = (SettingStorageUG *) data;
993 /* remove the sd info items */
995 elm_object_item_del(ad->sd_mount->item);
999 elm_object_item_del(ad->sd_total->item);
1000 ad->sd_total = NULL;
1002 if (ad->sd_available) {
1003 elm_object_item_del(ad->sd_available->item);
1004 ad->sd_available = NULL;
1006 #if SUPPORT_SD_CARD_FORMAT
1007 if (ad->sd_format) {
1008 elm_object_item_del(ad->sd_format->item);
1009 ad->sd_format = NULL;
1012 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
1013 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
1014 setting_retm_if(ret != 0, "Get vconf failed");
1016 if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED) {
1017 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1018 ad, SWALLOW_Type_INVALID, NULL,
1019 NULL, 0, SETTING_STORAGE_MOUNT_STR,
1020 _(SETTING_STORAGE_INSERT_STR),
1023 setting_disable_genlist_item(ad->sd_mount->item);
1025 } else if (mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
1026 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2),
1027 __setting_storage_main_mouse_up_Gendial_list_cb,
1028 ad, SWALLOW_Type_INVALID, NULL,
1029 NULL, 0, SETTING_STORAGE_MOUNT_STR,
1030 _(SETTING_STORAGE_INSERT_STR),
1032 } else if (mmc_mode == VCONFKEY_SYSMAN_MMC_MOUNTED) {
1033 char sd_total[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
1034 char sd_available[SETTING_STORAGE_MAX_STR_LEN] = { 0, };
1035 __setting_storage_main_sd_card_info_get(sd_total, sd_available);
1037 ad->sd_total = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1038 ad, SWALLOW_Type_INVALID, NULL,
1039 NULL, 0, "IDS_ST_BODY_TOTAL_SPACE",
1043 ad->sd_total->userdata = ad;
1044 elm_genlist_item_select_mode_set(ad->sd_total->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1046 SETTING_TRACE_ERROR("ad->sd_total is NULL");
1049 ad->sd_available = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2), NULL,
1050 ad, SWALLOW_Type_INVALID, NULL,
1051 NULL, 0, "IDS_ST_BODY_AVAILABLE_SPACE",
1054 if (ad->sd_available) {
1055 ad->sd_available->userdata = ad;
1056 elm_genlist_item_select_mode_set(ad->sd_available->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1058 SETTING_TRACE_ERROR("ad->sd_available is NULL");
1061 ad->sd_mount = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1062 __setting_storage_main_mouse_up_Gendial_list_cb,
1063 ad, SWALLOW_Type_INVALID, NULL,
1064 NULL, 0, "IDS_ST_BODY_UNMOUNT_SD_CARD", NULL,
1067 ad->sd_mount->userdata = ad;
1069 SETTING_TRACE_ERROR("ad->sd_mount is NULL");
1072 #if SUPPORT_SD_CARD_FORMAT
1073 ad->sd_format = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1074 __setting_storage_main_mouse_up_Gendial_list_cb,
1075 ad, SWALLOW_Type_INVALID, NULL,
1077 "IDS_ST_BODY_FORMAT_SD_CARD",
1079 if (ad->sd_format) {
1080 ad->sd_format->userdata = ad;
1082 SETTING_TRACE_ERROR("ad->sd_format is NULL");
1086 SETTING_TRACE_ERROR("error status of sd card");
1089 Elm_Object_Item *item = NULL;
1090 item = elm_genlist_item_append(ad->genlist, &itc_bottom_seperator, NULL, NULL,
1091 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1092 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1095 static void __setting_storage_vconf_change_cb(keynode_t *key, void *data)
1097 SETTING_TRACE_BEGIN;
1098 setting_retm_if(NULL == key, "key is NULL");
1099 setting_retm_if(NULL == data, "data is NULL");
1100 SettingStorageUG *ad = (SettingStorageUG *)data;
1101 int status = vconf_keynode_get_int(key);
1102 char *vconf_name = vconf_keynode_get_name(key);
1104 if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
1105 SETTING_TRACE("status:%d", status);
1106 /* remove last item -> seperator */
1107 Elm_Object_Item *last_item = NULL;
1108 last_item = elm_genlist_last_item_get(ad->genlist);
1110 elm_object_item_del(last_item);
1112 __setting_storage_main_sd_card_info_append(ad);
1116 static void __setting_storage_main_genlist_update(Setting_GenGroupItem_Data *data, Setting_Storage_Status status)
1118 //SETTING_TRACE_BEGIN;
1119 setting_retm_if(data == NULL, "Data parameter is NULL");
1120 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
1122 char desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1123 int ret = __setting_storage_status_size_transition(status.dTotal, desc);
1124 setting_retm_if(ret == SETTING_RETURN_FAIL, "failed to transform")
1126 G_FREE(item_data->sub_desc);
1127 item_data->sub_desc = (char *)g_strdup(desc);
1128 elm_object_item_data_set(item_data->item, item_data);
1129 elm_genlist_item_update(item_data->item);
1132 static ail_cb_ret_e __setting_storage_main_appinfo_func_cb(const ail_appinfo_h ail_info, void *data)
1134 Eina_List **apps_list = (Eina_List **) data;
1136 char *pkg_name = NULL;
1137 char *pkg_type = NULL;
1139 ail_appinfo_get_str(ail_info, AIL_PROP_PACKAGE_STR, &pkg_name);
1140 setting_retvm_if(pkg_name == NULL, AIL_CB_RET_CONTINUE, "get pkg_name failed");
1142 ail_appinfo_get_str(ail_info, AIL_PROP_X_SLP_PACKAGETYPE_STR, &pkg_type);
1143 setting_retvm_if(pkg_type == NULL, AIL_CB_RET_CONTINUE, "get pkg_type failed");
1145 App_Info *app_info = (App_Info*)calloc(1, sizeof(App_Info));
1146 setting_retvm_if(app_info == NULL, AIL_CB_RET_CONTINUE, "failed to calloc");
1148 app_info->pkg_name = (char *)g_strdup(pkg_name);
1149 app_info->pkg_type = (char *)g_strdup(pkg_type);
1150 *apps_list = eina_list_append(*apps_list, app_info);
1151 return AIL_CB_RET_CONTINUE;
1154 static void __setting_storage_main_applications_list_get(Eina_List **apps_list)
1156 SETTING_TRACE_BEGIN;
1157 /* get app_info from AIL */
1158 ail_filter_h filter_rpm = NULL;
1159 ail_filter_h filter_wrt = NULL;
1160 ail_filter_h filter_tpk = NULL;
1162 ail_filter_new(&filter_rpm);
1163 ail_filter_new(&filter_wrt);
1164 ail_filter_new(&filter_tpk);
1166 ail_filter_add_str(filter_rpm, AIL_PROP_X_SLP_PACKAGETYPE_STR, RPM_PREFIX);
1167 ail_filter_add_str(filter_wrt, AIL_PROP_X_SLP_PACKAGETYPE_STR, WRT_PREFIX);
1168 ail_filter_add_str(filter_tpk, AIL_PROP_X_SLP_PACKAGETYPE_STR, TPK_PREFIX);
1170 ail_filter_list_appinfo_foreach(filter_rpm, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
1171 ail_filter_list_appinfo_foreach(filter_wrt, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
1172 ail_filter_list_appinfo_foreach(filter_tpk, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
1174 ail_filter_destroy(filter_rpm);
1175 ail_filter_destroy(filter_wrt);
1176 ail_filter_destroy(filter_tpk);
1179 static double __setting_storage_main_applications_status_get(void *data)
1181 SETTING_TRACE_BEGIN;
1182 setting_retvm_if(data == NULL, 0.0, "Data parameter is NULL");
1183 SettingStorageUG *ad = (SettingStorageUG *)data;
1185 Eina_List *apps_list = NULL;
1186 __setting_storage_main_applications_list_get(&apps_list);
1188 SETTING_TRACE("count = %d", eina_list_count(apps_list));
1190 double total_size = 0.0;
1192 Eina_List *l = NULL;
1193 App_Info *app_info = NULL;
1194 EINA_LIST_FOREACH (apps_list, l, app_info)
1197 pthread_mutex_lock(&ad->exit_mutex);
1198 exit_flag = ad->exit_flag;
1199 pthread_mutex_unlock(&ad->exit_mutex);
1201 if (exit_flag == 1) {
1202 SETTING_TRACE("exit_flag is 1");
1206 //SETTING_TRACE("pkg_name: %s ", app_info->pkg_name);
1207 //SETTING_TRACE("pkg_type: %s", app_info->pkg_type);
1208 pkgmgr_info *pkg_info = pkgmgr_info_new(app_info->pkg_type, app_info->pkg_name);
1210 //SETTING_TRACE("pkg_info is null, couldn't get the sizes");
1211 app_info->total_size = 0;
1214 buf = pkgmgr_info_get_string(pkg_info, STR_INSTALLED_SIZE);
1216 //SETTING_TRACE("size : %s", buf);
1217 app_info->total_size = atoi(buf);
1220 app_info->total_size = 0;
1222 pkgmgr_info_free(pkg_info);
1225 total_size += app_info->total_size;
1229 Eina_List *tmp = NULL;
1231 EINA_LIST_FOREACH(apps_list, tmp, app_info)
1233 G_FREE(app_info->pkg_name);
1234 G_FREE(app_info->pkg_type);
1237 eina_list_free(apps_list);
1243 void __setting_storage_main_pipe_cb(void *data, void *buffer, unsigned int nbyte)
1245 SETTING_TRACE_BEGIN;
1246 setting_retm_if(data == NULL, "Data parameter is NULL");
1247 setting_retm_if(buffer == NULL, "buffer parameter is NULL");
1248 SettingStorageUG *ad = (SettingStorageUG *)data;
1250 Update_Info *update_info = (Update_Info *) buffer;
1252 SETTING_TRACE("update_info : %d", update_info->type);
1254 switch (update_info->type) {
1255 case SETTING_STORAGE_APPLICATIONS:
1257 ad->apps_status.dTotal = update_info->total_size;
1258 __setting_storage_main_genlist_update(ad->apps, ad->apps_status);
1261 case SETTING_STORAGE_PICTURES_VIDEO:
1263 ad->pics_videos_status.dTotal = update_info->total_size;
1264 __setting_storage_main_genlist_update(ad->pics_videos, ad->pics_videos_status);
1267 case SETTING_STORAGE_AUDIO:
1269 ad->audio_status.dTotal = update_info->total_size;
1270 __setting_storage_main_genlist_update(ad->audio, ad->audio_status);
1273 case SETTING_STORAGE_MISCELLANEOUS:
1275 ad->others_status.dTotal = update_info->total_size;
1276 __setting_storage_main_genlist_update(ad->others, ad->others_status);
1281 SETTING_TRACE_ERROR("wrong update type");
1285 __setting_storage_main_genlist_update(ad->internal, ad->internal_status);
1290 static void *__setting_storage_main_thread_start_routine(void *data)
1292 SETTING_TRACE("==== sub thread id = %d =====", (int)pthread_self());
1293 SETTING_TRACE_BEGIN;
1294 setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
1295 SettingStorageUG *ad = (SettingStorageUG *)data;
1297 //Ecore_Pipe *pipe = ad->pipe;
1298 update_type type = SETTING_STORAGE_PICTURES_VIDEO;
1300 pthread_mutex_lock(&ad->update_mutex);
1301 while (ad->type == SETTING_STORAGE_SLEEP) {
1302 /* wait to be waked up*/
1303 pthread_cond_wait(&ad->wait_cond, &ad->update_mutex);
1306 pthread_mutex_unlock(&ad->update_mutex);
1308 SETTING_TRACE("thread start to work, update type = %d", type);
1312 pthread_mutex_lock(&ad->exit_mutex);
1313 exit_flag = ad->exit_flag;
1314 pthread_mutex_unlock(&ad->exit_mutex);
1316 if (exit_flag == 1) {
1317 SETTING_TRACE("exit_flag is 1");
1321 if (type >= SETTING_STORAGE_MAX) {
1322 SETTING_TRACE("work is done, thread will sleep");
1323 pthread_mutex_lock(&ad->update_mutex);
1324 ad->type = SETTING_STORAGE_SLEEP;
1325 pthread_mutex_unlock(&ad->update_mutex);
1330 case SETTING_STORAGE_PICTURES_VIDEO:
1332 /* get pictures and videos info */
1333 double pics_videos_size = __setting_storage_main_pictures_videos_status_get();
1334 SETTING_TRACE("pics_videos_size = %f", pics_videos_size);
1336 Update_Info pics_videos_info;
1337 memset(&pics_videos_info, 0, sizeof(Update_Info));
1338 pics_videos_info.type = SETTING_STORAGE_PICTURES_VIDEO;
1339 pics_videos_info.total_size = pics_videos_size;
1341 ecore_pipe_write(ad->pipe, &pics_videos_info, sizeof(pics_videos_info));
1344 case SETTING_STORAGE_AUDIO:
1346 /* get audio info */
1347 double audio_size = __setting_storage_main_audio_status_get();
1348 SETTING_TRACE("audio_size = %f", audio_size);
1350 Update_Info audio_info;
1351 memset(&audio_info, 0, sizeof(Update_Info));
1352 audio_info.type = SETTING_STORAGE_AUDIO;
1353 audio_info.total_size = audio_size;
1355 ecore_pipe_write(ad->pipe, &audio_info, sizeof(audio_info));
1358 case SETTING_STORAGE_MISCELLANEOUS:
1360 /* get miscellaneous files info */
1361 double misc_size = __setting_storage_main_miscellaneous_size_get();
1362 SETTING_TRACE("misc_size = %f", misc_size);
1364 Update_Info misc_info;
1365 memset(&misc_info, 0, sizeof(Update_Info));
1366 misc_info.type = SETTING_STORAGE_MISCELLANEOUS;
1367 misc_info.total_size = misc_size;
1369 ecore_pipe_write(ad->pipe, &misc_info, sizeof(misc_info));
1372 case SETTING_STORAGE_APPLICATIONS:
1375 double apps_size = __setting_storage_main_applications_status_get(ad);
1376 SETTING_TRACE("apps_size = %f", apps_size);
1378 Update_Info apps_info;
1379 memset(&apps_info, 0, sizeof(Update_Info));
1380 apps_info.type = SETTING_STORAGE_APPLICATIONS;
1381 apps_info.total_size = apps_size;
1383 ecore_pipe_write(ad->pipe, &apps_info, sizeof(apps_info));
1388 SETTING_TRACE("type = %d", type);
1393 pthread_mutex_lock(&ad->update_mutex);
1395 SETTING_TRACE("ad->type = %d", ad->type);
1396 pthread_mutex_unlock(&ad->update_mutex);
1399 pthread_exit((void *) 0);
1403 static void __setting_storage_main_init(void *data)
1405 SETTING_TRACE_BEGIN;
1406 setting_retm_if(data == NULL, "Data parameter is NULL");
1407 SettingStorageUG *ad = (SettingStorageUG *)data;
1409 pthread_mutex_init(&ad->exit_mutex, NULL);
1410 pthread_mutex_init(&ad->update_mutex, NULL);
1411 pthread_cond_init(&ad->wait_cond, NULL);
1413 pthread_mutex_lock(&ad->exit_mutex);
1414 ad->exit_flag = EINA_FALSE;
1415 pthread_mutex_unlock(&ad->exit_mutex);
1417 pthread_mutex_lock(&ad->update_mutex);
1418 ad->type = SETTING_STORAGE_PICTURES_VIDEO;
1419 pthread_mutex_unlock(&ad->update_mutex);
1421 ad->internal_status.dAvail = 0.0;
1422 ad->internal_status.dTotal= 0.0;
1424 ad->apps_status.dAvail = 0.0;
1425 ad->apps_status.dTotal= 0.0;
1427 ad->pics_videos_status.dAvail = 0.0;
1428 ad->pics_videos_status.dTotal= 0.0;
1430 ad->audio_status.dAvail = 0.0;
1431 ad->audio_status.dTotal= 0.0;
1433 ad->others_status.dAvail = 0.0;
1434 ad->others_status.dTotal= 0.0;
1437 /* ***************************************************
1441 ***************************************************/
1442 static int setting_storage_main_create(void *cb)
1444 SETTING_TRACE_BEGIN;
1446 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1448 SettingStorageUG *ad = (SettingStorageUG *) cb;
1450 __setting_storage_main_init(ad);
1452 int ret = SETTING_RETURN_SUCCESS;
1454 retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
1455 "win_main_layout is NULL");
1458 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
1461 _("IDS_COM_BODY_BACK"),
1463 __setting_storage_main_click_softkey_back_cb,
1465 ad, &ad->genlist, &ad->navibar);
1467 ad->itc_2text_1icon_4.item_style = "dialogue/2text.1icon.4";
1468 ad->itc_2text_1icon_4.func.text_get = __gl_text_get;
1469 ad->itc_2text_1icon_4.func.content_get = __gl_content_get;
1470 ad->itc_2text_1icon_4.func.state_get = NULL;
1471 ad->itc_2text_1icon_4.func.del = __gl_del;
1473 __setting_storage_main_internal_storage_status_get(ad);
1475 Elm_Object_Item *item = NULL;
1477 bool is_emulator = isEmulBin();
1480 item = elm_genlist_item_append(ad->genlist, &itc_seperator, NULL, NULL,
1481 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1482 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1484 /* Default storage */
1485 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text),
1486 __setting_storage_main_Gendial_mouse_up_cb,
1487 ad, SWALLOW_Type_INVALID, NULL, NULL,
1488 0, SETTING_STORAGE_DEFAULT_STORAGE_STR,
1492 setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
1493 SETTING_STORAGE_INTERNAL_STORAGE_STR,
1497 char total_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1498 ret = __setting_storage_status_size_transition(ad->internal_status.dTotal, total_desc);
1499 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1502 ad->internal = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
1503 setting_retvm_if(!ad->internal, SETTING_RETURN_FAIL, "calloc failed");
1506 ad->internal->userdata = ad;
1507 ad->internal->keyStr = (char *)g_strdup(total_desc);
1508 ad->internal->item = elm_genlist_item_append(ad->genlist, &(ad->itc_2text_1icon_4), ad->internal, NULL,
1509 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1510 elm_genlist_item_select_mode_set(ad->internal->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1512 SETTING_TRACE_ERROR("ad->internal is NULL");
1513 return SETTING_RETURN_FAIL;
1517 ad->apps = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1518 __setting_storage_main_Gendial_mouse_up_cb,
1519 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_APPS_ICON_PATH,
1520 NULL, 0, "IDS_ST_BODY_APPLICATIONS",
1521 _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
1523 ad->apps->userdata = ad;
1525 elm_genlist_item_select_mode_set(ad->apps->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1528 SETTING_TRACE_ERROR("ad->apps is NULL");
1529 return SETTING_RETURN_FAIL;
1532 /* Pictures, Videos */
1533 ad->pics_videos = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1534 __setting_storage_main_Gendial_mouse_up_cb,
1535 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_PICS_ICON_PATH,
1536 NULL, 0, SETTING_STORAGE_PICS_STR,
1537 _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
1538 if (ad->pics_videos) {
1539 ad->pics_videos->userdata = ad;
1541 elm_genlist_item_select_mode_set(ad->pics_videos->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1544 SETTING_TRACE_ERROR("ad->pics_videos is NULL");
1545 return SETTING_RETURN_FAIL;
1549 ad->audio = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1550 __setting_storage_main_Gendial_mouse_up_cb,
1551 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_AUDIO_ICON_PATH,
1552 NULL, 0, SETTING_STORAGE_AUDIO_STR,
1553 _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
1555 ad->audio->userdata = ad;
1558 elm_genlist_item_select_mode_set(ad->audio->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1561 SETTING_TRACE_ERROR("ad->audio is NULL");
1562 return SETTING_RETURN_FAIL;
1565 /* Miscellaneous files */
1566 ad->others = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
1567 __setting_storage_main_Gendial_mouse_up_cb,
1568 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_MISCES_ICON_PATH,
1569 NULL, 0, SETTING_STORAGE_MISCES_STR,
1570 _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
1572 ad->others->userdata = ad;
1574 SETTING_TRACE_ERROR("ad->others is NULL");
1575 return SETTING_RETURN_FAIL;
1579 char avail_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1580 ret = __setting_storage_status_size_transition(ad->internal_status.dAvail, avail_desc);
1581 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1583 ad->avail = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3), NULL,
1584 ad, SWALLOW_Type_INVALID, SETTING_STORAGE_AVAIL_ICON_PATH,
1585 NULL, 0, SETTING_STORAGE_AVAIL_STR,
1588 ad->avail->userdata = ad;
1589 elm_genlist_item_select_mode_set(ad->avail->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1591 SETTING_TRACE_ERROR("ad->avail is NULL");
1592 return SETTING_RETURN_FAIL;
1597 /* Format USB storage */
1598 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text), NULL,
1599 ad, SWALLOW_Type_INVALID, NULL,
1601 SETTING_STORAGE_FORMAT_STR,
1604 setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon), NULL,
1605 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
1606 NULL, NULL, 0, SETTING_STORAGE_FORMAT_DESC_STR, NULL,
1611 setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
1612 "IDS_ST_BODY_SD_CARD", NULL);
1613 __setting_storage_main_sd_card_info_append(ad);
1615 ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
1616 __setting_storage_vconf_change_cb, ad);
1618 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1621 item = elm_genlist_item_append(ad->genlist, &itc_bottom_seperator, NULL, NULL,
1622 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1623 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1626 setting_view_storage_main.is_create = 1;
1629 ecore_pipe_del(ad->pipe);
1632 ad->pipe = ecore_pipe_add(__setting_storage_main_pipe_cb, ad);
1635 ret = pthread_create(&ad->tid, NULL, __setting_storage_main_thread_start_routine, ad);
1637 SETTING_TRACE_ERROR("fail to pthread_create");
1639 SETTING_TRACE("thread id = %d", ad->tid);
1643 SETTING_TRACE_ERROR("fail to ecore_pipe_add");
1646 return SETTING_RETURN_SUCCESS;
1649 static int setting_storage_main_destroy(void *cb)
1652 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1654 SettingStorageUG *ad = (SettingStorageUG *) cb;
1658 pthread_mutex_lock(&ad->exit_mutex);
1660 pthread_mutex_unlock(&ad->exit_mutex);
1662 /* wake up thread */
1663 pthread_mutex_lock(&ad->update_mutex);
1664 ad->type = SETTING_STORAGE_REUPDATE;
1665 pthread_cond_signal(&ad->wait_cond);
1666 pthread_mutex_unlock(&ad->update_mutex);
1670 void *thread_ret = NULL;
1671 ret = pthread_join(ad->tid, &thread_ret);
1673 SETTING_TRACE_ERROR("fail to join with thread");
1675 SETTING_TRACE("thread exit code %d", (int)thread_ret);
1678 pthread_mutex_destroy(&ad->exit_mutex);
1679 pthread_mutex_destroy(&ad->update_mutex);
1680 pthread_cond_destroy(&ad->wait_cond);
1683 ecore_pipe_del(ad->pipe);
1688 ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
1689 __setting_storage_vconf_change_cb);
1691 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1696 evas_object_del(ad->popup);
1700 if (ad->ly_main != NULL) {
1701 evas_object_del(ad->ly_main);
1702 setting_view_storage_main.is_create = 0;
1705 return SETTING_RETURN_SUCCESS;
1708 static int setting_storage_main_update(void *cb)
1710 SETTING_TRACE_BEGIN;
1712 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1713 SettingStorageUG *ad = (SettingStorageUG *) cb;
1717 __setting_storage_main_internal_storage_status_get(ad);
1719 /* update internal total size */
1720 char total_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1721 ret = __setting_storage_status_size_transition(ad->internal_status.dTotal, total_desc);
1722 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1724 G_FREE(ad->internal->keyStr);
1725 ad->internal->keyStr = (char *)g_strdup(total_desc);
1726 elm_object_item_data_set(ad->internal->item, ad->internal);
1727 elm_genlist_item_update(ad->internal->item);
1729 /* update internal available size */
1730 char avail_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
1731 ret = __setting_storage_status_size_transition(ad->internal_status.dAvail, avail_desc);
1732 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
1734 G_FREE(ad->avail->sub_desc);
1735 ad->avail->sub_desc = (char *)g_strdup(avail_desc);
1736 elm_object_item_data_set(ad->avail->item, ad->avail);
1737 elm_genlist_item_update(ad->avail->item);
1739 /* update miscellaneous */
1740 if (ad->back_from_misc) {
1741 double misc_size = __setting_storage_main_miscellaneous_size_get();
1743 ad->others_status.dTotal = misc_size;
1744 __setting_storage_main_genlist_update(ad->others, ad->others_status);
1747 /* wake up thread */
1748 pthread_mutex_lock(&ad->update_mutex);
1749 ad->type = SETTING_STORAGE_REUPDATE;
1750 pthread_cond_signal(&ad->wait_cond);
1751 pthread_mutex_unlock(&ad->update_mutex);
1753 if (ad->ly_main != NULL) {
1754 evas_object_show(ad->ly_main);
1757 return SETTING_RETURN_SUCCESS;
1760 static int setting_storage_main_cleanup(void *cb)
1763 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1765 SettingStorageUG *ad = (SettingStorageUG *) cb;
1767 if (ad->ly_main != NULL) {
1768 evas_object_hide(ad->ly_main);
1771 return SETTING_RETURN_SUCCESS;
1774 /* ***************************************************
1778 ***************************************************/
1780 static void __setting_storage_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1784 ret_if(data == NULL);
1786 SettingStorageUG *ad = (SettingStorageUG *) data;
1787 /* Send destroy request */
1788 ug_destroy_me(ad->ug);