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);
37 SETTING_TRACE_ERROR("unmount_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
38 storageUg_fail_popup(ad);
39 ad->usb_request = STORAGEUG_USB_REQ_NONE;
41 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
42 NULL, STORAGEUG_STR_UNMOUNTING, storageUg_popup_del, 0, TRUE, TRUE);
46 static inline void storageUg_USB_mount(SettingStorageUG *ad)
50 ret = mount_usb_storage(ad->usb_otg_path);
52 SETTING_TRACE_ERROR("mount_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
53 storageUg_fail_popup(ad);
54 ad->usb_request = STORAGEUG_USB_REQ_NONE;
56 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
57 NULL, NULL, storageUg_popup_del, 2, TRUE, TRUE);
58 ad->usb_request = STORAGEUG_USB_REQ_MOUNT;
62 static inline int storageUg_USB_format(SettingStorageUG *ad)
66 ret = format_usb_storage(ad->usb_otg_path);
68 SETTING_TRACE_ERROR("format_usb_storage(%s) Fail(%d)", ad->usb_otg_path, ret);
69 storageUg_fail_popup(ad);
70 return SETTING_RETURN_FAIL;
72 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
73 NULL, STORAGEUG_STR_FORMATTING, storageUg_popup_del, 0, TRUE, TRUE);
75 return SETTING_RETURN_SUCCESS;
78 static void storageUg_USB_unmount_resp(void *data, Evas_Object *obj,
82 SettingStorageUG *ad = data;
86 response_type = btn_type(obj);
88 evas_object_del(ad->popup);
92 if (POPUP_RESPONSE_OK == response_type) {
93 ad->usb_request = STORAGEUG_USB_REQ_UNMOUNT;
94 storageUg_USB_unmount(ad);
98 static void storageUg_USB_format_se_confirm(void *data, Evas_Object *obj,
102 SettingStorageUG *ad = data;
104 ret_if(data == NULL);
106 response_type = btn_type(obj);
108 evas_object_del(ad->popup);
112 if (POPUP_RESPONSE_OK == response_type) {
113 ad->usb_request = STORAGEUG_USB_REQ_UNMOUNT_BEFORE_FORMAT;
114 storageUg_USB_unmount(ad);
118 static void storageUg_USB_format_first_confirm(void *data,
119 Evas_Object *obj, void *event_info)
122 SettingStorageUG *ad = data;
124 ret_if(data == NULL);
126 response_type = btn_type(obj);
128 evas_object_del(ad->popup);
132 if (POPUP_RESPONSE_OK == response_type) {
134 evas_object_del(ad->popup);
136 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
137 STORAGEUG_STR_USB_FORMAT_SECOND_Q, storageUg_USB_format_se_confirm, 0,
138 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
143 static void storageUg_main_USB_sel(void *data, Evas_Object *obj, void *event_info)
145 SettingStorageUG *ad = data;
146 Elm_Object_Item *item = event_info;
147 Setting_GenGroupItem_Data *list_item;
149 ret_if(NULL == data);
150 ret_if(NULL == event_info);
152 elm_genlist_item_selected_set(item, 0);
153 list_item = elm_object_item_data_get(item);
155 SETTING_TRACE("clicking item[%s]", list_item->keyStr);
158 evas_object_del(ad->popup);
162 if (list_item == ad->usb_mount) {
163 storageUg_USB_mount(ad);
164 } else if (list_item == ad->usb_unmount) {
165 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
166 STORAGEUG_STR_USB_UNMOUNT_POPUP_MSG, storageUg_USB_unmount_resp, 0,
167 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
169 } else if (list_item == ad->usb_format) {
170 ad->popup = setting_create_popup_with_btn(ad, ad->win, NULL,
171 STORAGEUG_STR_USB_FORMAT_Q, storageUg_USB_format_first_confirm, 0,
172 2, STORAGEUG_STR_OK, STORAGEUG_STR_CANCEL);
176 static inline void storageUg_USB_remove_info(SettingStorageUG *ad)
179 elm_object_item_del(ad->usb_card->item);
183 elm_object_item_del(ad->usb_mount->item);
184 ad->usb_mount = NULL;
187 elm_object_item_del(ad->usb_total->item);
188 ad->usb_total = NULL;
190 if (ad->usb_available) {
191 elm_object_item_del(ad->usb_available->item);
192 ad->usb_available = NULL;
194 if (ad->usb_unmount) {
195 elm_object_item_del(ad->usb_unmount->item);
196 ad->usb_unmount = NULL;
198 if (ad->usb_format) {
199 elm_object_item_del(ad->usb_format->item);
200 ad->usb_format = NULL;
202 if (ad->usb_sep_item) {
203 elm_object_item_del(ad->usb_sep_item);
204 ad->usb_sep_item = NULL;
208 static inline void storageUg_USB_append_mounted_info(SettingStorageUG *ad)
212 char total_str[STORAGEUG_MAX_STR_LEN] = {0};
213 char avail_str[STORAGEUG_MAX_STR_LEN] = {0};
215 storageUg_get_external_storage_status(ad->usb_otg_path, &total, &avail);
216 storageUg_size_to_str(total, total_str, sizeof(total_str));
217 storageUg_size_to_str(avail, avail_str, sizeof(avail_str));
220 ad->usb_total = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_2text_2),
221 NULL, ad, SWALLOW_Type_INVALID, NULL, NULL, 0, STORAGEUG_STR_TOTAL,
224 ad->usb_total->userdata = ad;
225 ad->usb_total->group_style = SETTING_GROUP_STYLE_TOP;
226 elm_genlist_item_select_mode_set(ad->usb_total->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
228 SETTING_TRACE_ERROR("ad->usb_total is NULL");
232 ad->usb_available = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_2text_2),
233 NULL, ad, SWALLOW_Type_INVALID, NULL, NULL, 0, STORAGEUG_STR_AVAIL_SPACE,
235 if (ad->usb_available) {
236 ad->usb_available->userdata = ad;
237 ad->usb_available->group_style = SETTING_GROUP_STYLE_CENTER;
238 elm_genlist_item_select_mode_set(ad->usb_available->item,
239 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
241 SETTING_TRACE_ERROR("ad->usb_available is NULL");
245 ad->usb_unmount = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
246 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
247 STORAGEUG_STR_UNMOUNT_USB, NULL, NULL);
248 if (ad->usb_unmount) {
249 ad->usb_unmount->userdata = ad;
250 ad->usb_unmount->group_style = SETTING_GROUP_STYLE_CENTER;
252 SETTING_TRACE_ERROR("ad->usb_unmount is NULL");
256 ad->usb_format = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
257 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
258 STORAGEUG_STR_FORMAT_USB, NULL, NULL);
259 if (ad->usb_format) {
260 ad->usb_format->userdata = ad;
261 ad->usb_format->group_style = SETTING_GROUP_STYLE_BOTTOM;
263 SETTING_TRACE_ERROR("ad->usb_format is NULL");
267 static inline void storageUg_main_append_USB_info(SettingStorageUG *ad)
272 storageUg_USB_remove_info(ad);
274 if (ad->usb_otg_status == SETTING_STORAGE_USB_OTG_REMOVE)
277 /* USB OTG storage */
278 ad->usb_card = setting_create_Gendial_field_titleItem(ad->gl_main,
279 &(ad->itc_group_item), STORAGEUG_STR_USB, NULL);
281 if (SETTING_STORAGE_USB_OTG_MOUNT == ad->usb_otg_status) {
282 storageUg_USB_append_mounted_info(ad);
285 ad->usb_mount = setting_create_Gendial_field_def(ad->gl_main, &(ad->itc_1text),
286 storageUg_main_USB_sel, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
287 STORAGEUG_STR_MOUNT_USB, NULL, NULL);
289 ad->usb_mount->userdata = ad;
290 ad->usb_mount->group_style = SETTING_GROUP_STYLE_TOP;
292 SETTING_TRACE_ERROR("ad->usb_mount is NULL");
296 ad->usb_sep_item = storageUg_append_separator(ad->gl_main, ad);
299 static void storageUg_USB_cb(char *type, char *path, int mount, void *data)
302 SettingStorageUG *ad = data;
304 ret_if(NULL == type);
305 ret_if(NULL == path);
306 ret_if(NULL == data);
308 SETTING_TRACE_DEBUG("path:%s type:%s", path, type);
310 FREE(ad->usb_otg_path);
311 ad->usb_otg_path = SAFE_STRDUP(path);
314 evas_object_del(ad->popup);
318 if (!strcmp(type, "storage_remove")) {
319 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_REMOVE;
320 } else if (!strcmp(type, "storage_mount")) {
321 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_MOUNT;
322 if (STORAGEUG_USB_REQ_UNMOUNT == ad->usb_request) {
323 SETTING_TRACE_ERROR("unmount_usb_storage() Fail");
324 storageUg_fail_popup(ad);
326 } else if (!strcmp(type, "storage_unmount")) {
327 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_UNMOUNT;
328 if (STORAGEUG_USB_REQ_UNMOUNT_BEFORE_FORMAT == ad->usb_request) {
329 ret = storageUg_USB_format(ad);
330 if (SETTING_RETURN_SUCCESS == ret) {
331 ad->usb_request = STORAGEUG_USB_REQ_FORMAT;
333 ad->usb_request = STORAGEUG_USB_REQ_NONE;
334 storageUg_USB_mount(ad);
337 } else if (STORAGEUG_USB_REQ_FORMAT == ad->usb_request) {
338 SETTING_TRACE_ERROR("format_usb_storage() Fail");
339 storageUg_fail_popup(ad);
340 } else if (STORAGEUG_USB_REQ_MOUNT == ad->usb_request) {
341 SETTING_TRACE_ERROR("mount_usb_storage() Fail");
342 storageUg_fail_popup(ad);
344 } else if (!strcmp(type, "storage_updated")) {
346 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_UNMOUNT;
348 ad->usb_otg_status = SETTING_STORAGE_USB_OTG_MOUNT;
350 ad->usb_request = STORAGEUG_USB_REQ_NONE;
351 storageUg_main_append_USB_info(ad);
354 void storageUg_init_USB(SettingStorageUG *ad)
358 ret = init_usbhost_signal();
359 retm_if(ret < 0, "init_usbhost_signal() Fail(%d)", ret);
361 ret = register_usb_storage_change_handler(storageUg_USB_cb, ad);
363 SETTING_TRACE_ERROR("register_usb_storage_change_handler() Fail(%d)", ret);
364 deinit_usbhost_signal();
368 ret = request_usb_storage_info();
369 warn_if(ret < 0, "request_usb_storage_info() Fail(%d)", ret);
372 void storageUg_deinit_USB()
374 deinit_usbhost_signal();