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);
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)
207 SettingStorageUG *ad = priv;
208 char *search_keyword = NULL;
209 const char *GENLIST_edj = EDJDIR"/setting-genlist.edj";
210 STORAGEUG_KEYWORD keyword_val = STORAGEUG_KEYWORD_NONE;
212 retvm_if(NULL == ug || NULL == priv, NULL, "ug=%p, priv=%p is Invalid", ug, priv);
215 ad->win = ug_get_window();
216 ad->lo_parent = ug_get_parent_layout(ug);
217 if (NULL == ad->lo_parent) {
218 SETTING_TRACE_ERROR("ug_get_parent_layout(ug) Fail");
222 ret = media_content_connect();
223 if (MEDIA_CONTENT_ERROR_NONE != ret) {
224 SETTING_TRACE_ERROR("media_content_connect() Fail(%d)", ret);
228 app_control_get_extra_data(service, "caller", &caller);
229 app_control_get_extra_data(service, "keyword", &search_keyword);
231 elm_theme_extension_add(NULL, GENLIST_edj);
234 _storageUg_listen_vconf(ad);
236 storageUg_main_init(ad);
237 storageUg_default_init(ad);
238 storageUg_misc_init(ad);
240 setting_view_node_table_intialize();
241 setting_view_node_table_register(ad->main_view, NULL);
242 setting_view_node_table_register(ad->default_view, ad->main_view);
243 setting_view_node_table_register(ad->misces_view, ad->main_view);
245 storageUg_init_itcs(ad);
247 ad->lo_main = setting_create_win_layout(ad->lo_parent, ad->win);
248 ad->navi = storageUg_create_navi(ad->lo_main, ad);
249 if (NULL == ad->navi) {
250 SETTING_TRACE_ERROR("calloc() Fail");
253 elm_object_part_content_set(ad->lo_main, "elm.swallow.content", ad->navi);
256 keyword_val = atoi(search_keyword);
258 if (STORAGEUG_KEYWORD_DEFAULT <= keyword_val && keyword_val < STORAGEUG_KEYWORD_MAX)
259 setting_view_create(ad->default_view, ad);
261 setting_view_create(ad->main_view, ad);
264 storageUg_move_view(keyword_val, ad);
267 free(search_keyword);
272 static void setting_storageUg_on_destroy(ui_gadget_h ug, app_control_h service,
276 SettingStorageUG *storageUG = priv;
278 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
280 FREE(storageUG->usb_otg_path);
282 _storageUg_ignore_vconf();
284 ret = media_content_disconnect();
285 warn_if(ret != MEDIA_CONTENT_ERROR_NONE, "media_content_disconnect Fail");
287 if (storageUG->main_view->is_create)
288 setting_view_destroy(storageUG->main_view, storageUG);
289 if (storageUG->default_view->is_create)
290 setting_view_destroy(storageUG->default_view, storageUG);
292 if (storageUG->lo_main) {
293 evas_object_del(storageUG->lo_main);
294 storageUG->lo_main = NULL;
298 static void setting_storageUg_on_resume(ui_gadget_h ug, app_control_h service,
301 SettingStorageUG *storageUG = priv;
303 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
305 if (storageUG->main_view->is_create)
306 setting_view_update(storageUG->main_view, storageUG);
310 static void setting_storageUg_on_event(ui_gadget_h ug, enum ug_event event,
311 app_control_h service, void *priv)
313 SettingStorageUG *storageUG = priv;
315 retm_if(NULL == ug || NULL == priv, "ug=%p, priv=%p is Invalid", ug, priv);
318 case UG_EVENT_LOW_MEMORY:
320 case UG_EVENT_LOW_BATTERY:
322 case UG_EVENT_LANG_CHANGE:
324 setting_navi_items_update(storageUG->navi);
326 case UG_EVENT_ROTATE_PORTRAIT:
327 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
328 case UG_EVENT_ROTATE_LANDSCAPE:
329 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
331 if (storageUG->application_desp)
332 elm_genlist_item_update(storageUG->application_desp->item);
335 case UG_EVENT_REGION_CHANGE:
342 static void setting_storageUg_on_key_event(ui_gadget_h ug,
343 enum ug_key_event event, app_control_h service, void *priv)
349 case UG_KEY_EVENT_END:
357 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
359 SettingStorageUG *storageUG;
361 retv_if(NULL == ops, -1);
363 storageUG = calloc(1, sizeof(SettingStorageUG));
364 if (NULL == storageUG) {
365 SETTING_TRACE_ERROR("calloc() Fail");
369 ops->create = setting_storageUg_on_create;
372 ops->resume = setting_storageUg_on_resume;
373 ops->destroy = setting_storageUg_on_destroy;
375 ops->event = setting_storageUg_on_event;
376 ops->key_event = setting_storageUg_on_key_event;
377 ops->priv = storageUG;
378 ops->opt = UG_OPT_INDICATOR_ENABLE;
384 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
391 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv,
396 char ug_args[STORAGEUG_MAX_STR_LEN];
397 Setting_Cfg_Node_T *node;
398 Eina_List **pplist = (Eina_List **)priv;
399 const storageUg_search_data search_configs[] = {
400 /* key_name, view_type, keyword, action, data */
401 {STORAGEUG_STR_SYS_MEM, STORAGEUG_KEYWORD_MAIN_SYS_MEM},
402 {STORAGEUG_STR_APPS, STORAGEUG_KEYWORD_MAIN_APPS},
403 {STORAGEUG_STR_PICS, STORAGEUG_KEYWORD_MAIN_PICS},
404 {STORAGEUG_STR_AUDIO, STORAGEUG_KEYWORD_MAIN_AUDIO},
405 {STORAGEUG_STR_MISCES, STORAGEUG_KEYWORD_MAIN_MISCES},
406 {STORAGEUG_STR_AVAIL, STORAGEUG_KEYWORD_MAIN_AVAIL},
407 {STORAGEUG_STR_SD_CARD, STORAGEUG_KEYWORD_MAIN_SD_CARD},
408 {STORAGEUG_STR_DEF_STORAGE, STORAGEUG_KEYWORD_DEFAULT},
409 {STORAGEUG_STR_BT, STORAGEUG_KEYWORD_DEFAULT_BT},
410 {STORAGEUG_STR_WIFI, STORAGEUG_KEYWORD_DEFAULT_WIFI},
411 {STORAGEUG_STR_NFC, STORAGEUG_KEYWORD_DEFAULT_NFC},
412 {STORAGEUG_STR_INSTALLED_APP_B, STORAGEUG_KEYWORD_DEFAULT_APP}
415 retv_if(NULL == priv, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
416 retv_if(NULL == applocale, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
418 *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
420 size = sizeof(search_configs) / sizeof(storageUg_search_data);
422 for (i = 0; i < size; i++) {
423 sprintf(ug_args, "keyword:%d", search_configs[i].keynum);
424 node = setting_plugin_search_item_subindex_add(
425 search_configs[i].key_name,
432 *pplist = eina_list_append(*pplist, node);