Initialize Tizen 2.3
[apps/home/settings.git] / setting-memory / src / setting-memory-default-memory.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.1 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-memory-default-memory.h>
18 #define SUPPORT_DVB_B 1
19 #define DVB_H_STR "DVB-H"
20 static int setting_memory_default_memory_create(void *cb);
21 static int setting_memory_default_memory_destroy(void *cb);
22 static int setting_memory_default_memory_update(void *cb);
23 static int setting_memory_default_memory_cleanup(void *cb);
24 char *setting_default_memory_get_desc_str_by_vconf(setting_int_slp_list
25                                                    slp_key);
26
27 setting_view setting_view_memory_default_memory = {
28         .create = setting_memory_default_memory_create,
29         .destroy = setting_memory_default_memory_destroy,
30         .update = setting_memory_default_memory_update,
31         .cleanup = setting_memory_default_memory_cleanup,
32 };
33
34 static void setting_memory_default_click_softkey_cancel_cb(void *data,
35                                                            Evas_Object *obj,
36                                                            void *event_info);
37 static void __setting_memory_default_memory_vconf_change_cb(
38                                                 keynode_t *key, void *data);
39 static void __setting_memory_default_memory_update_item_status(
40                                         void *data, bool disable_mmc_flag);
41 static void __setting_memory_default_memory_update_vconf(void *data);
42
43 /* ***************************************************
44  *
45  *basic func
46  *
47  ***************************************************/
48
49 static void __setting_memory_default_exp_cb(void *data, Evas_Object *obj,
50                                             void *event_info)
51 {
52         ret_if(NULL == data || NULL == event_info);
53         SETTING_TRACE_BEGIN;
54         SettingMemoryUG *ad = (SettingMemoryUG *) data;
55         Elm_Object_Item *parentItem = event_info;       /* parent item */
56         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
57         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
58
59         Evas_Object *rgd;
60         if (data_parentItem == ad->data_wap
61             || data_parentItem == ad->data_bt
62             || data_parentItem == ad->data_cmr
63             || data_parentItem == ad->data_vrec
64             || data_parentItem == ad->data_rdo
65             || data_parentItem == ad->data_shr
66             || data_parentItem == ad->data_dvb_h) {
67
68                 SETTING_TRACE_DEBUG("start drawing exp menu.");
69
70                 rgd = elm_radio_add(scroller);
71                 elm_radio_value_set(rgd, -1);
72                 setting_create_Gendial_exp_sub_field(scroller,
73                                                      &(ad->itc_1icon_1text_sub),
74                                                      NULL, NULL, parentItem,
75                                                      SWALLOW_Type_1RADIO, rgd,
76                                                      SETTING_DEF_MEMORY_PHONE,
77                                                      "IDS_COM_BODY_PHONE",
78                                                      NULL);
79
80                 Setting_GenGroupItem_Data *data_memory_card = NULL;
81                 data_memory_card =
82                         setting_create_Gendial_exp_sub_field(scroller,
83                                                      &(ad->itc_1icon_1text_sub),
84                                                      NULL, NULL, parentItem,
85                                                      SWALLOW_Type_1RADIO, rgd,
86                                                      SETTING_DEF_MEMORY_MMC,
87                                                      "IDS_COM_BODY_MEMORY_CARD",
88                                                      NULL);
89                 setting_retm_if(!data_memory_card, "data_memory_card is NULL");
90
91                 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
92                 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
93                 setting_retm_if(ret != 0, "Get vconf failed");
94
95                 /* if mmc card is not mounted, set item disable */
96                 if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED ||
97                         mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
98                         setting_disable_genlist_item(data_memory_card->item);
99                 }
100
101                 setting_update_chk_status(rgd,
102                                           data_parentItem->int_slp_setting_binded);
103
104         }
105 }
106
107 static int setting_memory_default_memory_create(void *cb)
108 {
109         SETTING_TRACE_BEGIN;
110         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
111
112         SettingMemoryUG *ad = (SettingMemoryUG *) cb;
113
114         Evas_Object *scroller;
115
116         Elm_Object_Item *item;
117         ad->ly_main =
118             setting_create_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
119                                              _("IDS_ST_BODY_MEMORYSETTINGS_DEFAULT_MEMORY"),
120                                              S_("IDS_COM_BODY_BACK"), NULL,
121                                              setting_memory_default_click_softkey_cancel_cb,
122                                              NULL, ad, &scroller, &(ad->navi_bar));
123
124         retvm_if(ad->ly_main == NULL, -1, "Can't create main layout");
125
126         setting_enable_expandable_genlist(scroller, ad,
127                                           __setting_memory_default_exp_cb,
128                                           NULL);
129         /* scroller is a genlist */
130         /* 1 wap */
131         item =
132             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
133                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
134         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
135         ad->data_wap =
136             setting_create_Gendial_exp_parent_field(scroller,
137                                                     &(ad->itc_2text_3_parent),
138                                                     NULL, NULL,
139                                                     SWALLOW_Type_INVALID,
140                                                     "IDS_ST_BODY_WAP_DOWNLOADS",
141                                                     setting_default_memory_get_desc_str_by_vconf
142                                                     (INT_SLP_SETTING_DEFAULT_MEM_WAP));
143         if (ad->data_wap) {
144                 ad->data_wap->int_slp_setting_binded = INT_SLP_SETTING_DEFAULT_MEM_WAP;
145         } else {
146                 SETTING_TRACE_ERROR("ad->data_wap is NULL");
147         }
148
149         /* 2 bt */
150         item =
151             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
152                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
153         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
154         ad->data_bt =
155             setting_create_Gendial_exp_parent_field(scroller,
156                                                     &(ad->itc_2text_3_parent),
157                                                     NULL, NULL,
158                                                     SWALLOW_Type_INVALID,
159                                                     "IDS_COM_BODY_BLUETOOTH",
160                                                     setting_default_memory_get_desc_str_by_vconf
161                                                     (INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH));
162         if (ad->data_bt) {
163                 ad->data_bt->int_slp_setting_binded =
164                         INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH;
165         } else {
166                 SETTING_TRACE_ERROR("ad->data_bt is NULL");
167         }
168
169         /* 3 cmr */
170         item =
171             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
172                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
173         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
174         ad->data_cmr =
175             setting_create_Gendial_exp_parent_field(scroller,
176                                                     &(ad->itc_2text_3_parent),
177                                                     NULL, NULL,
178                                                     SWALLOW_Type_INVALID,
179                                                     "IDS_COM_BODY_CAMERA",
180                                                     setting_default_memory_get_desc_str_by_vconf
181                                                     (INT_SLP_SETTING_DEFAULT_MEM_CAMERA));
182         if (ad->data_cmr) {
183                 ad->data_cmr->int_slp_setting_binded =
184                         INT_SLP_SETTING_DEFAULT_MEM_CAMERA;
185         } else {
186                 SETTING_TRACE_ERROR("ad->data_cmr is NULL");
187         }
188         /* 4 vrec */
189         item =
190             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
191                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
192         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
193         ad->data_vrec =
194             setting_create_Gendial_exp_parent_field(scroller,
195                                                     &(ad->itc_2text_3_parent),
196                                                     NULL, NULL,
197                                                     SWALLOW_Type_INVALID,
198                                                     "IDS_COM_BODY_VOICE_RECORDER",
199                                                     setting_default_memory_get_desc_str_by_vconf
200                                                     (INT_SLP_SETTING_DEFAULT_MEM_VOICE_RECORDER));
201         if (ad->data_vrec) {
202                 ad->data_vrec->int_slp_setting_binded =
203                         INT_SLP_SETTING_DEFAULT_MEM_VOICE_RECORDER;
204         } else {
205                 SETTING_TRACE_ERROR("ad->data_vrec is NULL");
206         }
207
208 #if SUPPORT_FMradio
209         /* 5 rdo */
210         item =
211             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
212                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
213         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
214         ad->data_rdo =
215             setting_create_Gendial_exp_parent_field(scroller,
216                                                     &(ad->itc_2text_3_parent),
217                                                     NULL, NULL,
218                                                     SWALLOW_Type_INVALID,
219                                                     "IDS_COM_BODY_FM_RADIO",
220                                                     setting_default_memory_get_desc_str_by_vconf
221                                                     (INT_SLP_SETTING_DEFAULT_MEM_FM_RADIO));
222         if (ad->data_rdo) {
223                 ad->data_rdo->int_slp_setting_binded =
224                         INT_SLP_SETTING_DEFAULT_MEM_FM_RADIO;
225         } else {
226                 SETTING_TRACE_ERROR("ad->data_rdo is NULL");
227         }
228 #endif
229
230 #if SUPPORT_AllShare_Memory
231
232         /* 6 shr */
233         item =
234             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
235                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
236         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
237         ad->data_shr =
238             setting_create_Gendial_exp_parent_field(scroller,
239                                                     &(ad->itc_2text_3_parent),
240                                                     NULL, NULL,
241                                                     SWALLOW_Type_INVALID,
242                                                     "IDS_COM_BODY_ALLSHARE",
243                                                     setting_default_memory_get_desc_str_by_vconf
244                                                     (INT_SLP_SETTING_DEFAULT_MEM_ALL_SHARE));
245         if (ad->data_shr) {
246                 ad->data_shr->int_slp_setting_binded =
247                         INT_SLP_SETTING_DEFAULT_MEM_ALL_SHARE;
248         } else {
249                 SETTING_TRACE_ERROR("ad->data_shr is NULL");
250         }
251 #endif
252 #if SUPPORT_DVB_B
253         /* 7 DVB-H */
254         item =
255             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
256                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
257         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
258         ad->data_dvb_h =
259             setting_create_Gendial_exp_parent_field(scroller,
260                                                     &(ad->itc_2text_3_parent),
261                                                     NULL, NULL,
262                                                     SWALLOW_Type_INVALID,
263                                                     DVB_H_STR,
264                                                     setting_default_memory_get_desc_str_by_vconf
265                                                     (INT_SLP_SETTING_DEFAULT_MEM_DVB_H));
266         if (ad->data_dvb_h) {
267                 ad->data_dvb_h->int_slp_setting_binded =
268                         INT_SLP_SETTING_DEFAULT_MEM_DVB_H;
269         } else {
270                 SETTING_TRACE_ERROR("ad->data_shr is NULL");
271         }
272 #endif
273
274         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
275                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
276         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
277
278         int ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
279                         __setting_memory_default_memory_vconf_change_cb, ad);
280         if (ret != 0) {
281                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
282         }
283         setting_view_memory_default_memory.is_create = 1;
284
285         SETTING_TRACE_END;
286
287         return SETTING_RETURN_SUCCESS;
288 }
289
290 static int setting_memory_default_memory_destroy(void *cb)
291 {
292         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
293
294         SettingMemoryUG *ad = (SettingMemoryUG *) cb;
295
296         int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
297                         __setting_memory_default_memory_vconf_change_cb);
298         if (ret != 0) {
299                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
300         }
301
302         setting_view_memory_default_memory.is_create = 0;
303
304         evas_object_del(ad->ly_main);
305
306         return SETTING_RETURN_SUCCESS;
307 }
308
309 static int setting_memory_default_memory_update(void *cb)
310 {
311         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
312         return SETTING_RETURN_SUCCESS;
313 }
314
315 char *setting_default_memory_get_desc_str_by_vconf(setting_int_slp_list slp_key)
316 {
317         /* SETTING_TRACE_BEGIN; */
318         /* error check */
319
320         char *setting_default_memory_type[SETTING_DEF_MEMORY_MAX] = {
321                 _("IDS_COM_BODY_PHONE"),
322                 _("IDS_COM_BODY_MEMORY_CARD")
323         };
324         int ret = SETTING_RETURN_FAIL;
325         int value = 0;
326         int err = -1;
327
328         int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
329         ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
330         setting_retvm_if(ret != 0, NULL, "Get vconf failed");
331
332         /* if mmc card is not mounted, set vconf by 0(phone) */
333         if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED ||
334                 mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
335                 ret = setting_set_int_slp_key(slp_key, 0, &err);
336                 setting_retvm_if(ret != 0, NULL, "Set vconf failed");
337         }
338
339         ret = setting_get_int_slp_key(slp_key, &value, &err);
340
341         switch (slp_key) {
342         case INT_SLP_SETTING_DEFAULT_MEM_WAP:
343         case INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH:
344         case INT_SLP_SETTING_DEFAULT_MEM_CAMERA:
345         case INT_SLP_SETTING_DEFAULT_MEM_VOICE_RECORDER:
346         case INT_SLP_SETTING_DEFAULT_MEM_FM_RADIO:
347         case INT_SLP_SETTING_DEFAULT_MEM_ALL_SHARE:
348         case INT_SLP_SETTING_DEFAULT_MEM_ADOBE_AIR:
349         case INT_SLP_SETTING_DEFAULT_MEM_DVB_H:
350                 {
351                         if (ret == SETTING_RETURN_FAIL
352                             || value >= SETTING_DEF_MEMORY_MAX)
353                                 value = SETTING_DEF_MEMORY_PHONE;
354                         return setting_default_memory_type[value];
355                 }
356                 break;
357
358         default:
359                 ret = SETTING_GENERAL_ERR_NOT_FIND_VALUE_SWITCH;
360                 break;
361         }
362
363         return NULL;
364 }
365
366 static int setting_memory_default_memory_cleanup(void *cb)
367 {
368         return 0;
369 }
370
371 /* ***************************************************
372  *
373  *general func
374  *
375  ***************************************************/
376
377 /* ***************************************************
378  *
379  *call back func
380  *
381  ***************************************************/
382
383 static void
384 setting_memory_default_click_softkey_cancel_cb(void *data, Evas_Object *obj,
385                                                void *event_info)
386 {
387         ret_if(data == NULL);
388
389         SettingMemoryUG *ad = (SettingMemoryUG *) data;
390
391         ug_destroy_me(ad->ug);
392 }
393
394 static void __setting_memory_default_memory_vconf_change_cb(
395                                                 keynode_t *key, void *data)
396 {
397         SETTING_TRACE_BEGIN;
398         setting_retm_if(NULL == key, "key is NULL");
399         setting_retm_if(NULL == data, "data is NULL");
400         SettingMemoryUG *ad = (SettingMemoryUG *)data;
401         int status = vconf_keynode_get_int(key);
402         char *vconf_name = vconf_keynode_get_name(key);
403
404         if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
405                 SETTING_TRACE("status:%d", status);
406                 if (VCONFKEY_SYSMAN_MMC_MOUNTED == status) {
407                         __setting_memory_default_memory_update_item_status(
408                                                                 ad,FALSE);
409                 } else {
410                         __setting_memory_default_memory_update_item_status(
411                                                                 ad, TRUE);
412                 }
413         }
414 }
415
416 static void __setting_memory_default_memory_update_item_status(
417                                         void *data, bool disable_mmc_flag)
418 {
419         SETTING_TRACE_BEGIN;
420         setting_retm_if(NULL == data, "data is NULL");
421         SettingMemoryUG *ad = (SettingMemoryUG *)data;
422
423         setting_retm_if(NULL == ad->data_wap, "ad->data_wap is NULL");
424         setting_retm_if(NULL == ad->data_wap->item,
425                         "ad->data_wap->item is NULL");
426
427         Elm_Object_Item *list_item = ad->data_wap->item;
428         Setting_GenGroupItem_Data *data_sub_item = NULL;
429         while (list_item != NULL) {
430                 data_sub_item =
431                         (Setting_GenGroupItem_Data *)
432                                 elm_object_item_data_get(list_item);
433                 /* data_sub_item is seperator*/
434                 if (data_sub_item == NULL) {
435                         list_item = elm_genlist_item_next_get(list_item);
436                         continue;
437                 }
438                 SETTING_TRACE("keystr = %s", data_sub_item->keyStr);
439                 /* disable_mmc_flag is true, means mmc is not mounted*/
440                 if (disable_mmc_flag) {
441                         if (!safeStrCmp(data_sub_item->keyStr,
442                                         "IDS_COM_BODY_PHONE") &&
443                                 ! elm_genlist_item_selected_get(list_item)) {
444                                 elm_genlist_item_selected_set(list_item, 1);
445                         } else if (!safeStrCmp(data_sub_item->keyStr,
446                                              "IDS_COM_BODY_MEMORY_CARD")) {
447                                 elm_genlist_item_selected_set(list_item, 0);
448                                 setting_disable_genlist_item(list_item);
449                         }
450                 } else {
451                         if (!safeStrCmp(data_sub_item->keyStr,
452                                              "IDS_COM_BODY_MEMORY_CARD") &&
453                                 elm_object_item_disabled_get(list_item)) {
454                                 setting_enable_genlist_item(list_item);
455                         }
456                 }
457                 list_item = elm_genlist_item_next_get(list_item);
458         }
459
460         /* if mmc is not mounted, update vconf*/
461         setting_retm_if(NULL == ad->data_bt, "ad->data_bt is NULL");
462         setting_retm_if(NULL == ad->data_cmr, "ad->data_cmr is NULL");
463         setting_retm_if(NULL == ad->data_vrec, "ad->data_vrec is NULL");
464         setting_retm_if(NULL == ad->data_rdo, "ad->data_rdo is NULL");
465         setting_retm_if(NULL == ad->data_dvb_h, "ad->data_dvb_h is NULL");
466         if (disable_mmc_flag) {
467                 __setting_memory_default_memory_update_vconf(ad->data_wap);
468                 __setting_memory_default_memory_update_vconf(ad->data_bt);
469                 __setting_memory_default_memory_update_vconf(ad->data_cmr);
470                 __setting_memory_default_memory_update_vconf(ad->data_vrec);
471                 __setting_memory_default_memory_update_vconf(ad->data_rdo);
472                 __setting_memory_default_memory_update_vconf(ad->data_dvb_h);
473         }
474 }
475
476 static void __setting_memory_default_memory_update_vconf(void *data)
477 {
478         SETTING_TRACE_BEGIN;
479         setting_retm_if(NULL == data, "data is NULL");
480         Setting_GenGroupItem_Data *data_item = (Setting_GenGroupItem_Data *)data;
481         int err = 0;
482         int value = 0;
483         int ret = 0;
484
485         ret = setting_get_int_slp_key(
486                 data_item->int_slp_setting_binded, &value, &err);
487         setting_retm_if(0 != ret, "get vconf failed");
488
489         /* if mmc card is not mounted, set vconf by 0(phone) */
490         if (value != 0) {
491                 ret = setting_set_int_slp_key(
492                         data_item->int_slp_setting_binded, 0, &err);
493                 setting_retm_if(ret != 0, "Set vconf failed");
494
495                 G_FREE(data_item->sub_desc);
496                 data_item->sub_desc = (char *)g_strdup(_("IDS_COM_BODY_PHONE"));
497                 elm_object_item_data_set(data_item->item, data_item);
498                 elm_genlist_item_update(data_item->item);
499         }
500 }