4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include <dd-usbhost.h>
21 #include "setting-storage-utils.h"
22 #include "setting-storage-USB.h"
25 STORAGEUG_USB_REQ_NONE,
26 STORAGEUG_USB_REQ_MOUNT,
27 STORAGEUG_USB_REQ_UNMOUNT,
28 STORAGEUG_USB_REQ_UNMOUNT_BEFORE_FORMAT,
29 STORAGEUG_USB_REQ_FORMAT
32 static inline void storageUg_USB_unmount(SettingStorageUG *ad)
35 ret = unmount_usb_storage(ad->usb_otg_path);
38 SETTING_TRACE_ERROR("unmount_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
39 storageUg_fail_popup(ad);
40 ad->usb_request = STORAGEUG_USB_REQ_NONE;
44 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
45 NULL, STORAGEUG_STR_UNMOUNTING, storageUg_popup_del, 0, TRUE, TRUE);
49 static inline void storageUg_USB_mount(SettingStorageUG *ad)
53 ret = mount_usb_storage(ad->usb_otg_path);
56 SETTING_TRACE_ERROR("mount_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
57 storageUg_fail_popup(ad);
58 ad->usb_request = STORAGEUG_USB_REQ_NONE;
62 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
63 NULL, NULL, storageUg_popup_del, 2, TRUE, TRUE);
64 ad->usb_request = STORAGEUG_USB_REQ_MOUNT;
68 static inline int storageUg_USB_format(SettingStorageUG *ad)
72 ret = format_usb_storage(ad->usb_otg_path);
75 SETTING_TRACE_ERROR("format_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
76 storageUg_fail_popup(ad);
77 return SETTING_RETURN_FAIL;
81 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
82 NULL, STORAGEUG_STR_FORMATTING, storageUg_popup_del, 0, TRUE, TRUE);
84 return SETTING_RETURN_SUCCESS;
87 static void storageUg_USB_unmount_resp(void *data, Evas_Object *obj,
91 SettingStorageUG *ad = data;
95 response_type = btn_type(obj);
98 evas_object_del(ad->popup);
102 if (POPUP_RESPONSE_OK == response_type)
104 ad->usb_request = STORAGEUG_USB_REQ_UNMOUNT;
105 storageUg_USB_unmount(ad);
109 static void storageUg_USB_format_se_confirm(void *data, Evas_Object *obj,
113 SettingStorageUG *ad = data;
115 ret_if(data == NULL);
117 response_type = btn_type(obj);
120 evas_object_del(ad->popup);
124 if (POPUP_RESPONSE_OK == response_type)
126 ad->usb_request = STORAGEUG_USB_REQ_UNMOUNT_BEFORE_FORMAT;
127 storageUg_USB_unmount(ad);
131 static void storageUg_USB_format_first_confirm(void *data,
132 Evas_Object *obj, void *event_info)
135 SettingStorageUG *ad = data;
137 ret_if(data == NULL);
139 response_type = btn_type(obj);
142 evas_object_del(ad->popup);
146 if (POPUP_RESPONSE_OK == response_type)
149 evas_object_del(ad->popup);
151 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
152 STORAGEUG_STR_USB_FORMAT_SECOND_Q, storageUg_USB_format_se_confirm, 0,
153 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
158 static void storageUg_main_USB_sel(void *data, Evas_Object *obj, void *event_info)
160 SettingStorageUG *ad = data;
161 Elm_Object_Item *item = event_info;
162 Setting_GenGroupItem_Data *list_item;
164 ret_if(NULL == data);
165 ret_if(NULL == event_info);
167 elm_genlist_item_selected_set(item, 0);
168 list_item = elm_object_item_data_get(item);
170 SETTING_TRACE("clicking item[%s]", list_item->keyStr);
174 evas_object_del(ad->popup);
178 if (list_item == ad->usb_mount)
180 storageUg_USB_mount(ad);
182 else if (list_item == ad->usb_unmount)
184 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
185 STORAGEUG_STR_USB_UNMOUNT_POPUP_MSG, storageUg_USB_unmount_resp, 0,
186 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
189 else if (list_item == ad->usb_format)
191 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
192 STORAGEUG_STR_USB_FORMAT_Q, storageUg_USB_format_first_confirm, 0,
193 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
197 static inline void storageUg_USB_remove_info(SettingStorageUG *ad)
201 elm_object_item_del(ad->usb_card->item);
206 elm_object_item_del(ad->usb_mount->item);
207 ad->usb_mount = NULL;
211 elm_object_item_del(ad->usb_total->item);
212 ad->usb_total = NULL;
214 if (ad->usb_available)
216 elm_object_item_del(ad->usb_available->item);
217 ad->usb_available = NULL;
221 elm_object_item_del(ad->usb_unmount->item);
222 ad->usb_unmount = NULL;
226 elm_object_item_del(ad->usb_format->item);
227 ad->usb_format = NULL;
229 if (ad->usb_sep_item)
231 elm_object_item_del(ad->usb_sep_item);
232 ad->usb_sep_item = NULL;
236 static inline void storageUg_USB_append_mounted_info(SettingStorageUG *ad)
240 char total_str[STORAGEUG_MAX_STR_LEN] = {0};
241 char avail_str[STORAGEUG_MAX_STR_LEN] = {0};
243 storageUg_get_external_storage_status(ad->usb_otg_path, &total, &avail);
244 storageUg_size_to_str(total, total_str, sizeof(total_str));
245 storageUg_size_to_str(avail, avail_str, sizeof(avail_str));
248 ad->usb_total = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_2text_2),
249 NULL, ad, SWALLOW_Type_INVALID, NULL, NULL, 0, STORAGEUG_STR_TOTAL,
253 ad->usb_total->userdata = ad;
254 ad->usb_total->group_style = SETTING_GROUP_STYLE_TOP;
255 elm_genlist_item_select_mode_set(ad->usb_total->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
259 SETTING_TRACE_ERROR("ad->usb_total is NULL");
263 ad->usb_available = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_2text_2),
264 NULL, ad, SWALLOW_Type_INVALID, NULL,NULL, 0, STORAGEUG_STR_AVAIL_SPACE,
266 if (ad->usb_available)
268 ad->usb_available->userdata = ad;
269 ad->usb_available->group_style = SETTING_GROUP_STYLE_CENTER;
270 elm_genlist_item_select_mode_set(ad->usb_available->item,
271 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
275 SETTING_TRACE_ERROR("ad->usb_available is NULL");
279 ad->usb_unmount = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
280 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
281 STORAGEUG_STR_UNMOUNT_USB, NULL, NULL);
284 ad->usb_unmount->userdata = ad;
285 ad->usb_unmount->group_style = SETTING_GROUP_STYLE_CENTER;
289 SETTING_TRACE_ERROR("ad->usb_unmount is NULL");
293 ad->usb_format = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
294 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
295 STORAGEUG_STR_FORMAT_USB, NULL, NULL);
298 ad->usb_format->userdata = ad;
299 ad->usb_format->group_style = SETTING_GROUP_STYLE_BOTTOM;
303 SETTING_TRACE_ERROR("ad->usb_format is NULL");
307 static inline void storageUg_main_append_USB_info(SettingStorageUG *ad)
312 storageUg_USB_remove_info(ad);
314 if (ad->usb_otg_status == SETTING_STORAGE_USB_OTG_REMOVE)
317 /* USB OTG storage */
318 ad->usb_card = setting_create_Gendial_field_titleItem(ad->gl_main,
319 &(ad->itc_group_item), STORAGEUG_STR_USB, NULL);
321 if (SETTING_STORAGE_USB_OTG_MOUNT == ad->usb_otg_status)
323 storageUg_USB_append_mounted_info(ad);
328 ad->usb_mount = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
329 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
330 STORAGEUG_STR_MOUNT_USB, NULL, NULL);
333 ad->usb_mount->userdata = ad;
334 ad->usb_mount->group_style = SETTING_GROUP_STYLE_TOP;
338 SETTING_TRACE_ERROR("ad->usb_mount is NULL");
342 ad->usb_sep_item = storageUg_append_separator(ad->gl_main, ad);
345 static void storageUg_USB_cb(char *type, char *path, int mount, void *data)
348 SettingStorageUG *ad = data;
350 ret_if(NULL == type);
351 ret_if(NULL == path);
352 ret_if(NULL == data);
354 SETTING_TRACE_DEBUG("path:%s type:%s", path, type);
356 FREE(ad->usb_otg_path);
357 ad->usb_otg_path = SAFE_STRDUP(path);
361 evas_object_del(ad->popup);
365 if (!strcmp(type, "storage_remove"))
367 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_REMOVE;
369 else if (!strcmp(type, "storage_mount"))
371 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_MOUNT;
372 if (STORAGEUG_USB_REQ_UNMOUNT == ad->usb_request)
374 SETTING_TRACE_ERROR("unmount_usb_storage() Fail");
375 storageUg_fail_popup(ad);
378 else if (!strcmp(type, "storage_unmount"))
380 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_UNMOUNT;
381 if (STORAGEUG_USB_REQ_UNMOUNT_BEFORE_FORMAT == ad->usb_request)
383 ret = storageUg_USB_format(ad);
384 if (SETTING_RETURN_SUCCESS == ret)
386 ad->usb_request = STORAGEUG_USB_REQ_FORMAT;
390 ad->usb_request = STORAGEUG_USB_REQ_NONE;
391 storageUg_USB_mount(ad);
395 else if (STORAGEUG_USB_REQ_FORMAT == ad->usb_request)
397 SETTING_TRACE_ERROR("format_usb_storage() Fail");
398 storageUg_fail_popup(ad);
400 else if (STORAGEUG_USB_REQ_MOUNT == ad->usb_request)
402 SETTING_TRACE_ERROR("mount_usb_storage() Fail");
403 storageUg_fail_popup(ad);
406 else if (!strcmp(type, "storage_updated"))
409 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_UNMOUNT;
411 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_MOUNT;
413 ad->usb_request = STORAGEUG_USB_REQ_NONE;
414 storageUg_main_append_USB_info(ad);
417 void storageUg_init_USB(SettingStorageUG *ad)
421 ret = init_usbhost_signal();
422 retm_if(ret < 0, "init_usbhost_signal() Fail(%d)", ret);
424 ret = register_usb_storage_change_handler(storageUg_USB_cb, ad);
427 SETTING_TRACE_ERROR("register_usb_storage_change_handler() Fail(%d)", ret);
428 deinit_usbhost_signal();
432 ret = request_usb_storage_info();
433 warn_if(ret < 0, "request_usb_storage_info() Fail(%d)", ret);
436 void storageUg_deinit_USB()
438 deinit_usbhost_signal();