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_assist.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("groupindex", &(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("2line.top", &(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 ea_object_event_callback_add(navi, EA_CALLBACK_BACK, storageUg_navi_back, ad);
141 //ea_object_event_callback_add(navi, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
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);
157 case STORAGEUG_KEYWORD_MAIN_SYS_MEM:
158 item_data = ad->sys_mem;
160 case STORAGEUG_KEYWORD_MAIN_APPS:
161 item_data = ad->apps;
163 case STORAGEUG_KEYWORD_MAIN_PICS:
164 item_data = ad->pics_videos;
166 case STORAGEUG_KEYWORD_MAIN_AUDIO:
167 item_data = ad->audio;
169 case STORAGEUG_KEYWORD_MAIN_MISCES:
170 item_data = ad->misces;
172 case STORAGEUG_KEYWORD_MAIN_AVAIL:
173 item_data = ad->avail;
175 case STORAGEUG_KEYWORD_MAIN_SD_CARD:
176 item_data = ad->sd_card;
178 case STORAGEUG_KEYWORD_DEFAULT_BT:
179 item_data = ad->data_bt;
181 case STORAGEUG_KEYWORD_DEFAULT_WIFI:
182 item_data = ad->data_wifidirect;
184 case STORAGEUG_KEYWORD_DEFAULT_NFC:
185 item_data = ad->data_nfc;
187 case STORAGEUG_KEYWORD_DEFAULT_APP:
188 item_data = ad->data_installapp;
195 if (item_data && item_data->item)
197 if(STORAGEUG_KEYWORD_DEFAULT < keynum)
198 elm_genlist_item_expanded_set(item_data->item, TRUE);
200 elm_genlist_item_bring_in(item_data->item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
204 static void *setting_storageUg_on_create(ui_gadget_h ug, enum ug_mode mode,
205 app_control_h service, void *priv)
209 SettingStorageUG *ad = priv;
210 char* search_keyword = NULL;
211 const char *GENLIST_edj = EDJDIR"/setting-genlist.edj";
212 STORAGEUG_KEYWORD keyword_val = STORAGEUG_KEYWORD_NONE;
214 retvm_if(NULL == ug || NULL == priv, NULL, "ug=%p, priv=%p is Invalid", ug, priv);
217 ad->win = ug_get_window();
218 ad->lo_parent = ug_get_parent_layout(ug);
219 if (NULL == ad->lo_parent)
221 SETTING_TRACE_ERROR("ug_get_parent_layout(ug) Fail");
225 ret = media_content_connect();
226 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->lo_parent, ad->win);
252 ad->navi = storageUg_create_navi(ad->lo_main, ad);
253 if (NULL == ad->navi)
255 SETTING_TRACE_ERROR("calloc() Fail");
258 elm_object_part_content_set(ad->lo_main, "elm.swallow.content", ad->navi);
261 keyword_val = atoi(search_keyword);
263 if(STORAGEUG_KEYWORD_DEFAULT <= keyword_val && keyword_val < STORAGEUG_KEYWORD_MAX)
264 setting_view_create(ad->default_view, ad);
266 setting_view_create(ad->main_view, ad);
269 storageUg_move_view(keyword_val, ad);
272 free(search_keyword);
277 static void setting_storageUg_on_destroy(ui_gadget_h ug, app_control_h service,
281 SettingStorageUG *storageUG = priv;
283 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
285 FREE(storageUG->usb_otg_path);
287 _storageUg_ignore_vconf();
289 ret = media_content_disconnect();
290 warn_if(ret != MEDIA_CONTENT_ERROR_NONE, "media_content_disconnect Fail");
292 if (storageUG->main_view->is_create)
293 setting_view_destroy(storageUG->main_view, storageUG);
294 if (storageUG->default_view->is_create)
295 setting_view_destroy(storageUG->default_view, storageUG);
297 if (storageUG->lo_main)
299 evas_object_del(storageUG->lo_main);
300 storageUG->lo_main = NULL;
304 static void setting_storageUg_on_resume(ui_gadget_h ug, app_control_h service,
307 SettingStorageUG *storageUG = priv;
309 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
311 if (storageUG->main_view->is_create)
312 setting_view_update(storageUG->main_view, storageUG);
316 static void setting_storageUg_on_event(ui_gadget_h ug, enum ug_event event,
317 app_control_h service, void *priv)
319 SettingStorageUG *storageUG = priv;
321 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
325 case UG_EVENT_LOW_MEMORY:
327 case UG_EVENT_LOW_BATTERY:
329 case UG_EVENT_LANG_CHANGE:
331 setting_navi_items_update(storageUG->navi);
333 case UG_EVENT_ROTATE_PORTRAIT:
334 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
335 case UG_EVENT_ROTATE_LANDSCAPE:
336 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
338 if (storageUG->application_desp)
339 elm_genlist_item_update(storageUG->application_desp->item);
342 case UG_EVENT_REGION_CHANGE:
349 static void setting_storageUg_on_key_event(ui_gadget_h ug,
350 enum ug_key_event event, app_control_h service, void *priv)
356 case UG_KEY_EVENT_END:
364 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
366 SettingStorageUG *storageUG;
368 retv_if(NULL == ops, -1);
370 storageUG = calloc(1, sizeof(SettingStorageUG));
371 if (NULL == storageUG)
373 SETTING_TRACE_ERROR("calloc() Fail");
377 ops->create = setting_storageUg_on_create;
380 ops->resume = setting_storageUg_on_resume;
381 ops->destroy = setting_storageUg_on_destroy;
383 ops->event = setting_storageUg_on_event;
384 ops->key_event = setting_storageUg_on_key_event;
385 ops->priv = storageUG;
386 ops->opt = UG_OPT_INDICATOR_ENABLE;
392 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
399 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv,
404 char ug_args[STORAGEUG_MAX_STR_LEN];
405 Setting_Cfg_Node_T *node;
406 Eina_List **pplist = (Eina_List**)priv;
407 const storageUg_search_data search_configs[] = {
408 /* key_name, view_type, keyword, action, data */
409 {STORAGEUG_STR_SYS_MEM, STORAGEUG_KEYWORD_MAIN_SYS_MEM},
410 {STORAGEUG_STR_APPS, STORAGEUG_KEYWORD_MAIN_APPS},
411 {STORAGEUG_STR_PICS, STORAGEUG_KEYWORD_MAIN_PICS},
412 {STORAGEUG_STR_AUDIO, STORAGEUG_KEYWORD_MAIN_AUDIO},
413 {STORAGEUG_STR_MISCES, STORAGEUG_KEYWORD_MAIN_MISCES},
414 {STORAGEUG_STR_AVAIL, STORAGEUG_KEYWORD_MAIN_AVAIL},
415 {STORAGEUG_STR_SD_CARD, STORAGEUG_KEYWORD_MAIN_SD_CARD},
416 {STORAGEUG_STR_DEF_STORAGE, STORAGEUG_KEYWORD_DEFAULT},
417 {STORAGEUG_STR_BT, STORAGEUG_KEYWORD_DEFAULT_BT},
418 {STORAGEUG_STR_WIFI, STORAGEUG_KEYWORD_DEFAULT_WIFI},
419 {STORAGEUG_STR_NFC, STORAGEUG_KEYWORD_DEFAULT_NFC},
420 {STORAGEUG_STR_INSTALLED_APP_B, STORAGEUG_KEYWORD_DEFAULT_APP}
423 retv_if(NULL == priv, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
424 retv_if(NULL == applocale, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
426 *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
428 size = sizeof(search_configs)/sizeof(storageUg_search_data);
432 sprintf(ug_args, "keyword:%d", search_configs[i].keynum);
433 node = setting_plugin_search_item_subindex_add(
434 search_configs[i].key_name,
441 *pplist = eina_list_append(*pplist, node);