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.
20 #define UG_MODULE_API __attribute__ ((visibility("default")))
23 #include <efl_extension.h>
24 #include <media_content.h>
26 #include "setting-cfg.h"
27 #include "setting-storage-main.h"
28 #include "setting-storage-default.h"
29 #include "setting-storage-miscellaneous.h"
30 #include "setting-storage.h"
33 STORAGEUG_KEYWORD_NONE = 0,
34 STORAGEUG_KEYWORD_MAIN_SYS_MEM,
35 STORAGEUG_KEYWORD_MAIN_APPS,
36 STORAGEUG_KEYWORD_MAIN_PICS,
37 STORAGEUG_KEYWORD_MAIN_AUDIO,
38 STORAGEUG_KEYWORD_MAIN_MISCES,
39 STORAGEUG_KEYWORD_MAIN_AVAIL,
40 STORAGEUG_KEYWORD_MAIN_SD_CARD,
42 STORAGEUG_KEYWORD_DEFAULT = 100,
43 STORAGEUG_KEYWORD_DEFAULT_BT,
44 STORAGEUG_KEYWORD_DEFAULT_WIFI,
45 STORAGEUG_KEYWORD_DEFAULT_NFC,
46 STORAGEUG_KEYWORD_DEFAULT_APP,
53 } storageUg_search_data;
55 static void _storageUg_vconf_change_cb(keynode_t *key, void *data)
58 SettingStorageUG *ad = data;
62 vconf_name = vconf_keynode_get_name(key);
63 if (NULL == vconf_name)
67 elm_genlist_item_update(ad->pie_it);
70 static inline void _storageUg_listen_vconf(SettingStorageUG *storageUG)
73 const char *FONT_SIZE = VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE;
74 const char *FONT_NAME = VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME;
76 ret = vconf_notify_key_changed(FONT_SIZE, _storageUg_vconf_change_cb, storageUG);
77 warn_if(ret < 0, "vconf_notify_key_changed(%s) Fail(%d)", FONT_SIZE, ret);
79 ret = vconf_notify_key_changed(FONT_NAME, _storageUg_vconf_change_cb, storageUG);
80 warn_if(ret < 0, "vconf_notify_key_changed(%s) Fail(%d)", FONT_NAME, ret);
83 static inline void _storageUg_ignore_vconf()
86 const char *FONT_SIZE = VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE;
87 const char *FONT_NAME = VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME;
89 ret = vconf_ignore_key_changed(FONT_SIZE, _storageUg_vconf_change_cb);
90 warn_if(ret < 0, "vconf_ignore_key_changed(%s) Fail(%d)", FONT_SIZE, ret);
92 ret = vconf_ignore_key_changed(FONT_NAME, _storageUg_vconf_change_cb);
93 warn_if(ret < 0, "vconf_ignore_key_changed(%s) Fail(%d)", FONT_NAME, ret);
96 static inline void storageUg_init_itcs(SettingStorageUG *ad)
98 setting_create_Gendial_itc("dialogue/2text.3/expandable", &(ad->itc_2text_3_parent));
99 setting_create_Gendial_itc("dialogue/1text.1icon/expandable2",
100 &(ad->itc_1icon_1text_sub));
101 setting_create_Gendial_itc("dialogue/2text.3", &(ad->itc_2text_2));
102 setting_create_Gendial_itc(SETTING_GENLIST_GROUP_INDEX_STYLE, &(ad->itc_group_item));
103 setting_create_Gendial_itc("2line.top.4", &(ad->itc_2text_1icon_3));
104 setting_create_Gendial_itc("dialogue/1text", &(ad->itc_1text));
105 setting_create_Gendial_itc("1text.1icon.3", &(ad->itc_1text_1icon));
106 setting_create_Gendial_itc("1icon", &(ad->itc_pie));
107 ad->itc_pie.func.content_get = storageUg_main_pie_item_get_icon;
108 ad->itc_pie.func.del = NULL;
109 setting_create_Gendial_itc("1icon/no_padding_line", &(ad->itc_notice));
110 ad->itc_notice.func.content_get = storageUg_default_notice_get_icon;
111 ad->itc_notice.func.del = NULL;
113 setting_create_Gendial_itc(SETTING_GENLIST_2LINE_STYLE, &(ad->itc_color_item));
114 ad->itc_color_item.func.content_get = storageUg_color_item_content_get;
115 ad->itc_color_item.func.del = NULL;
118 static void storageUg_navi_back(void *data, Evas_Object *obj, void *event_info)
120 SettingStorageUG *ad = data;
122 ret_if(NULL == data);
123 ret_if(NULL != ad->del_worker);
124 retm_if(ad->sd_request || ad->usb_request, "sd_request(%d), usb_request(%d)",
125 ad->sd_request, ad->usb_request);
127 elm_naviframe_item_pop(obj);
130 static inline Evas_Object *storageUg_create_navi(Evas_Object *parent,
131 SettingStorageUG *ad)
135 retv_if(NULL == parent, NULL);
137 navi = elm_naviframe_add(parent);
138 elm_naviframe_prev_btn_auto_pushed_set(navi, EINA_FALSE);
140 eext_object_event_callback_add(navi, EEXT_CALLBACK_BACK, storageUg_navi_back, ad);
141 eext_object_event_callback_add(navi, EEXT_CALLBACK_MORE, eext_naviframe_more_cb, ad);
143 evas_object_show(navi);
147 static inline void storageUg_move_view(STORAGEUG_KEYWORD keynum,
148 SettingStorageUG *ad)
150 Setting_GenGroupItem_Data *item_data;
152 retm_if(keynum <= STORAGEUG_KEYWORD_NONE || STORAGEUG_KEYWORD_MAX <= keynum,
153 "keynum(%d) is Invalid", keynum);
156 case STORAGEUG_KEYWORD_MAIN_SYS_MEM:
157 item_data = ad->sys_mem;
159 case STORAGEUG_KEYWORD_MAIN_APPS:
160 item_data = ad->apps;
162 case STORAGEUG_KEYWORD_MAIN_PICS:
163 item_data = ad->pics_videos;
165 case STORAGEUG_KEYWORD_MAIN_AUDIO:
166 item_data = ad->audio;
168 case STORAGEUG_KEYWORD_MAIN_MISCES:
169 item_data = ad->misces;
171 case STORAGEUG_KEYWORD_MAIN_AVAIL:
172 item_data = ad->avail;
174 case STORAGEUG_KEYWORD_MAIN_SD_CARD:
175 item_data = ad->sd_card;
177 case STORAGEUG_KEYWORD_DEFAULT_BT:
178 item_data = ad->data_bt;
180 case STORAGEUG_KEYWORD_DEFAULT_WIFI:
181 item_data = ad->data_wifidirect;
183 case STORAGEUG_KEYWORD_DEFAULT_NFC:
184 item_data = ad->data_nfc;
186 case STORAGEUG_KEYWORD_DEFAULT_APP:
187 item_data = ad->data_installapp;
194 if (item_data && item_data->item) {
195 if (STORAGEUG_KEYWORD_DEFAULT < keynum)
196 elm_genlist_item_expanded_set(item_data->item, TRUE);
198 elm_genlist_item_bring_in(item_data->item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
202 static void *setting_storageUg_on_create(ui_gadget_h ug, enum ug_mode mode,
203 app_control_h service, void *priv)
208 SettingStorageUG *ad = priv;
209 char *search_keyword = NULL;
210 const char *GENLIST_edj = EDJDIR"/setting-genlist.edj";
211 STORAGEUG_KEYWORD keyword_val = STORAGEUG_KEYWORD_NONE;
213 SETTING_TRACE(" -----> [TIME-1] before ");
214 appcore_measure_start();
216 retvm_if(NULL == ug || NULL == priv, NULL, "ug=%p, priv=%p is Invalid", ug, priv);
219 ad->win = ug_get_window();
220 ad->lo_parent = ug_get_parent_layout(ug);
221 if (NULL == ad->lo_parent) {
222 SETTING_TRACE_ERROR("ug_get_parent_layout(ug) Fail");
226 ret = media_content_connect();
227 if (MEDIA_CONTENT_ERROR_NONE != ret) {
228 SETTING_TRACE_ERROR("media_content_connect() Fail(%d)", ret);
232 app_control_get_extra_data(service, "caller", &caller);
233 app_control_get_extra_data(service, "keyword", &search_keyword);
235 elm_theme_extension_add(NULL, GENLIST_edj);
238 _storageUg_listen_vconf(ad);
240 storageUg_main_init(ad);
241 storageUg_default_init(ad);
242 storageUg_misc_init(ad);
244 setting_view_node_table_intialize();
245 setting_view_node_table_register(ad->main_view, NULL);
246 setting_view_node_table_register(ad->default_view, ad->main_view);
247 setting_view_node_table_register(ad->misces_view, ad->main_view);
249 storageUg_init_itcs(ad);
251 ad->lo_main = setting_create_win_layout(ad->win);
252 ad->navi = storageUg_create_navi(ad->lo_main, ad);
253 if (NULL == ad->navi) {
254 SETTING_TRACE_ERROR("calloc() Fail");
257 elm_object_part_content_set(ad->lo_main, "elm.swallow.content", ad->navi);
260 keyword_val = atoi(search_keyword);
262 if (STORAGEUG_KEYWORD_DEFAULT <= keyword_val && keyword_val < STORAGEUG_KEYWORD_MAX)
263 setting_view_create(ad->default_view, ad);
265 setting_view_create(ad->main_view, ad);
268 storageUg_move_view(keyword_val, ad);
271 free(search_keyword);
273 SETTING_TRACE(" -----> [TIME-2] it took %d msec ", appcore_measure_time());
274 appcore_measure_start();
279 static void setting_storageUg_on_destroy(ui_gadget_h ug, app_control_h service,
284 SettingStorageUG *storageUG = priv;
286 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
288 FREE(storageUG->usb_otg_path);
290 _storageUg_ignore_vconf();
292 ret = media_content_disconnect();
293 warn_if(ret != MEDIA_CONTENT_ERROR_NONE, "media_content_disconnect Fail");
295 if (storageUG->main_view->is_create)
296 setting_view_destroy(storageUG->main_view, storageUG);
297 if (storageUG->default_view->is_create)
298 setting_view_destroy(storageUG->default_view, storageUG);
300 if (storageUG->lo_main) {
301 evas_object_del(storageUG->lo_main);
302 storageUG->lo_main = NULL;
306 static void setting_storageUg_on_resume(ui_gadget_h ug, app_control_h service,
310 SettingStorageUG *storageUG = priv;
312 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
314 if (storageUG->main_view->is_create)
315 setting_view_update(storageUG->main_view, storageUG);
321 static void setting_storageUg_on_event(ui_gadget_h ug, enum ug_event event,
322 app_control_h service, void *priv)
325 SettingStorageUG *storageUG = priv;
327 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
330 case UG_EVENT_LOW_MEMORY:
332 case UG_EVENT_LOW_BATTERY:
334 case UG_EVENT_LANG_CHANGE:
336 setting_navi_items_update(storageUG->navi);
338 case UG_EVENT_ROTATE_PORTRAIT:
339 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
340 case UG_EVENT_ROTATE_LANDSCAPE:
341 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
343 if (storageUG->application_desp)
344 elm_genlist_item_update(storageUG->application_desp->item);
347 case UG_EVENT_REGION_CHANGE:
354 static void setting_storageUg_on_key_event(ui_gadget_h ug,
355 enum ug_key_event event, app_control_h service, void *priv)
361 case UG_KEY_EVENT_END:
369 static void setting_storageUg_on_start(ui_gadget_h ug, app_control_h app_control, void *priv)
372 SettingStorageUG *storageUG = priv;
374 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
376 SETTING_TRACE(" -----> [TIME-3] it took %d msec to finish on_Start ", appcore_measure_time());
379 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
381 SettingStorageUG *storageUG;
383 retv_if(NULL == ops, -1);
385 storageUG = calloc(1, sizeof(SettingStorageUG));
386 if (NULL == storageUG) {
387 SETTING_TRACE_ERROR("calloc() Fail");
391 ops->create = setting_storageUg_on_create;
392 ops->start = setting_storageUg_on_start;
394 ops->resume = setting_storageUg_on_resume;
395 ops->destroy = setting_storageUg_on_destroy;
397 ops->event = setting_storageUg_on_event;
398 ops->key_event = setting_storageUg_on_key_event;
399 ops->priv = storageUG;
400 ops->opt = UG_OPT_INDICATOR_ENABLE;
406 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
413 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv,
418 char ug_args[STORAGEUG_MAX_STR_LEN];
419 Setting_Cfg_Node_T *node;
420 Eina_List **pplist = (Eina_List **)priv;
421 const storageUg_search_data search_configs[] = {
422 /* key_name, view_type, keyword, action, data */
423 {STORAGEUG_STR_SYS_MEM, STORAGEUG_KEYWORD_MAIN_SYS_MEM},
424 {STORAGEUG_STR_APPS, STORAGEUG_KEYWORD_MAIN_APPS},
425 {STORAGEUG_STR_PICS, STORAGEUG_KEYWORD_MAIN_PICS},
426 {STORAGEUG_STR_AUDIO, STORAGEUG_KEYWORD_MAIN_AUDIO},
427 {STORAGEUG_STR_MISCES, STORAGEUG_KEYWORD_MAIN_MISCES},
428 {STORAGEUG_STR_AVAIL, STORAGEUG_KEYWORD_MAIN_AVAIL},
429 {STORAGEUG_STR_SD_CARD, STORAGEUG_KEYWORD_MAIN_SD_CARD},
430 {STORAGEUG_STR_DEF_STORAGE, STORAGEUG_KEYWORD_DEFAULT},
431 {STORAGEUG_STR_BT, STORAGEUG_KEYWORD_DEFAULT_BT},
432 {STORAGEUG_STR_WIFI, STORAGEUG_KEYWORD_DEFAULT_WIFI},
433 {STORAGEUG_STR_NFC, STORAGEUG_KEYWORD_DEFAULT_NFC},
434 {STORAGEUG_STR_INSTALLED_APP_B, STORAGEUG_KEYWORD_DEFAULT_APP}
437 retv_if(NULL == priv, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
438 retv_if(NULL == applocale, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
440 *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
442 size = sizeof(search_configs) / sizeof(storageUg_search_data);
444 for (i = 0; i < size; i++) {
445 sprintf(ug_args, "keyword:%d", search_configs[i].keynum);
446 node = setting_plugin_search_item_subindex_add(
447 search_configs[i].key_name,
454 *pplist = eina_list_append(*pplist, node);