fix for applying wayland (removing X)
[apps/home/settings.git] / setting-storage / src / setting-storage-default.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19 #include <glib.h>
20
21 #include "setting-storage-utils.h"
22 #include "setting-storage-default.h"
23
24 enum {
25     STORAGEUG_DEFAULT_STORAGE_PHONE,
26     STORAGEUG_DEFAULT_STORAGE_SD
27 };
28
29 enum {
30     SETTING_DEF_MEMORY_PHONE = 0,
31     SETTING_DEF_MEMORY_MMC,
32     SETTING_DEF_MEMORY_MAX
33 };
34
35 static setting_view setting_view_storage_default;
36
37
38 Evas_Object *storageUg_default_notice_get_icon(void *data, Evas_Object *obj,
39                                                const char *part)
40 {
41         Evas_Object *layout;
42         Evas_Coord height, width;
43         SettingStorageUG *ad = data;
44         int offset = SETTING_STORAGE_PIE_RECT_OFFSET * 2;
45
46         retv_if(NULL == obj, NULL);
47         retv_if(NULL == data, NULL);
48         retvm_if(safeStrCmp(part, "elm.icon"), NULL, "part(%s) Invaild", part);
49
50         layout = elm_layout_add(obj);
51         elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "default_storage");
52         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
53         elm_object_part_text_set(layout, "application_desp.text",
54                                  _(STORAGEUG_STR_APP_LOC_NOTICE));
55
56         /* in landscape mode, the size should be resize */
57         evas_object_geometry_get(obj, NULL, NULL, &width, NULL);
58
59         app_device_orientation_e m = elm_win_rotation_get(ad->win);
60         if (APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m)
61                 height = SETTING_STORAGE_DEFAULT_STORAGE_APP_DESP_SIZE * 2 / 3;
62         else
63                 height = SETTING_STORAGE_DEFAULT_STORAGE_APP_DESP_SIZE;
64
65         setting_resize_object(layout, width - offset, height);
66         evas_object_show(layout);
67         return layout;
68 }
69
70 static Eina_Bool storageUg_default_back_cb(void *data, Elm_Object_Item *it)
71 {
72         SettingStorageUG *ad = data;
73
74         retv_if(data == NULL, EINA_FALSE);
75
76         if (ad->main_view->is_create)
77                 setting_view_change(ad->default_view, ad->main_view, ad);
78         else
79                 ug_destroy_me(ad->ug);
80
81         return EINA_TRUE;
82 }
83
84 static void _storageUg_default_set_value(Elm_Object_Item *parentItem,
85                                          Setting_GenGroupItem_Data *d_subItem, Setting_GenGroupItem_Data *d_parentItem)
86 {
87         int err;
88
89         setting_set_int_slp_key(d_parentItem->int_slp_setting_binded, d_subItem->chk_status,
90                                 &err);
91         retm_if(0 != err, "setting_set_int_slp_key(%d) Fail(%d)",
92                 d_parentItem->int_slp_setting_binded, err);
93
94         G_FREE(d_parentItem->sub_desc);
95         d_parentItem->sub_desc = (char *)g_strdup(d_subItem->keyStr);
96         elm_object_item_data_set(d_parentItem->item, d_parentItem);
97         elm_genlist_item_update(d_parentItem->item);
98
99         SettingStorageUG *ad = d_parentItem->userdata;
100         if (ad && ad->popup) {
101                 evas_object_del(ad->popup);
102                 ad->popup = NULL;
103         }
104 }
105
106 static void storageUg_default_expand_item_sel(void *data, Evas_Object *obj,
107                                               void *event_info)
108 {
109         Elm_Object_Item *parentItem;
110         Elm_Object_Item *subitem = event_info;
111         Setting_GenGroupItem_Data *d_subItem;
112         Setting_GenGroupItem_Data *d_parentItem;
113
114         ret_if(event_info == NULL || data == NULL);
115
116         elm_genlist_item_selected_set(subitem, 0);
117
118         /*parentItem = elm_genlist_item_parent_get(subitem); */
119
120
121         d_subItem = elm_object_item_data_get(subitem);
122         ret_if(NULL == d_subItem);
123
124         d_parentItem = (Setting_GenGroupItem_Data *)data;       /* parent data */
125         ret_if(NULL == d_parentItem);
126
127         parentItem = d_parentItem->item;
128
129         elm_radio_value_set(d_subItem->rgd, d_subItem->chk_status);
130
131         _storageUg_default_set_value(parentItem, d_subItem, d_parentItem);
132
133
134         /*elm_genlist_item_expanded_set(d_parentItem->item, EINA_FALSE); */
135 }
136
137
138 static void storageUg_default_radio_change(void *data, Evas_Object *obj,
139                                            void *event_info)
140 {
141         Elm_Object_Item *subItem, *parentItem;
142         Setting_GenGroupItem_Data *list_item = data;
143         Setting_GenGroupItem_Data *d_subItem;
144         Setting_GenGroupItem_Data *d_parentItem;
145
146         ret_if(data == NULL);
147
148         list_item->chk_status = elm_radio_value_get(obj);       /*  for update */
149
150         subItem = list_item->item;
151
152         d_subItem = elm_object_item_data_get(subItem);
153         ret_if(NULL == d_subItem);
154
155         if (d_subItem->disableflag)
156                 return;
157
158         d_parentItem = (Setting_GenGroupItem_Data *)data;
159         ret_if(NULL == d_parentItem);
160
161         parentItem = d_parentItem->item;
162
163         _storageUg_default_set_value(parentItem, d_subItem, d_parentItem);
164 }
165
166 static void storageUg_default_reset_vconf(Setting_GenGroupItem_Data *data_item)
167 {
168         int err = 0;
169         int value = 0;
170
171         ret_if(NULL == data_item);
172
173         if (!safeStrCmp(data_item->sub_desc, STORAGEUG_STR_SD_CARD)) {
174
175                 setting_get_int_slp_key(data_item->int_slp_setting_binded, &value, &err);
176                 retm_if(0 != err, "setting_get_int_slp_key(%d) Fail(%d)",
177                         data_item->int_slp_setting_binded, err);
178                 if (value != STORAGEUG_DEFAULT_STORAGE_PHONE) {
179                         setting_set_int_slp_key(data_item->int_slp_setting_binded,
180                                                 STORAGEUG_DEFAULT_STORAGE_PHONE, &err);
181                         retm_if(0 != err, "setting_set_int_slp_key(%d) Fail(%d)",
182                                 data_item->int_slp_setting_binded, err);
183                 }
184
185                 G_FREE(data_item->sub_desc);
186                 data_item->sub_desc = (char *)g_strdup(STORAGEUG_STR_INTERNAL_STORAGE);
187                 elm_object_item_data_set(data_item->item, data_item);
188                 elm_genlist_item_update(data_item->item);
189         }
190 }
191
192 static void storageUg_default_mmc_changed_cb(keynode_t *node, void *data)
193 {
194         int status;
195         SettingStorageUG *ad = data;
196
197         ret_if(NULL == node);
198         ret_if(NULL == data);
199
200         status = vconf_keynode_get_int(node);
201
202         SETTING_TRACE("status:%d", status);
203         if (VCONFKEY_SYSMAN_MMC_MOUNTED != status) {
204                 storageUg_default_reset_vconf(ad->data_bt);
205                 storageUg_default_reset_vconf(ad->data_wifidirect);
206                 storageUg_default_reset_vconf(ad->data_nfc);
207                 storageUg_default_reset_vconf(ad->data_installapp);
208         }
209 }
210
211 static const char *storageUg_default_cur_storage_get(int mmc_status,
212                                                      setting_int_slp_list slp_key)
213 {
214         int err, value = 0;
215         const char *phone = STORAGEUG_STR_INTERNAL_STORAGE;
216         const char *sd = STORAGEUG_STR_SD_CARD;
217
218         setting_get_int_slp_key(slp_key, &value, &err);
219         warn_if(0 != err, "setting_get_int_slp_key(%d) Fail(%d)", slp_key, err);
220
221         if (mmc_status != VCONFKEY_SYSMAN_MMC_MOUNTED && STORAGEUG_DEFAULT_STORAGE_SD == value) {
222                 setting_set_int_slp_key(slp_key, STORAGEUG_DEFAULT_STORAGE_PHONE, &err);
223                 warn_if(0 != err, "setting_set_int_slp_key(%d) Fail(%d)", slp_key, err);
224
225                 value = STORAGEUG_DEFAULT_STORAGE_PHONE;
226         }
227
228         if (STORAGEUG_DEFAULT_STORAGE_SD == value)
229                 return sd;
230         else
231                 return phone;
232 }
233 void __storageUg_default_popup_del(void *data, Evas_Object *obj, void *event_info)
234 {
235         SettingStorageUG *ad = data;
236
237         ret_if(data == NULL);
238
239         evas_object_del(ad->popup);
240         ad->popup = NULL;
241 }
242
243 static void storageUg_default_main_item_sel(void *data, Evas_Object *obj,
244                                             void *event_info)
245 {
246
247         ret_if(NULL == data || NULL == event_info);
248         SETTING_TRACE_BEGIN;
249         SettingStorageUG *ad = (SettingStorageUG *) data;
250         Elm_Object_Item *parentItem = event_info;       /* parent item */
251         elm_genlist_item_selected_set(parentItem, 0);
252         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
253
254         /* create popup */
255         if (ad->popup) {
256                 evas_object_del(ad->popup);
257                 ad->popup = NULL;
258         }
259
260         Evas_Object *scroller = NULL;
261         ad->popup = setting_create_popup_with_list(&scroller, ad, ad->win,
262                                                    data_parentItem->keyStr, NULL, 0, 0);
263         _P(ad->popup);
264
265
266         Evas_Object *rgd;
267
268         Setting_GenGroupItem_Data *memory_card;
269         Setting_GenGroupItem_Data *phone;
270
271
272         if (data_parentItem == ad->data_bt || data_parentItem == ad->data_nfc
273             || data_parentItem == ad->data_wifidirect
274             || data_parentItem == ad->data_installapp) {
275                 SETTING_TRACE("POPUP ITEMS IS CREATED");
276                 rgd = elm_radio_add(scroller);
277                 elm_object_style_set(rgd, "list");
278                 evas_object_propagate_events_set(rgd, EINA_TRUE);
279                 elm_radio_value_set(rgd, -1);
280                 /*phone = setting_create_Gendial_exp_sub_field(scroller, &itc_1icon_1text_sub,
281                                 storageUg_default_expand_item_sel, ad, parentItem, SWALLOW_Type_1RADIO_RIGHT,
282                                 rgd, SETTING_DEF_MEMORY_PHONE, STORAGEUG_STR_INTERNAL_STORAGE, NULL);*/
283                 phone = setting_create_Gendial_field_1radio(scroller,
284                                                             &itc_multiline_1text_1icon,
285                                                             storageUg_default_expand_item_sel, data_parentItem,
286                                                             SWALLOW_Type_1RADIO_RIGHT, rgd,
287                                                             SETTING_DEF_MEMORY_PHONE,
288                                                             STORAGEUG_STR_INTERNAL_STORAGE,
289                                                             NULL);
290                 setting_retm_if(NULL == phone, "phone is NULL");
291                 setting_genlist_item_groupstyle_set(phone, SETTING_GROUP_STYLE_CENTER);
292                 phone->disableflag = EINA_FALSE;
293
294                 /*memory_card = setting_create_Gendial_exp_sub_field(scroller,
295                                 &itc_1icon_1text_sub, storageUg_default_expand_item_sel, ad,
296                                 parentItem, SWALLOW_Type_1RADIO_RIGHT, rgd, SETTING_DEF_MEMORY_MMC,
297                                 STORAGEUG_STR_SD_CARD, storageUg_default_radio_change);*/
298                 memory_card = setting_create_Gendial_field_1radio(scroller,
299                                                                   &itc_multiline_1text_1icon,
300                                                                   storageUg_default_expand_item_sel, data_parentItem,
301                                                                   SWALLOW_Type_1RADIO_RIGHT, rgd,
302                                                                   SETTING_DEF_MEMORY_MMC,
303                                                                   STORAGEUG_STR_SD_CARD,
304                                                                   storageUg_default_radio_change);
305                 retm_if(NULL == memory_card, "setting_create_Gendial_exp_sub_field() Fail");
306                 if (data_parentItem == ad->data_wifidirect
307                     || data_parentItem == ad->data_installapp) {
308                         setting_genlist_item_groupstyle_set(memory_card, SETTING_GROUP_STYLE_BOTTOM);
309                 } else {
310                         setting_genlist_item_groupstyle_set(memory_card, SETTING_GROUP_STYLE_CENTER);
311                 }
312
313                 memory_card->disableflag = EINA_FALSE;
314
315                 if (ad->mmc_status != VCONFKEY_SYSMAN_MMC_MOUNTED) {
316                         setting_disable_genlist_item(memory_card->item);
317                         memory_card->disableflag = EINA_TRUE;
318                 }
319
320                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
321         }
322 }
323
324 static int storageUg_default_create(void *data)
325 {
326         int ret;
327         SettingStorageUG *ad = data;
328         Evas_Object *genlist = NULL;
329         const char *grp_title, *item_title;
330         const char *cur_storage;
331
332         retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
333
334         if (!ad->main_view->is_create) {
335                 ret = vconf_get_int(storageUg_MMC_stat, &ad->mmc_status);
336                 retvm_if(ret, SETTING_RETURN_FAIL, "vconf_get_int(%s) Fail", storageUg_MMC_stat);
337         }
338
339         setting_push_layout_navi_bar_genlist(ad->lo_parent, ad->win,
340                                              STORAGEUG_STR_DEF_STORAGE, STORAGEUG_STR_BACK, NULL,
341                                              (setting_call_back_func)storageUg_default_back_cb,
342                                              NULL, ad, &genlist, ad->navi);
343 //      elm_genlist_realization_mode_set(genlist, EINA_FALSE);
344
345         /*Shared contents */
346         setting_create_Gendial_field_titleItem(genlist, &itc_group_item,
347                                                STORAGEUG_STR_SHARED_CONTENTS, NULL);
348
349         /* bluetooth */
350         cur_storage = storageUg_default_cur_storage_get(ad->mmc_status,
351                                                         INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH);
352         ad->data_bt = setting_create_Gendial_field_def(genlist, &(itc_2text), storageUg_default_main_item_sel,
353                                                        ad, SWALLOW_Type_INVALID, NULL,
354                                                        NULL, 0, STORAGEUG_STR_BT, (char *)cur_storage, NULL);
355         if (ad->data_bt) {
356                 ad->data_bt->int_slp_setting_binded = INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH;
357                 ad->data_bt->userdata = ad;
358         } else {
359                 SETTING_TRACE_ERROR("ad->data_bt is NULL");
360         }
361 #if 0
362         /* NFC */
363
364         cur_storage = storageUg_default_cur_storage_get(ad->mmc_status,
365                                                         INT_SLP_SETTING_DEFAULT_MEM_NFC);
366         ad->data_nfc = setting_create_Gendial_exp_parent_field(genlist,
367                                                                &itc_2text_3_parent, NULL, NULL, SWALLOW_Type_INVALID,
368                                                                STORAGEUG_STR_NFC, (char *)cur_storage, SETTING_GROUP_STYLE_CENTER,
369                                                                SETTING_GROUP_STYLE_CENTER);
370         if (ad->data_nfc) {
371                 ad->data_nfc->int_slp_setting_binded = INT_SLP_SETTING_DEFAULT_MEM_NFC;
372         } else {
373                 SETTING_TRACE_ERROR("ad->data_dload is NULL");
374         }
375
376 #endif
377
378         /* Wifi Direct */
379         cur_storage = storageUg_default_cur_storage_get(ad->mmc_status,
380                                                         INT_SLP_SETTING_DEFAULT_MEM_WIFIDIRECT);
381         /*sub_text = setting_customize_text(_(cur_storage), 0, BLUE_SUBTEXT_COLOR, NULL); */
382         /*ad->data_wifidirect= setting_create_Gendial_exp_parent_field(genlist,
383                         &itc_2text_3_parent, NULL, NULL, SWALLOW_Type_INVALID,
384                         STORAGEUG_STR_WIFI, sub_text, SETTING_GROUP_STYLE_CENTER,
385                         SETTING_GROUP_STYLE_BOTTOM);*/
386         ad->data_wifidirect = setting_create_Gendial_field_def(genlist, &(itc_2text), storageUg_default_main_item_sel,
387                                                                ad, SWALLOW_Type_INVALID, NULL,
388                                                                NULL, 0, STORAGEUG_STR_WIFI, (char *)cur_storage, NULL);
389         if (ad->data_wifidirect) {
390                 ad->data_wifidirect->int_slp_setting_binded = INT_SLP_SETTING_DEFAULT_MEM_WIFIDIRECT;
391                 ad->data_wifidirect->userdata = ad;
392         } else {
393                 SETTING_TRACE_ERROR("ad->data_wifidirect is NULL");
394         }
395
396         /*Install application */
397         grp_title = STORAGEUG_STR_INSTALLED_APP_H;
398         item_title = STORAGEUG_STR_INSTALLED_APP_B;
399
400         setting_create_Gendial_field_titleItem(genlist, &itc_group_item, grp_title,
401                                                NULL);
402
403         cur_storage = storageUg_default_cur_storage_get(ad->mmc_status,
404                                                         INT_SLP_SETTING_DEFAULT_MEM_INSTALLAPPLICATIONS);
405         ad->data_installapp = setting_create_Gendial_field_def(genlist, &(itc_2text), storageUg_default_main_item_sel,
406                                                                ad, SWALLOW_Type_INVALID, NULL,
407                                                                NULL, 0, item_title, (char *)cur_storage, NULL);
408         if (ad->data_installapp) {
409                 ad->data_installapp->int_slp_setting_binded =
410                     INT_SLP_SETTING_DEFAULT_MEM_INSTALLAPPLICATIONS;
411                 ad->data_installapp->userdata = ad;
412         } else {
413                 SETTING_TRACE_ERROR("ad->data_installapp is NULL");
414         }
415
416         ADD_GL_HELP(genlist, STORAGEUG_STR_APP_LOC_NOTICE);
417
418         ret = vconf_notify_key_changed(storageUg_MMC_stat, storageUg_default_mmc_changed_cb,
419                                        ad);
420         if (ret != 0) {
421                 SETTING_TRACE_ERROR("vconf_notify_key_changed(%s) Fail(%d)", storageUg_MMC_stat,
422                                     ret);
423         }
424
425         setting_view_storage_default.is_create = 1;
426
427         return SETTING_RETURN_SUCCESS;
428 }
429
430 static int storageUg_default_destroy(void *data)
431 {
432         int ret;
433
434         ret = vconf_ignore_key_changed(storageUg_MMC_stat, storageUg_default_mmc_changed_cb);
435         warn_if(ret, "vconf_ignore_key_changed(%s) Fail(%d)", storageUg_MMC_stat, ret);
436
437         setting_view_storage_default.is_create = 0;
438
439         return SETTING_RETURN_SUCCESS;
440 }
441 static int storageUg_default_update(void *data)
442 {
443         return SETTING_RETURN_SUCCESS;
444 }
445 static int storageUg_default_cleanup(void *data)
446 {
447         return storageUg_default_destroy(data);
448 }
449
450
451 void storageUg_default_init(SettingStorageUG *ad)
452 {
453         ret_if(NULL == ad);
454         ret_if(ad->default_view);
455
456         setting_view_storage_default.create = storageUg_default_create;
457         setting_view_storage_default.destroy = storageUg_default_destroy;
458         setting_view_storage_default.update = storageUg_default_update;
459         setting_view_storage_default.cleanup = storageUg_default_cleanup;
460
461         ad->default_view = &setting_view_storage_default;
462 }
463