4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
6 * This file is part of org.tizen.setting
7 * Written by Hyejin Kim <hyejin0906.kim@samsung.com>
9 * PROPRIETARY/CONFIDENTIAL
11 * This software is the confidential and proprietary information of
12 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
13 * disclose such Confidential Information and shall use it only in
14 * accordance with the terms of the license agreement you entered
15 * into with SAMSUNG ELECTRONICS.
17 * SAMSUNG make no representations or warranties about the suitability
18 * of the software, either express or implied, including but not limited
19 * to the implied warranties of merchantability, fitness for a particular
20 * purpose, or non-infringement. SAMSUNG shall not be liable for any
21 * damages suffered by licensee as a result of using, modifying or
22 * distributing this software or its derivatives.
25 #include <setting-memory-status.h>
26 #define MAX_STR_LEN_ON_MEMORY_STATUS 32
28 static int setting_memory_status_create(void *cb);
29 static int setting_memory_status_destroy(void *cb);
30 static int setting_memory_status_update(void *cb);
31 static int setting_memory_status_cleanup(void *cb);
33 setting_view setting_view_memory_status = {
34 .create = setting_memory_status_create,
35 .destroy = setting_memory_status_destroy,
36 .update = setting_memory_status_update,
37 .cleanup = setting_memory_status_cleanup,
40 static void __setting_memory_status_vconf_change_cb(
41 keynode_t *key, void *data);
42 static int __setting_memory_status_check_mmc_status();
43 static int __setting_memory_status_mmc_content_init(void *data, setting_memory_mmc_cb cb);
45 static int setting_memory_status_create(void *cb)
49 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
50 Evas_Object *scroller;
51 setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
52 _("IDS_ST_BODY_MEMORY_STATUS"),
53 S_("IDS_COM_BODY_BACK"), NULL,
54 setting_memory_status_click_softkey_back,
55 NULL, ad, &scroller, ad->navi_bar);
57 /* External SD card */
58 setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item),
59 SETTING_MEMORY_STATUS_EX_SD_CARD_DESC,
62 char ex_total_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
63 char ex_available_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
64 char ex_mount_status[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
65 int ex_mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
66 setting_memory_status_ex_sd_card_info(ex_total_space,
68 ex_mount_status, &ex_mmc_status);
71 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
72 ad, SWALLOW_Type_INVALID, NULL,
73 NULL, 0, ex_total_space,
74 SETTING_MEMORY_STATUS_TOTAL_SPACE_DESC,
76 if (ad->data_ex_total) {
77 ad->data_ex_total->userdata = ad;
78 elm_genlist_item_select_mode_set(ad->data_ex_total->item,
79 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
81 SETTING_TRACE_ERROR("ad->data_ex_total is NULL");
84 ad->data_ex_available =
85 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
86 ad, SWALLOW_Type_INVALID, NULL,
87 NULL, 0, ex_available_space,
88 SETTING_MEMORY_STATUS_AVAILABLE_SPACE_DESC,
90 if (ad->data_ex_available) {
91 ad->data_ex_available->userdata = ad;
92 elm_genlist_item_select_mode_set(ad->data_ex_available->item,
93 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
95 SETTING_TRACE_ERROR("ad->data_ex_available is NULL");
101 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
102 setting_memory_status_mouse_up_Gendial_list_cb,
103 ad, SWALLOW_Type_INVALID, NULL,
104 NULL, 0, ex_mount_status, NULL,
106 if (ad->data_ex_mount) {
107 ad->data_ex_mount->userdata = ad;
109 SETTING_TRACE_ERROR("ad->data_ex_mount is NULL");
113 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
114 setting_memory_status_mouse_up_Gendial_list_cb,
115 ad, SWALLOW_Type_INVALID, NULL,
117 SETTING_MEMORY_STATUS_FORMAT_SD_CARD_DESC,
119 if (ad->data_ex_format) {
120 ad->data_ex_format->userdata = ad;
122 SETTING_TRACE_ERROR("ad->data_ex_format is NULL");
125 ad->data_ex_mount = NULL;
126 ad->data_ex_format = NULL;
129 setting_memory_status_list_item_enable_set_by_mmc_status(ad,
133 /* Internal phone storage */
134 setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item),
135 SETTING_MEMORY_STATUS_INTERNAL_PHONE_STORAGE_DESC,
138 char phone_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
139 setting_memory_status_get_phone_storage_available_size(ad,
140 phone_storage_available);
141 ad->data_phone_storage_available =
142 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
143 ad, SWALLOW_Type_INVALID, NULL,
144 NULL, 0, phone_storage_available,
145 SETTING_MEMORY_STATUS_AVAILABLE_SPACE_DESC,
147 if (ad->data_phone_storage_available) {
148 ad->data_phone_storage_available->userdata = ad;
149 elm_genlist_item_select_mode_set(ad->data_phone_storage_available->
150 item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
152 SETTING_TRACE_ERROR("ad->data_phone_storage_available is NULL");
155 int ret = vconf_notify_key_changed(VCONFKEY_USB_STORAGE_STATUS,
156 __setting_memory_status_vconf_change_cb, ad);
158 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
161 ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
162 __setting_memory_status_vconf_change_cb, ad);
164 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
167 setting_view_memory_status.is_create = 1;
168 return SETTING_RETURN_SUCCESS;
171 static int setting_memory_status_destroy(void *cb)
174 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
176 if (ad->progress_bar) {
177 evas_object_del(ad->progress_bar);
178 ad->progress_bar = NULL;
182 evas_object_del(ad->popup);
186 int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
187 __setting_memory_status_vconf_change_cb);
189 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
192 ret = vconf_ignore_key_changed(VCONFKEY_USB_STORAGE_STATUS,
193 __setting_memory_status_vconf_change_cb);
195 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
198 if (ad->mmc_content) {
199 FREE(ad->mmc_content);
202 elm_naviframe_item_pop(ad->navi_bar);
203 setting_view_memory_status.is_create = 0;
208 static int setting_memory_status_update(void *cb)
212 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
214 SETTING_TRACE_ERROR("ad is null.");
216 // update sd card statistic
217 setting_memory_status_ex_sd_card_refresh_card_details_cb(ad, NULL, NULL);
219 // update internal phone storage statistic
220 char phone_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
221 setting_memory_status_get_phone_storage_available_size(ad, phone_storage_available);
222 if ( ad && ad->data_phone_storage_available)
223 setting_memory_status_list_item_data_set(ad->data_phone_storage_available, phone_storage_available);
229 static int setting_memory_status_cleanup(void *cb)
231 return setting_memory_status_destroy(cb);
234 /*******************************************
238 *******************************************/
240 static int __fs_stat(double* pdTotal, double* pdAvail, const char* szPath)
243 setting_retvm_if(NULL == pdTotal || NULL == pdAvail,
244 SETTING_RETURN_FAIL, "Null output parameters");
248 if (!statvfs(szPath, &s)) {
249 SETTING_TRACE("f_bsize = %ld f_blocks = %ld f_bavail = %ld f_frsize = %ld",
250 s.f_bsize, s.f_blocks, s.f_bavail, s.f_frsize);
251 *pdTotal = (double)s.f_frsize * s.f_blocks;
252 *pdAvail = (double)s.f_bsize * s.f_bavail;
254 return SETTING_RETURN_FAIL;
257 return SETTING_RETURN_SUCCESS;
260 /*******************************************
264 *******************************************/
266 static void setting_memory_status_click_softkey_back(void *data,
270 SettingMemoryUG *ad = (SettingMemoryUG *) data;
271 setting_view_change(&setting_view_memory_status,
272 &setting_view_memory_main, ad);
276 setting_memory_status_ex_sd_card_info(char* szTotal, char* szAvail,
277 char* ex_mount_desc, int *ex_mmc_status)
279 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
280 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
281 setting_retm_if(ret != 0, "Get VCONFKEY_SYSMAN_MMC_STATUS failed");
282 *ex_mmc_status = mmc_mode;
283 SETTING_TRACE("mmc_mode = %d", mmc_mode);
285 int mmc_status = __setting_memory_status_check_mmc_status();
286 setting_retm_if(mmc_status == -1, "check mmc status failed");
288 /* Does not mounted, same st_dev */
289 if (mmc_status == 0) {
290 snprintf(szTotal, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
291 "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
292 snprintf(szAvail, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
293 "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
294 snprintf(ex_mount_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
295 "%s", SETTING_MEMORY_STATUS_MOUNT_SD_CARD_DESC);
297 /* MMC mounted, diff st_dev */
299 snprintf(ex_mount_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
300 "%s", SETTING_MEMORY_STATUS_UNMOUNT_SD_CARD_DESC);
302 setting_memory_status_ex_sd_card_detail(szTotal, szAvail);
303 setting_retm_if(ret == SETTING_RETURN_FAIL,
304 "get sd card detail failed");
309 setting_memory_status_ex_sd_card_detail(char* szTotal, char* szAvail)
315 int ret = SETTING_RETURN_SUCCESS;
316 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_MMC_PATH);
317 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
318 "get sd card size detail failed");
320 ret = setting_memory_status_size_transition(dTotal, szTotal);
321 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
322 "setting_memory_status_size_transition failed");
324 ret = setting_memory_status_size_transition(dAvail, szAvail);
325 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
326 "setting_memory_status_size_transition failed");
328 SETTING_TRACE("Total[%s], Avail[%s]", szTotal, szAvail);
329 return SETTING_RETURN_SUCCESS;
333 setting_memory_status_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
337 setting_retm_if(data == NULL, "Data parameter is NULL");
338 setting_retm_if(event_info == NULL,
339 "Invalid argument: event info is NULL");
341 SettingMemoryUG *ad = (SettingMemoryUG *) data;
342 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
343 elm_genlist_item_selected_set(item, 0);
344 Setting_GenGroupItem_Data *list_item =
345 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
347 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
348 if (list_item == ad->data_ex_mount) {
349 setting_memory_status_ex_sd_card_mount_unmount(ad);
350 } else if (list_item == ad->data_ex_format) {
351 setting_memory_status_ex_sd_card_format_promt_popup_create(ad);
356 setting_memory_status_ex_sd_card_format_promt_popup_create(void *data)
359 setting_retm_if(data == NULL, "Data parameter is NULL");
360 SettingMemoryUG *ad = (SettingMemoryUG *) data;
362 ad->curr_popup_cb = setting_memory_status_ex_sd_card_ask_format_resp_cb;
365 evas_object_del(ad->popup);
369 ad->popup = setting_create_popup_with_btn(ad, ad->win_get, _(SETTING_MEMORY_STATUS_FORMAT_ASK_MSG),
370 NULL, ad->curr_popup_cb, 0,
371 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
375 setting_memory_status_ex_sd_card_ask_format_resp_cb(void *data,
380 setting_retm_if(data == NULL, "Data parameter is NULL");
381 int response_type = btn_type(obj);
382 if (POPUP_RESPONSE_OK == response_type) {
383 setting_memory_status_ex_sd_card_format_promt_popup_left_btn_cb
385 } else if (POPUP_RESPONSE_CANCEL == response_type) {
386 setting_memory_status_ex_sd_card_format_promt_popup_right_btn_cb
392 setting_memory_status_ex_sd_card_format_promt_popup_left_btn_cb(void *data,
399 setting_retm_if(data == NULL, "Data parameter is NULL");
400 SettingMemoryUG *ad = (SettingMemoryUG *) data;
403 evas_object_del(ad->popup);
407 /* Show Formatting..... popup */
408 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
410 _("IDS_ST_POP_MSG_FORMATTING"),
412 SETTING_MEMORY_STATUS_PROGRESSBAR_TIMEOUT);
414 int ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_format_cb);
415 if (ret == SETTING_RETURN_FAIL) {
416 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
418 evas_object_del(ad->popup);
421 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
422 _("IDS_COM_POP_FAILED"),
424 SETTING_MEMORY_POPUP_TIMER);
428 ret = sysman_request_format_mmc(ad->mmc_content);
429 /* if fail, destory popup */
431 SETTING_TRACE_ERROR("call sysman_request_format_mmc fail");
433 evas_object_del(ad->popup);
436 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
437 _("IDS_COM_POP_FAILED"),
439 SETTING_MEMORY_POPUP_TIMER);
444 setting_memory_status_ex_sd_card_format_promt_popup_right_btn_cb(void *data,
451 setting_retm_if(data == NULL, "Data parameter is NULL");
452 SettingMemoryUG *ad = (SettingMemoryUG *) data;
455 evas_object_del(ad->popup);
460 static void setting_memory_status_ex_sd_card_mount_unmount(void *data)
463 setting_retm_if(data == NULL, "Data parameter is NULL");
464 SettingMemoryUG *ad = (SettingMemoryUG *)data;
466 int mmc_status = __setting_memory_status_check_mmc_status();
467 setting_retm_if(mmc_status == -1, "check mmc status failed");
470 evas_object_del(ad->popup);
474 /* Show progressbar popup */
475 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
478 SETTING_MEMORY_STATUS_PROGRESSBAR_TIMEOUT);
481 /* Does not mounted, same st_dev */
482 if (mmc_status == 0) {
483 ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_mount_cb);
484 if (ret == SETTING_RETURN_FAIL) {
485 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
487 evas_object_del(ad->popup);
490 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
491 _("IDS_COM_POP_FAILED"),
493 SETTING_MEMORY_POPUP_TIMER);
496 ret = sysman_request_mount_mmc(ad->mmc_content);
498 SETTING_TRACE_ERROR("call sysman_request_mount_mmc fail");
501 /* MMC mounted, diff st_dev */
503 ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_unmount_cb);
504 if (ret == SETTING_RETURN_FAIL) {
505 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
507 evas_object_del(ad->popup);
510 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
511 _("IDS_COM_POP_FAILED"),
513 SETTING_MEMORY_POPUP_TIMER);
517 ret = sysman_request_unmount_mmc(ad->mmc_content,
518 MNT_FORCE); /* 1 = MNT_FORCE */
520 SETTING_TRACE_ERROR("call sysman_request_unmount_mmc fail");
524 /* if fail, popup failed info */
527 evas_object_del(ad->popup);
530 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
531 _("IDS_COM_POP_FAILED"),
533 SETTING_MEMORY_POPUP_TIMER);
538 setting_memory_status_ex_sd_card_refresh_card_details_cb(void *data,
543 setting_retm_if(data == NULL, "Data parameter is NULL");
544 SettingMemoryUG *ad = (SettingMemoryUG *)data;
547 evas_object_del(ad->popup);
551 char ex_total_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
552 char ex_available_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
553 char ex_mount_status[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
554 int ex_mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
555 setting_memory_status_ex_sd_card_info(ex_total_space, ex_available_space,
556 ex_mount_status, &ex_mmc_status);
558 setting_memory_status_list_item_data_set(ad->data_ex_total, ex_total_space);
559 setting_memory_status_list_item_data_set(ad->data_ex_available, ex_available_space);
560 setting_memory_status_list_item_data_set(ad->data_ex_mount, ex_mount_status);
562 setting_memory_status_list_item_enable_set_by_mmc_status(ad, ex_mmc_status);
566 setting_memory_status_ex_sd_card_operate_complete(void *data, char *desc,
570 setting_retm_if(data == NULL, "Data parameter is NULL");
571 SettingMemoryUG *ad = (SettingMemoryUG *) data;
572 setting_memory_hide_popup_with_progress_bar(ad);
575 evas_object_del(ad->popup);
578 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, desc,
580 setting_memory_status_ex_sd_card_refresh_card_details_cb,
581 SETTING_MEMORY_POPUP_TIMER);
586 setting_memory_status_list_item_enable_set_by_mmc_status(void *data,
590 setting_retm_if(data == NULL, "Data parameter is NULL");
591 SettingMemoryUG *ad = (SettingMemoryUG *) data;
593 setting_retm_if(ad->data_ex_mount == NULL, "Data parameter is NULL");
594 setting_retm_if(ad->data_ex_format == NULL, "Data parameter is NULL");
596 Eina_Bool ex_mount_disabled = elm_object_item_disabled_get(ad->data_ex_mount->item);
597 Eina_Bool ex_format_disabled = elm_object_item_disabled_get(ad->data_ex_format->item);
599 if (ex_mmc_status == VCONFKEY_SYSMAN_MMC_REMOVED) {
600 if (ex_mount_disabled == EINA_FALSE) {
601 setting_disable_genlist_item(ad->data_ex_mount->item);
603 if (ex_format_disabled == EINA_FALSE) {
604 setting_disable_genlist_item(ad->data_ex_format->item);
606 } else if (ex_mmc_status == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
607 if (ex_mount_disabled == EINA_TRUE) {
608 setting_enable_genlist_item(ad->data_ex_mount->item);
610 if (ex_format_disabled == EINA_FALSE) {
611 setting_disable_genlist_item(ad->data_ex_format->item);
614 if (ex_mount_disabled == EINA_TRUE) {
615 setting_enable_genlist_item(ad->data_ex_mount->item);
617 if (ex_format_disabled == EINA_TRUE) {
618 setting_enable_genlist_item(ad->data_ex_format->item);
622 int storage_status = VCONFKEY_USB_STORAGE_STATUS_OFF;
623 int ret = vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &storage_status);
624 setting_retm_if(ret != 0, "Get VCONFKEY_USB_STORAGE_STATUS failed");
626 if (storage_status == VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON) {
627 setting_disable_genlist_item(ad->data_ex_mount->item);
628 setting_disable_genlist_item(ad->data_ex_format->item);
632 static void setting_memory_status_list_item_data_set(Setting_GenGroupItem_Data *
633 item_data, char *data)
636 setting_retm_if(item_data == NULL, "Data parameter is NULL");
638 G_FREE(item_data->keyStr);
639 item_data->keyStr = (char *)g_strdup(data);
640 elm_object_item_data_set(item_data->item, item_data);
641 elm_genlist_item_update(item_data->item);
645 setting_memory_status_get_phone_storage_available_size(void *data,
649 setting_retm_if(data == NULL, "Data parameter is NULL");
650 //SettingMemoryUG *ad = (SettingMemoryUG *) data;
654 int ret = SETTING_RETURN_SUCCESS;
655 setting_mem_status internal_mem_stat;
657 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_APP_PATH);
658 setting_retm_if(ret == SETTING_RETURN_FAIL, "get app_mem stat failed");
659 internal_mem_stat.dTotal = dTotal;
660 internal_mem_stat.dAvail = dAvail;
664 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_MEDIA_PATH);
665 setting_retm_if(ret == SETTING_RETURN_FAIL, "get media_mem stat failed");
666 internal_mem_stat.dTotal += dTotal;
667 internal_mem_stat.dAvail += dAvail;
669 ret = setting_memory_status_size_transition(internal_mem_stat.dAvail,
671 setting_retm_if(ret == SETTING_RETURN_FAIL, "setting_memory_status_size_transition fail");
675 setting_memory_status_size_transition(double size, char *size_desc)
679 double tmp_size = 0.0;
681 if (size < SETTING_MEMORY_MEGABYTE_VALUE) { // size < 1MB: show x.xKB
682 tmp_size = size / SETTING_MEMORY_KILOBYTE_VALUE;
683 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "KB");
684 retv_if(ret < 0, SETTING_RETURN_FAIL);
685 } else if (size < SETTING_MEMORY_GIGABYTE_VALUE) { // size < 1GB: show x.xMB
686 tmp_size = size / SETTING_MEMORY_MEGABYTE_VALUE;
687 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "MB");
688 retv_if(ret < 0, SETTING_RETURN_FAIL);
689 } else { // 1G <= size: show x.xGB
690 tmp_size = size / SETTING_MEMORY_GIGABYTE_VALUE;
691 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "GB");
692 retv_if(ret < 0, SETTING_RETURN_FAIL);
695 return SETTING_RETURN_SUCCESS;
698 static void setting_memory_status_ex_sd_card_format_cb(int val, void *data)
701 setting_retm_if(data == NULL, "Data parameter is NULL");
702 if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_SUCCESS) {
703 setting_memory_status_ex_sd_card_operate_complete(data,
704 _("IDS_COM_POP_SUCCESS"),
708 setting_memory_status_ex_sd_card_operate_complete(data,
709 _("IDS_COM_POP_FAILED"),
714 static void setting_memory_status_ex_sd_card_mount_cb(int val, void *data)
717 setting_retm_if(data == NULL, "Data parameter is NULL");
718 if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_SUCCESS) {
719 setting_memory_status_ex_sd_card_operate_complete(data,
720 _("IDS_COM_POP_SUCCESS"),
722 } else if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_MOUNT_ALREADY) {
723 setting_memory_status_ex_sd_card_operate_complete(data,
724 _(SETTING_MEMORY_STATUS_EX_SD_CARD_MOUNT_ALREADY_DESC),
727 setting_memory_status_ex_sd_card_operate_complete(data,
728 _("IDS_COM_POP_FAILED"),
733 static void setting_memory_status_ex_sd_card_unmount_cb(int val, void *data)
736 setting_retm_if(data == NULL, "Data parameter is NULL");
737 if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_SUCCESS) {
738 setting_memory_status_ex_sd_card_operate_complete(data,
739 _("IDS_COM_POP_SUCCESS"),
742 setting_memory_status_ex_sd_card_operate_complete(data,
743 _("IDS_COM_POP_FAILED"),
748 static void __setting_memory_status_vconf_change_cb(
749 keynode_t *key, void *data)
752 setting_retm_if(NULL == key, "key is NULL");
753 setting_retm_if(NULL == data, "data is NULL");
754 SettingMemoryUG *ad = (SettingMemoryUG *)data;
756 int status = vconf_keynode_get_int(key);
757 char *vconf_name = vconf_keynode_get_name(key);
759 if (!safeStrCmp(vconf_name, VCONFKEY_USB_STORAGE_STATUS)) {
760 SETTING_TRACE("status:%d", status);
761 setting_memory_status_ex_sd_card_refresh_card_details_cb(ad,
764 char phone_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
765 setting_memory_status_get_phone_storage_available_size(ad,
766 phone_storage_available);
767 setting_memory_status_list_item_data_set(ad->data_phone_storage_available,
768 phone_storage_available);
769 } else if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
770 SETTING_TRACE("status:%d", status);
771 setting_memory_status_ex_sd_card_refresh_card_details_cb(ad,
775 SETTING_TRACE_ERROR("vconf_name is NULL");
779 static int __setting_memory_status_check_mmc_status()
782 struct stat parent_stat, mount_stat;
784 ret = stat(SETTING_MEMORY_STATUS_MMC_PATH, &mount_stat);
785 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard");
787 ret = stat(SETTING_MEMORY_STATUS_MMC_PARENT_PATH, &parent_stat);
788 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard/..");
790 /* Does not mounted, same st_dev */
791 if (mount_stat.st_dev == parent_stat.st_dev) {
794 /* MMC mounted, diff st_dev */
800 static int __setting_memory_status_mmc_content_init(void *data, setting_memory_mmc_cb cb)
803 setting_retvm_if(NULL == data, SETTING_RETURN_FAIL, "data is NULL");
804 setting_retvm_if(NULL == cb, SETTING_RETURN_FAIL, "cb is NULL");
805 SettingMemoryUG *ad = (SettingMemoryUG *)data;
806 if (ad->mmc_content == NULL) {
807 ad->mmc_content = (struct mmc_contents *)calloc(1, sizeof(struct mmc_contents *));
808 if (ad->mmc_content == NULL ) {
809 SETTING_TRACE_ERROR("calloc failed");
810 return SETTING_RETURN_FAIL;
813 ad->mmc_content->mmc_cb = cb;
814 ad->mmc_content->user_data = ad;
815 return SETTING_RETURN_SUCCESS;