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-memory-status.h>
18 #define MAX_STR_LEN_ON_MEMORY_STATUS 32
20 #define MAIN_STORAGE 0
22 static int setting_memory_status_create(void *cb);
23 static int setting_memory_status_destroy(void *cb);
24 static int setting_memory_status_update(void *cb);
25 static int setting_memory_status_cleanup(void *cb);
27 setting_view setting_view_memory_status = {
28 .create = setting_memory_status_create,
29 .destroy = setting_memory_status_destroy,
30 .update = setting_memory_status_update,
31 .cleanup = setting_memory_status_cleanup,
34 static void __setting_memory_status_vconf_change_cb( keynode_t *key, void *data);
35 static int __setting_memory_status_check_mmc_status();
36 static int __setting_memory_status_mmc_content_init(void *data, setting_memory_mmc_cb cb);
38 static void __setting_memory_status_system_storage_available_size_get(char *szAvail)
44 int ret = SETTING_RETURN_SUCCESS;
45 setting_mem_status internal_mem_stat;
47 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_APP_PATH);
48 setting_retm_if(ret == SETTING_RETURN_FAIL, "get app_mem stat failed");
49 internal_mem_stat.dTotal = dTotal;
50 internal_mem_stat.dAvail = dAvail;
52 ret = setting_memory_status_size_transition(internal_mem_stat.dAvail, szAvail);
53 setting_retm_if(ret == SETTING_RETURN_FAIL, "setting_memory_status_size_transition fail");
56 static int setting_memory_status_create(void *cb)
60 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
61 Evas_Object *scroller;
63 /* Evas_Object *user_mem_fr, *phone_mem_fr, *fr_bx1, *fr_bx2; */
64 /* Evas_Object *sp; */
65 /* float tmp_free_size, tmp_total_size; */
66 /* char free_str[MAX_STR_LEN_ON_MEMORY_STATUS] = {0, }; */
67 /* char total_str[MAX_STR_LEN_ON_MEMORY_STATUS] = {0, }; */
68 /* char size_str[MAX_STR_LEN_ON_MEMORY_STATUS*2] = {0, }; */
69 setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
70 _("IDS_ST_BODY_MEMORY_STATUS"),
71 S_("IDS_COM_BODY_BACK"), NULL,
72 setting_memory_status_click_softkey_back,
73 NULL, ad, &scroller, ad->navi_bar);
75 /* External SD card */
76 setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item),
77 SETTING_MEMORY_STATUS_EX_SD_CARD_DESC,
80 char ex_total_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
81 char ex_available_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
82 char ex_mount_status[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = { 0, };
83 int ex_mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
84 setting_memory_status_ex_sd_card_info(ex_total_space,
86 ex_mount_status, &ex_mmc_status);
89 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
90 ad, SWALLOW_Type_INVALID, NULL,
91 NULL, 0, ex_total_space,
92 SETTING_MEMORY_STATUS_TOTAL_SPACE_DESC,
94 if (ad->data_ex_total) {
95 ad->data_ex_total->userdata = ad;
96 elm_genlist_item_select_mode_set(ad->data_ex_total->item,
97 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
99 SETTING_TRACE_ERROR("ad->data_ex_total is NULL");
102 ad->data_ex_available =
103 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
104 ad, SWALLOW_Type_INVALID, NULL,
105 NULL, 0, ex_available_space,
106 SETTING_MEMORY_STATUS_AVAILABLE_SPACE_DESC,
108 if (ad->data_ex_available) {
109 ad->data_ex_available->userdata = ad;
110 elm_genlist_item_select_mode_set(ad->data_ex_available->item,
111 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
113 SETTING_TRACE_ERROR("ad->data_ex_available is NULL");
119 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
120 setting_memory_status_mouse_up_Gendial_list_cb,
121 ad, SWALLOW_Type_INVALID, NULL,
122 NULL, 0, ex_mount_status, NULL,
124 if (ad->data_ex_mount) {
125 ad->data_ex_mount->userdata = ad;
127 SETTING_TRACE_ERROR("ad->data_ex_mount is NULL");
131 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
132 setting_memory_status_mouse_up_Gendial_list_cb,
133 ad, SWALLOW_Type_INVALID, NULL,
135 SETTING_MEMORY_STATUS_FORMAT_SD_CARD_DESC,
137 if (ad->data_ex_format) {
138 ad->data_ex_format->userdata = ad;
140 SETTING_TRACE_ERROR("ad->data_ex_format is NULL");
143 setting_memory_status_list_item_enable_set_by_mmc_status(ad, ex_mmc_status);
147 setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item),
148 SETTING_MEMORY_STATUS_SYSTEM_SPACE_DESC,
150 char system_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
151 __setting_memory_status_system_storage_available_size_get(system_storage_available);
152 ad->data_system_storage_available =
153 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
154 ad, SWALLOW_Type_INVALID, NULL,
155 NULL, 0, system_storage_available,
156 SETTING_MEMORY_STATUS_AVAILABLE_SPACE_DESC,
158 if (ad->data_system_storage_available) {
159 ad->data_system_storage_available->userdata = ad;
160 elm_genlist_item_select_mode_set(ad->data_system_storage_available->
161 item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
163 SETTING_TRACE_ERROR("ad->data_system_storage_available is NULL");
167 /* Internal phone storage */
168 setting_create_Gendial_field_titleItem(scroller, &(ad->itc_group_item),
169 SETTING_MEMORY_STATUS_MAIN_STORAGE_DESC,
172 char phone_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
173 setting_memory_status_get_phone_storage_available_size(ad,
174 phone_storage_available);
175 ad->data_phone_storage_available =
176 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
177 ad, SWALLOW_Type_INVALID, NULL,
178 NULL, 0, phone_storage_available,
179 SETTING_MEMORY_STATUS_AVAILABLE_SPACE_DESC,
181 if (ad->data_phone_storage_available) {
182 ad->data_phone_storage_available->userdata = ad;
183 elm_genlist_item_select_mode_set(ad->data_phone_storage_available->
184 item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
186 SETTING_TRACE_ERROR("ad->data_phone_storage_available is NULL");
190 Elm_Object_Item *item = NULL;
191 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
192 ELM_GENLIST_ITEM_NONE, NULL, NULL);
193 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
195 int ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
196 __setting_memory_status_vconf_change_cb, ad);
198 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
201 setting_view_memory_status.is_create = 1;
202 return SETTING_RETURN_SUCCESS;
205 static int setting_memory_status_destroy(void *cb)
208 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
210 if (ad->progress_bar) {
211 evas_object_del(ad->progress_bar);
212 ad->progress_bar = NULL;
216 evas_object_del(ad->popup);
220 int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
221 __setting_memory_status_vconf_change_cb);
223 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
226 if (ad->mmc_content) {
227 FREE(ad->mmc_content);
230 elm_naviframe_item_pop(ad->navi_bar);
231 setting_view_memory_status.is_create = 0;
236 static int setting_memory_status_update(void *cb)
240 SettingMemoryUG *ad = (SettingMemoryUG *) cb;
242 SETTING_TRACE_ERROR("ad is null.");
244 // update sd card statistic
246 setting_memory_status_ex_sd_card_refresh_card_details_cb(ad, NULL, NULL);
248 // update internal phone storage statistic
249 char phone_storage_available[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0,};
250 setting_memory_status_get_phone_storage_available_size(ad, phone_storage_available);
253 if (ad->data_phone_storage_available)
254 setting_memory_status_list_item_data_set(ad->data_phone_storage_available, phone_storage_available);
260 static int setting_memory_status_cleanup(void *cb)
262 return setting_memory_status_destroy(cb);
265 /*******************************************
269 *******************************************/
271 static int __fs_stat(double* pdTotal, double* pdAvail, const char* szPath)
274 setting_retvm_if(NULL == pdTotal || NULL == pdAvail,
275 SETTING_RETURN_FAIL, "Null output parameters");
279 if (!statvfs(szPath, &s)) {
280 SETTING_TRACE("f_bsize = %ld f_blocks = %ld f_bavail = %ld f_frsize = %ld",
281 s.f_bsize, s.f_blocks, s.f_bavail, s.f_frsize);
282 *pdTotal = (double)s.f_frsize * s.f_blocks;
283 *pdAvail = (double)s.f_bsize * s.f_bavail;
285 return SETTING_RETURN_FAIL;
288 return SETTING_RETURN_SUCCESS;
291 /*******************************************
295 *******************************************/
297 static void setting_memory_status_click_softkey_back(void *data,
301 SettingMemoryUG *ad = (SettingMemoryUG *) data;
302 setting_view_change(&setting_view_memory_status,
303 &setting_view_memory_main, ad);
307 setting_memory_status_ex_sd_card_info(char* szTotal, char* szAvail,
308 char* ex_mount_desc, int *ex_mmc_status)
310 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
311 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
312 setting_retm_if(ret != 0, "Get VCONFKEY_SYSMAN_MMC_STATUS failed");
313 *ex_mmc_status = mmc_mode;
314 SETTING_TRACE("mmc_mode = %d", mmc_mode);
316 int mmc_status = __setting_memory_status_check_mmc_status();
317 setting_retm_if(mmc_status == -1, "check mmc status failed");
319 /* Does not mounted, same st_dev */
320 if (mmc_status == 0) {
321 snprintf(szTotal, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
322 "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
323 snprintf(szAvail, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
324 "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
325 snprintf(ex_mount_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
326 "%s", SETTING_MEMORY_STATUS_MOUNT_SD_CARD_DESC);
328 /* MMC mounted, diff st_dev */
330 snprintf(ex_mount_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN,
331 "%s", SETTING_MEMORY_STATUS_UNMOUNT_SD_CARD_DESC);
333 setting_memory_status_ex_sd_card_detail(szTotal, szAvail);
334 setting_retm_if(ret == SETTING_RETURN_FAIL,
335 "get sd card detail failed");
340 setting_memory_status_ex_sd_card_detail(char* szTotal, char* szAvail)
346 int ret = SETTING_RETURN_SUCCESS;
347 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_MMC_PATH);
348 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
349 "get sd card size detail failed");
351 ret = setting_memory_status_size_transition(dTotal, szTotal);
352 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
353 "setting_memory_status_size_transition failed");
355 ret = setting_memory_status_size_transition(dAvail, szAvail);
356 setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
357 "setting_memory_status_size_transition failed");
359 SETTING_TRACE("Total[%s], Avail[%s]", szTotal, szAvail);
360 return SETTING_RETURN_SUCCESS;
364 setting_memory_status_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
368 setting_retm_if(data == NULL, "Data parameter is NULL");
369 setting_retm_if(event_info == NULL,
370 "Invalid argument: event info is NULL");
372 SettingMemoryUG *ad = (SettingMemoryUG *) data;
373 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
374 elm_genlist_item_selected_set(item, 0);
375 Setting_GenGroupItem_Data *list_item =
376 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
378 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
379 if (list_item == ad->data_ex_mount) {
380 setting_memory_status_ex_sd_card_mount_unmount(ad);
381 } else if (list_item == ad->data_ex_format) {
382 setting_memory_status_ex_sd_card_format_promt_popup_create(ad);
387 setting_memory_status_ex_sd_card_format_promt_popup_create(void *data)
390 setting_retm_if(data == NULL, "Data parameter is NULL");
391 SettingMemoryUG *ad = (SettingMemoryUG *) data;
393 ad->curr_popup_cb = setting_memory_status_ex_sd_card_ask_format_resp_cb;
396 evas_object_del(ad->popup);
400 ad->popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
401 _(SETTING_MEMORY_STATUS_FORMAT_ASK_MSG),
402 ad->curr_popup_cb, 0,
403 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
407 setting_memory_status_ex_sd_card_ask_format_resp_cb(void *data,
412 setting_retm_if(data == NULL, "Data parameter is NULL");
413 int response_type = btn_type(obj);
414 if (POPUP_RESPONSE_OK == response_type) {
415 setting_memory_status_ex_sd_card_format_promt_popup_left_btn_cb
417 } else if (POPUP_RESPONSE_CANCEL == response_type) {
418 setting_memory_status_ex_sd_card_format_promt_popup_right_btn_cb
424 setting_memory_status_ex_sd_card_format_promt_popup_left_btn_cb(void *data,
431 setting_retm_if(data == NULL, "Data parameter is NULL");
432 SettingMemoryUG *ad = (SettingMemoryUG *) data;
435 evas_object_del(ad->popup);
439 /* Show Formatting..... popup */
440 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
442 _("IDS_ST_POP_MSG_FORMATTING"),
444 SETTING_MEMORY_STATUS_PROGRESSBAR_TIMEOUT, TRUE, TRUE);
446 int ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_format_cb);
447 if (ret == SETTING_RETURN_FAIL) {
448 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
450 evas_object_del(ad->popup);
453 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
454 NULL, _("IDS_COM_POP_FAILED"),
456 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
460 ret = sysman_request_format_mmc(ad->mmc_content);
461 /* if fail, destory popup */
463 SETTING_TRACE_ERROR("call sysman_request_format_mmc fail");
465 evas_object_del(ad->popup);
468 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
469 NULL, _("IDS_COM_POP_FAILED"),
471 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
476 setting_memory_status_ex_sd_card_format_promt_popup_right_btn_cb(void *data,
483 setting_retm_if(data == NULL, "Data parameter is NULL");
484 SettingMemoryUG *ad = (SettingMemoryUG *) data;
487 evas_object_del(ad->popup);
492 static void setting_memory_status_ex_sd_card_mount_unmount(void *data)
495 setting_retm_if(data == NULL, "Data parameter is NULL");
496 SettingMemoryUG *ad = (SettingMemoryUG *)data;
498 int mmc_status = __setting_memory_status_check_mmc_status();
499 setting_retm_if(mmc_status == -1, "check mmc status failed");
502 evas_object_del(ad->popup);
506 /* Show progressbar popup */
507 ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
510 SETTING_MEMORY_STATUS_PROGRESSBAR_TIMEOUT, TRUE, TRUE);
513 /* Does not mounted, same st_dev */
514 if (mmc_status == 0) {
515 ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_mount_cb);
516 if (ret == SETTING_RETURN_FAIL) {
517 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
519 evas_object_del(ad->popup);
522 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
523 NULL, _("IDS_COM_POP_FAILED"),
525 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
528 ret = sysman_request_mount_mmc(ad->mmc_content);
530 SETTING_TRACE_ERROR("call sysman_request_mount_mmc fail");
533 /* MMC mounted, diff st_dev */
535 ret = __setting_memory_status_mmc_content_init(ad, setting_memory_status_ex_sd_card_unmount_cb);
536 if (ret == SETTING_RETURN_FAIL) {
537 SETTING_TRACE_ERROR("__setting_memory_status_mmc_content_init fail");
539 evas_object_del(ad->popup);
542 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
543 NULL, _("IDS_COM_POP_FAILED"),
545 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
549 ret = sysman_request_unmount_mmc(ad->mmc_content,
550 MNT_FORCE); /* 1 = MNT_FORCE */
552 SETTING_TRACE_ERROR("call sysman_request_unmount_mmc fail");
556 /* if fail, popup failed info */
559 evas_object_del(ad->popup);
562 ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
563 NULL, _("IDS_COM_POP_FAILED"),
565 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
570 setting_memory_status_ex_sd_card_refresh_card_details_cb(void *data,
575 setting_retm_if(data == NULL, "Data parameter is NULL");
576 SettingMemoryUG *ad = (SettingMemoryUG *)data;
579 evas_object_del(ad->popup);
583 char ex_total_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
584 char ex_available_space[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
585 char ex_mount_status[SETTING_MEMORY_MMC_MAX_MEM_STR_LEN] = {0, };
586 int ex_mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
587 setting_memory_status_ex_sd_card_info(ex_total_space, ex_available_space,
588 ex_mount_status, &ex_mmc_status);
590 setting_memory_status_list_item_data_set(ad->data_ex_total, ex_total_space);
591 setting_memory_status_list_item_data_set(ad->data_ex_available, ex_available_space);
594 setting_memory_status_list_item_data_set(ad->data_ex_mount, ex_mount_status);
596 setting_memory_status_list_item_enable_set_by_mmc_status(ad, ex_mmc_status);
600 setting_memory_status_ex_sd_card_operate_complete(void *data, char *desc,
604 setting_retm_if(data == NULL, "Data parameter is NULL");
605 SettingMemoryUG *ad = (SettingMemoryUG *) data;
606 setting_memory_hide_popup_with_progress_bar(ad);
609 evas_object_del(ad->popup);
612 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, desc,
613 setting_memory_status_ex_sd_card_refresh_card_details_cb,
614 SETTING_MEMORY_POPUP_TIMER, FALSE, FALSE);
619 setting_memory_status_list_item_enable_set_by_mmc_status(void *data,
623 setting_retm_if(data == NULL, "Data parameter is NULL");
624 SettingMemoryUG *ad = (SettingMemoryUG *) data;
626 if (ex_mmc_status == VCONFKEY_SYSMAN_MMC_REMOVED) {
627 setting_disable_genlist_item(ad->data_ex_total->item);
628 setting_disable_genlist_item(ad->data_ex_available->item);
631 setting_disable_genlist_item(ad->data_ex_mount->item);
632 setting_disable_genlist_item(ad->data_ex_format->item);
634 } else if (ex_mmc_status == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
635 setting_disable_genlist_item(ad->data_ex_total->item);
636 setting_disable_genlist_item(ad->data_ex_available->item);
639 setting_enable_genlist_item(ad->data_ex_mount->item);
640 setting_disable_genlist_item(ad->data_ex_format->item);
642 } else if (ex_mmc_status == VCONFKEY_SYSMAN_MMC_MOUNTED){
644 SETTING_TRACE_DEBUG("abnormal status of MMC");
648 static void setting_memory_status_list_item_data_set(Setting_GenGroupItem_Data *
649 item_data, char *data)
652 setting_retm_if(item_data == NULL, "Data parameter is NULL");
654 G_FREE(item_data->keyStr);
655 item_data->keyStr = (char *)g_strdup(data);
656 elm_object_item_data_set(item_data->item, item_data);
657 elm_genlist_item_update(item_data->item);
661 setting_memory_status_get_phone_storage_available_size(void *data,
665 setting_retm_if(data == NULL, "Data parameter is NULL");
666 //SettingMemoryUG *ad = (SettingMemoryUG *) data;
670 int ret = SETTING_RETURN_SUCCESS;
671 setting_mem_status internal_mem_stat;
673 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_APP_PATH);
674 setting_retm_if(ret == SETTING_RETURN_FAIL, "get app_mem stat failed");
675 internal_mem_stat.dTotal = dTotal;
676 internal_mem_stat.dAvail = dAvail;
680 ret = __fs_stat(&dTotal, &dAvail, SETTING_MEMORY_STATUS_MEDIA_PATH);
681 setting_retm_if(ret == SETTING_RETURN_FAIL, "get media_mem stat failed");
682 internal_mem_stat.dTotal += dTotal;
683 internal_mem_stat.dAvail += dAvail;
685 ret = setting_memory_status_size_transition(internal_mem_stat.dAvail,
687 setting_retm_if(ret == SETTING_RETURN_FAIL, "setting_memory_status_size_transition fail");
691 setting_memory_status_size_transition(double size, char *size_desc)
695 double tmp_size = 0.0;
697 if (size < SETTING_MEMORY_MEGABYTE_VALUE) { // size < 1MB: show x.xKB
698 tmp_size = size / SETTING_MEMORY_KILOBYTE_VALUE;
699 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "KB");
700 retv_if(ret < 0, SETTING_RETURN_FAIL);
701 } else if (size < SETTING_MEMORY_GIGABYTE_VALUE) { // size < 1GB: show x.xMB
702 tmp_size = size / SETTING_MEMORY_MEGABYTE_VALUE;
703 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "MB");
704 retv_if(ret < 0, SETTING_RETURN_FAIL);
705 } else { // 1G <= size: show x.xGB
706 tmp_size = size / SETTING_MEMORY_GIGABYTE_VALUE;
707 ret = snprintf(size_desc, SETTING_MEMORY_MMC_MAX_MEM_STR_LEN, "%4.2lf%s", tmp_size, "GB");
708 retv_if(ret < 0, SETTING_RETURN_FAIL);
711 return SETTING_RETURN_SUCCESS;
714 static void setting_memory_status_ex_sd_card_format_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"),
724 setting_memory_status_ex_sd_card_operate_complete(data,
725 _("IDS_COM_POP_FAILED"),
730 static void setting_memory_status_ex_sd_card_mount_cb(int val, void *data)
733 setting_retm_if(data == NULL, "Data parameter is NULL");
734 if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_SUCCESS) {
735 setting_memory_status_ex_sd_card_operate_complete(data,
736 _("IDS_COM_POP_SUCCESS"),
738 } else if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_MOUNT_ALREADY) {
739 setting_memory_status_ex_sd_card_operate_complete(data,
740 _(SETTING_MEMORY_STATUS_EX_SD_CARD_MOUNT_ALREADY_DESC),
743 setting_memory_status_ex_sd_card_operate_complete(data,
744 _("IDS_COM_POP_FAILED"),
749 static void setting_memory_status_ex_sd_card_unmount_cb(int val, void *data)
752 setting_retm_if(data == NULL, "Data parameter is NULL");
753 if (val == SETTING_MEMORY_STATUS_SYSMAN_REQUEST_SUCCESS) {
754 setting_memory_status_ex_sd_card_operate_complete(data,
755 _("IDS_COM_POP_SUCCESS"),
758 setting_memory_status_ex_sd_card_operate_complete(data,
759 _("IDS_COM_POP_FAILED"),
764 static void __setting_memory_status_vconf_change_cb( keynode_t *key, void *data)
767 setting_retm_if(NULL == key, "key is NULL");
768 setting_retm_if(NULL == data, "data is NULL");
769 SettingMemoryUG *ad = (SettingMemoryUG *)data;
771 int status = vconf_keynode_get_int(key);
772 char *vconf_name = vconf_keynode_get_name(key);
774 if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
775 SETTING_TRACE("status:%d", status);
776 setting_memory_status_ex_sd_card_refresh_card_details_cb(ad,
780 SETTING_TRACE_ERROR("vconf_name is NULL");
784 static int __setting_memory_status_check_mmc_status()
787 struct stat parent_stat, mount_stat;
789 ret = stat(SETTING_MEMORY_STATUS_MMC_PATH, &mount_stat);
790 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard");
792 ret = stat(SETTING_MEMORY_STATUS_MMC_PARENT_PATH, &parent_stat);
793 setting_retvm_if(ret != 0, -1, "get stat error : /opt/storage/sdcard/..");
795 /* Does not mounted, same st_dev */
796 if(mount_stat.st_dev == parent_stat.st_dev)
800 /* MMC mounted, diff st_dev */
807 static int __setting_memory_status_mmc_content_init(void *data, setting_memory_mmc_cb cb)
810 setting_retvm_if(NULL == data, SETTING_RETURN_FAIL, "data is NULL");
811 setting_retvm_if(NULL == cb, SETTING_RETURN_FAIL, "cb is NULL");
812 SettingMemoryUG *ad = (SettingMemoryUG *)data;
813 if (ad->mmc_content == NULL) {
814 ad->mmc_content = (struct mmc_contents *)calloc(1, sizeof(struct mmc_contents));
815 if (ad->mmc_content == NULL ) {
816 SETTING_TRACE_ERROR("calloc failed");
817 return SETTING_RETURN_FAIL;
820 ad->mmc_content->mmc_cb = cb;
821 ad->mmc_content->user_data = ad;
822 return SETTING_RETURN_SUCCESS;