47aa9768c149aa7476a5a380ff2ed7eba61d1fe8
[apps/core/preloaded/settings.git] / setting-memory / src / setting-memory-default-memory.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *     http://www.tizenopensource.org/license
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17
18 #include <setting-memory-default-memory.h>
19
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
62                 rgd = elm_radio_add(scroller);
63                 elm_radio_value_set(rgd, -1);
64                 setting_create_Gendial_exp_sub_field(scroller,
65                                                      &(ad->itc_1icon_1text_sub),
66                                                      NULL, NULL, parentItem,
67                                                      SWALLOW_Type_1RADIO, rgd,
68                                                      SETTING_DEF_MEMORY_PHONE,
69                                                      "IDS_COM_BODY_PHONE",
70                                                      NULL);
71
72                 Setting_GenGroupItem_Data *data_memory_card = NULL;
73                 data_memory_card = 
74                         setting_create_Gendial_exp_sub_field(scroller,
75                                                      &(ad->itc_1icon_1text_sub),
76                                                      NULL, NULL, parentItem,
77                                                      SWALLOW_Type_1RADIO, rgd,
78                                                      SETTING_DEF_MEMORY_MMC,
79                                                      "IDS_COM_BODY_MEMORY_CARD",
80                                                      NULL);
81                 setting_retm_if(!data_memory_card, "data_memory_card is NULL");
82
83                 int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
84                 int ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
85                 setting_retm_if(ret != 0, "Get vconf failed");
86
87                 /* if mmc card is not mounted, set item disable */
88                 if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED || 
89                         mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
90                         setting_disable_genlist_item(data_memory_card->item);
91                 }
92
93                 setting_update_chk_status(rgd,
94                                           data_parentItem->int_slp_setting_binded);
95
96         }
97 }
98
99 static int setting_memory_default_memory_create(void *cb)
100 {
101         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
102
103         SettingMemoryUG *ad = (SettingMemoryUG *) cb;
104
105         Evas_Object *scroller;
106
107         Elm_Object_Item *item;
108         setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
109                                              _
110                                              ("IDS_ST_BODY_MEMORYSETTINGS_DEFAULT_MEMORY"),
111                                              S_("IDS_COM_BODY_BACK"), NULL,
112                                              setting_memory_default_click_softkey_cancel_cb,
113                                              NULL, ad, &scroller, ad->navi_bar);
114
115         setting_enable_expandable_genlist(scroller, ad,
116                                           __setting_memory_default_exp_cb,
117                                           NULL);
118         /* scroller is a genlist */
119         /* 1 wap */
120         item =
121             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
122                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
123         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
124         ad->data_wap =
125             setting_create_Gendial_exp_parent_field(scroller,
126                                                     &(ad->itc_2text_3_parent),
127                                                     NULL, NULL,
128                                                     SWALLOW_Type_INVALID,
129                                                     "IDS_ST_BODY_WAP_DOWNLOADS",
130                                                     setting_default_memory_get_desc_str_by_vconf
131                                                     (INT_SLP_SETTING_DEFAULT_MEM_WAP));
132         if (ad->data_wap) {
133                 ad->data_wap->int_slp_setting_binded = INT_SLP_SETTING_DEFAULT_MEM_WAP;
134         } else {
135                 SETTING_TRACE_ERROR("ad->data_wap is NULL");
136         }
137
138         int ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
139                         __setting_memory_default_memory_vconf_change_cb, ad);
140         if (ret != 0) {
141                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
142         }
143         setting_view_memory_default_memory.is_create = 1;
144
145         return SETTING_RETURN_SUCCESS;
146 }
147
148 static int setting_memory_default_memory_destroy(void *cb)
149 {
150         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
151
152         SettingMemoryUG *ad = (SettingMemoryUG *) cb;
153
154         elm_naviframe_item_pop(ad->navi_bar);
155
156         int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
157                         __setting_memory_default_memory_vconf_change_cb);
158         if (ret != 0) {
159                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
160         }
161
162         setting_view_memory_default_memory.is_create = 0;
163
164         return SETTING_RETURN_SUCCESS;
165 }
166
167 static int setting_memory_default_memory_update(void *cb)
168 {
169         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
170         return SETTING_RETURN_SUCCESS;
171 }
172
173 char *setting_default_memory_get_desc_str_by_vconf(setting_int_slp_list slp_key)
174 {
175         /* SETTING_TRACE_BEGIN; */
176         /* error check */
177
178         char *setting_default_memory_type[SETTING_DEF_MEMORY_MAX] = {
179                 _("IDS_COM_BODY_PHONE"),
180                 _("IDS_COM_BODY_MEMORY_CARD")
181         };
182         int ret = SETTING_RETURN_FAIL;
183         int value = 0;
184         int err = -1;
185
186         int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
187         ret = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_mode);
188         setting_retvm_if(ret != 0, NULL, "Get vconf failed");
189
190         /* if mmc card is not mounted, set vconf by 0(phone) */
191         if (mmc_mode == VCONFKEY_SYSMAN_MMC_REMOVED || 
192                 mmc_mode == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
193                 ret = setting_set_int_slp_key(slp_key, 0, &err);
194                 setting_retvm_if(ret != 0, NULL, "Set vconf failed");
195         }
196
197         ret = setting_get_int_slp_key(slp_key, &value, &err);
198
199         switch (slp_key) {
200         case INT_SLP_SETTING_DEFAULT_MEM_WAP:
201         case INT_SLP_SETTING_DEFAULT_MEM_BLUETOOTH:
202         case INT_SLP_SETTING_DEFAULT_MEM_CAMERA:
203         case INT_SLP_SETTING_DEFAULT_MEM_VOICE_RECORDER:
204         case INT_SLP_SETTING_DEFAULT_MEM_FM_RADIO:
205         case INT_SLP_SETTING_DEFAULT_MEM_ALL_SHARE:
206         case INT_SLP_SETTING_DEFAULT_MEM_ADOBE_AIR:
207                 {
208                         if (ret == SETTING_RETURN_FAIL
209                             || value >= SETTING_DEF_MEMORY_MAX)
210                                 value = SETTING_DEF_MEMORY_PHONE;
211                         return setting_default_memory_type[value];
212                 }
213                 break;
214
215         default:
216                 ret = SETTING_GENERAL_ERR_NOT_FIND_VALUE_SWITCH;
217                 break;
218         }
219
220         return NULL;
221 }
222
223 static int setting_memory_default_memory_cleanup(void *cb)
224 {
225         return setting_memory_default_memory_destroy(cb);
226 }
227
228 /* ***************************************************
229  *
230  *general func
231  *
232  ***************************************************/
233
234 /* ***************************************************
235  *
236  *call back func
237  *
238  ***************************************************/
239
240 static void
241 setting_memory_default_click_softkey_cancel_cb(void *data, Evas_Object *obj,
242                                                void *event_info)
243 {
244         ret_if(data == NULL);
245
246         SettingMemoryUG *ad = (SettingMemoryUG *) data;
247         setting_view_change(&setting_view_memory_default_memory,
248                             &setting_view_memory_main, ad);
249 }
250
251 static void __setting_memory_default_memory_vconf_change_cb(
252                                                 keynode_t *key, void *data)
253 {
254         SETTING_TRACE_BEGIN;
255         setting_retm_if(NULL == key, "key is NULL");
256         setting_retm_if(NULL == data, "data is NULL");
257         SettingMemoryUG *ad = (SettingMemoryUG *)data;
258         int status = vconf_keynode_get_int(key);
259         char *vconf_name = vconf_keynode_get_name(key);
260
261         if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
262                 SETTING_TRACE("status:%d", status);
263                 if (VCONFKEY_SYSMAN_MMC_MOUNTED == status) {
264                         __setting_memory_default_memory_update_item_status(
265                                                                 ad,FALSE);
266                 } else {
267                         __setting_memory_default_memory_update_item_status(
268                                                                 ad, TRUE);
269                 }
270         }
271 }
272
273 static void __setting_memory_default_memory_update_item_status(
274                                         void *data, bool disable_mmc_flag)
275 {
276         SETTING_TRACE_BEGIN;
277         setting_retm_if(NULL == data, "data is NULL");
278         SettingMemoryUG *ad = (SettingMemoryUG *)data;
279
280         setting_retm_if(NULL == ad->data_wap, "ad->data_wap is NULL");
281         setting_retm_if(NULL == ad->data_wap->item,
282                         "ad->data_wap->item is NULL");
283
284         Elm_Object_Item *list_item = ad->data_wap->item;
285         Setting_GenGroupItem_Data *data_sub_item = NULL;
286         while (list_item != NULL) {
287                 data_sub_item =
288                         (Setting_GenGroupItem_Data *)
289                                 elm_object_item_data_get(list_item);
290                 /* data_sub_item is seperator*/
291                 if (data_sub_item == NULL) {
292                         list_item = elm_genlist_item_next_get(list_item);
293                         continue;
294                 }
295                 SETTING_TRACE("keystr = %s", data_sub_item->keyStr);
296                 /* disable_mmc_flag is true, means mmc is not mounted*/
297                 if (disable_mmc_flag) {
298                         if (!safeStrCmp(data_sub_item->keyStr,
299                                         "IDS_COM_BODY_PHONE") &&
300                                 ! elm_genlist_item_selected_get(list_item)) {
301                                 elm_genlist_item_selected_set(list_item, 1);
302                         } else if (!safeStrCmp(data_sub_item->keyStr,
303                                              "IDS_COM_BODY_MEMORY_CARD")) {
304                                 elm_genlist_item_selected_set(list_item, 0);
305                                 setting_disable_genlist_item(list_item);
306                         }
307                 } else {
308                         if (!safeStrCmp(data_sub_item->keyStr,
309                                              "IDS_COM_BODY_MEMORY_CARD") &&
310                                 elm_object_item_disabled_get(list_item)) {
311                                 setting_enable_genlist_item(list_item);
312                         }
313                 }
314                 list_item = elm_genlist_item_next_get(list_item);
315         }
316
317         /* if mmc is not mounted, update vconf*/
318         if (disable_mmc_flag) {
319                 __setting_memory_default_memory_update_vconf(ad->data_wap);
320         }
321 }
322
323 static void __setting_memory_default_memory_update_vconf(void *data)
324 {
325         SETTING_TRACE_BEGIN;
326         setting_retm_if(NULL == data, "data is NULL");
327         Setting_GenGroupItem_Data *data_item = (Setting_GenGroupItem_Data *)data;
328         int err = 0;
329         int value = 0;
330         int ret = 0;
331
332         ret = setting_get_int_slp_key(
333                 data_item->int_slp_setting_binded, &value, &err);
334         setting_retm_if(0 != ret, "get vconf failed");
335
336         /* if mmc card is not mounted, set vconf by 0(phone) */
337         if (value != 0) {
338                 ret = setting_set_int_slp_key(
339                         data_item->int_slp_setting_binded, 0, &err);
340                 setting_retm_if(ret != 0, "Set vconf failed");
341
342                 G_FREE(data_item->sub_desc);
343                 data_item->sub_desc = (char *)g_strdup(_("IDS_COM_BODY_PHONE"));
344                 elm_object_item_data_set(data_item->item, data_item);
345                 elm_genlist_item_update(data_item->item);
346         }
347 }