17a9811c334b732a4762dd0f3c079fd5b71828ff
[apps/home/settings.git] / src / setting-helper.c
1 #include <setting-helper.h>
2
3 static bool __vcui_doc_rcs_ug_account_cb(account_h account, void *user_data)
4 {
5         SETTING_TRACE_BEGIN;
6         bool *temp = (bool *)user_data;
7         *temp = TRUE;
8         return FALSE;
9 }
10
11 bool vcui_doc_rcs_get_install_status(void)
12 {
13         SETTING_TRACE_BEGIN;
14         int ret;
15         bool b_rcs_support = FALSE;
16
17         ret = account_connect();
18         if (ret != ACCOUNT_ERROR_NONE) {
19                 SETTING_TRACE_ERROR("Failed to connect [%d]", ret);
20                 return FALSE;
21         }
22
23         ret = account_query_account_by_capability_type(__vcui_doc_rcs_ug_account_cb, "joyn.samsung.com", (void *)&b_rcs_support);
24         switch (ret) {
25                 case ACCOUNT_ERROR_INVALID_PARAMETER:
26                         SETTING_TRACE("Failed to query account [INVALID PARAM]");
27                         break;
28                 case ACCOUNT_ERROR_DB_FAILED:
29                         SETTING_TRACE("Failed to query account [DB OP FAIL]");
30                         break;
31                 case ACCOUNT_ERROR_NONE:
32                         SETTING_TRACE("Success to query account");
33                         break;
34                 default:
35                         SETTING_TRACE("Failed to query account [0x%08X]", ret);
36                         break;
37         }
38
39         ret = account_disconnect();
40         if (ret != ACCOUNT_ERROR_NONE) {
41                 SETTING_TRACE_ERROR("Failed to disconnect [%d]", ret);
42         }
43
44         SETTING_TRACE("b_rcs_support is (%d)...", b_rcs_support);
45         return b_rcs_support;
46 }
47 bool is_selected_menu(Eina_List *list, const char *keystr)
48 {
49         while (list) {
50                 char *str = eina_list_data_get(list);
51                 if (NULL == str)
52                         continue;
53                 if (0 == safeStrCmp(keystr, str))
54                         return TRUE;
55                 list = eina_list_next(list);
56         }
57         return FALSE;
58 }
59
60 Eina_Bool setting_main_freeze_event_timer_cb(void *cb)
61 {
62         SETTING_TRACE_BEGIN;
63         retv_if(cb == NULL, EINA_FALSE);
64
65         setting_main_appdata *ad = (setting_main_appdata *)cb;
66
67         evas_object_freeze_events_set(ad->navibar_main, EINA_FALSE);
68         ad->event_freeze_timer = NULL;
69         return EINA_FALSE;
70 }
71
72 /**
73  * @brief preset all pointers to NULL
74  *
75  * [CIS UI]
76  *
77  * @bug this code may make dangling pointers,
78  * in setting_vconf_int_xxx callback refer to ad->data_xxxx ptrs.
79  * if it's NULL, what happen?
80  */
81 void setting_main_genlist_handler_reset(void *data)
82 {
83         SETTING_TRACE_BEGIN;
84         retm_if(data == NULL, "Invalid argument: data is NULL");
85         setting_main_appdata *ad = data;
86
87         ad->data_joyn = NULL;
88         ad->data_flight = NULL;
89         ad->data_multi_window = NULL;
90         ad->data_netrestrictionmode = NULL;
91         ad->data_wifi = NULL;
92         ad->data_bt = NULL;
93         ad->data_mobileApp = NULL;
94         ad->data_bright = NULL;
95         ad->data_backlight = NULL;
96         ad->data_battery = NULL;
97         ad->data_landscape = NULL;
98         ad->data_screentone = NULL;
99         ad->data_screenmode = NULL;
100         ad->data_touchkey_light_duration = NULL;
101         ad->data_powersaving = NULL;
102         ad->data_driving = NULL;
103         ad->data_blocking = NULL;
104         ad->data_personalpage = NULL;
105         ad->data_guest = NULL;
106         ad->data_high_touch_sensitivity = NULL;
107
108         ad->data_moreSystem = NULL;
109         ad->data_moreConnect = NULL;
110         ad->data_nfc = NULL;
111         ad->data_sbeam = NULL;
112         ad->data_motion = NULL;
113         ad->data_palmmotion = NULL;
114         ad->data_nearby_devices = NULL;
115         ad->data_network = NULL;
116
117         SETTING_TRACE_END;
118 }
119
120 void setting_main_genlist_handler_set(void *data, int viewtype)
121 {
122         retm_if(data == NULL, "Invalid argument: data is NULL");
123         setting_main_appdata *ad = data;
124
125         if (ad->data_joyn) {
126                 ad->gl_data_item[viewtype][GL_Joyn] = ad->data_joyn;
127                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Joyn]);
128         }
129         if (ad->data_flight) {
130                 ad->gl_data_item[viewtype][GL_FlightMode] = ad->data_flight;
131                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_FlightMode]);
132         }
133         if (ad->data_multi_window) {
134                 ad->gl_data_item[viewtype][GL_MultiWin] = ad->data_multi_window;
135                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_MultiWin]);
136         }
137         if (ad->data_netrestrictionmode) {
138                 ad->gl_data_item[viewtype][GL_NetRestriction] = ad->data_netrestrictionmode;
139                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_NetRestriction]);
140         }
141         if (ad->data_wifi) {
142                 ad->gl_data_item[viewtype][GL_WiFi] = ad->data_wifi;
143                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_WiFi]);
144         }
145         if (ad->data_bt) {
146                 ad->gl_data_item[viewtype][GL_BT] = ad->data_bt;
147                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_BT]);
148         }
149         if (ad->data_mobileApp) {
150                 ad->gl_data_item[viewtype][GL_MobileApp] = ad->data_mobileApp;
151                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_MobileApp]);
152         }
153         if (ad->data_bright) {
154
155                 ad->gl_data_item[viewtype][GL_Bright] = ad->data_bright;
156                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Bright]);
157         }
158         if (ad->data_backlight) {
159                 ad->gl_data_item[viewtype][GL_Backlight] = ad->data_backlight;
160                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Backlight]);
161         }
162         if (ad->data_battery) {
163                 ad->gl_data_item[viewtype][GL_Battery] = ad->data_battery;
164                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Battery]);
165         }
166         if (ad->data_landscape) {
167                 ad->gl_data_item[viewtype][GL_Landscape] = ad->data_landscape;
168                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Landscape]);
169         }
170         if (ad->data_screentone) {
171                 ad->gl_data_item[viewtype][GL_Screentone] = ad->data_screentone;
172                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Screentone]);
173         }
174         if (ad->data_screenmode) {
175                 ad->gl_data_item[viewtype][GL_Screenmode] = ad->data_screenmode;
176                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Screenmode]);
177         }
178         if (ad->data_touchkey_light_duration) {
179                 ad->gl_data_item[viewtype][GL_TouchkeyLight] = ad->data_touchkey_light_duration;
180                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_TouchkeyLight]);
181         }
182         if (ad->data_powersaving) {
183                 ad->gl_data_item[viewtype][GL_PM] = ad->data_powersaving;
184                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_PM]);
185         }
186         if (ad->data_driving) {
187                 ad->gl_data_item[viewtype][GL_DM] = ad->data_driving;
188                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_DM]);
189         }
190         if (ad->data_blocking) {
191                 ad->gl_data_item[viewtype][GL_BM] = ad->data_blocking;
192                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_BM]);
193         }
194         if (ad->data_personalpage) {
195                 ad->gl_data_item[viewtype][GL_PersonalPage] = ad->data_personalpage;
196                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_PersonalPage]);
197         }
198         if (ad->data_guest) {
199                 ad->gl_data_item[viewtype][GL_GuestMode] = ad->data_guest;
200                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_GuestMode]);
201         }
202         if (ad->data_high_touch_sensitivity) {
203                 ad->gl_data_item[viewtype][GL_TouchSens] = ad->data_high_touch_sensitivity;
204                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_TouchSens]);
205         }
206         if (ad->data_nfc) {
207                 ad->gl_data_item[viewtype][GL_NFC] = ad->data_nfc;
208                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_NFC]);
209         }
210         if (ad->data_sbeam) {
211                 ad->gl_data_item[viewtype][GL_SBeam] = ad->data_sbeam;
212                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_SBeam]);
213         }
214         if (ad->data_motion) {
215                 ad->gl_data_item[viewtype][GL_Motion] = ad->data_motion;
216                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Motion]);
217         }
218         if (ad->data_palmmotion) {
219                 ad->gl_data_item[viewtype][GL_PalmMotion] = ad->data_palmmotion;
220                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_PalmMotion]);
221         }
222
223         if (ad->data_nearby_devices) {
224                 ad->gl_data_item[viewtype][GL_NearByDev] = ad->data_nearby_devices;
225                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_NearByDev]);
226         }
227         if (ad->data_network) {
228                 ad->gl_data_item[viewtype][GL_Network] = ad->data_network;
229                 __BACK_POINTER_SET(ad->gl_data_item[viewtype][GL_Network]);
230         }
231 }
232
233 bool is_searchmode_app(Cfg_Item_Type type)
234 {
235         bool ret = false;
236
237         switch (type % 10) {
238                 case Cfg_Item_Ug_Node:                          /* ug run */
239                 case Cfg_Item_App_Node:                         /* docomo run */
240                 case Cfg_Item_View_Node:                        /* n-depth search */
241                 case Cfg_Item_AppLauncher_Node:         /* app launch */
242                         ret = true;
243                         break;
244
245                 case Cfg_Item_Ui_Node:
246                 case Cfg_Item_Title_Node:
247                         ret = false;
248                         break;
249
250                 default:
251                         ret = false;
252                         break;
253         }
254         return ret;
255 }
256
257 void setting_main_click_list_item_reset_data(void *data,
258                                              Evas_Object *obj)
259 {
260         /*SETTING_TRACE_BEGIN; */
261         setting_main_appdata *ad = (setting_main_appdata *) data;
262
263         ad->isInUGMode = FALSE;
264
265         /*SETTING_TRACE_END; */
266 }
267
268
269 void setting_main_destroy_ug_cb(ui_gadget_h ug, void *priv)
270 {
271         setting_main_appdata *ad = (setting_main_appdata *) priv;
272         setting_retm_if(!ad, "ad is NULL");
273
274         if (ad->search_selected_item_data && ad->search_selected_item_data->item) {
275                 elm_genlist_item_fields_update(ad->search_selected_item_data->item,
276                                                "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
277                 ad->search_selected_item_data = NULL;
278         }
279
280         if (ug) {
281                 setting_ug_destroy(ug);
282         }
283
284         SETTING_TRACE("ad->ug:%p", ad->ug);
285         SETTING_TRACE("g_main_ad->isInUGMode:%d", g_main_ad->isInUGMode);
286         SETTING_TRACE("g_main_ad->ug:%p", g_main_ad->ug);
287
288         if (is_searchmode_app(ad->is_searchmode)) {
289                 /*ug_destroy(parent); */
290                 if (ad->ug) {
291                         ug_destroy_me(ad->ug);
292                         ad->ug = NULL;
293                 }
294
295                 /*SETTING_TRACE("terminate app !!!!!! "); */
296                 elm_exit();
297                 return;
298         }
299
300         elm_object_tree_focus_allow_set(ad->ly_main, TRUE);
301         ea_screen_reader_support_set(ad->ly_main, TRUE);
302
303         /* restoring keypad state */
304         /*setting_conformant_keypad_state(ad->win_main, FALSE); */
305
306         setting_main_click_list_item_reset_data(ad, NULL);
307         Evas_Object *eo = elm_object_item_access_object_get(ad->ctrl_item[ad->view_type]);
308         if (eo) {
309                 elm_object_focus_set(eo, TRUE);
310         }
311         SETTING_TRACE("update main genlist in unloading UG");
312         SETTING_TRACE("ad->ug:%p", ad->ug);
313         SETTING_TRACE("g_main_ad->isInUGMode:%d", g_main_ad->isInUGMode);
314         SETTING_TRACE("g_main_ad->ug:%p", g_main_ad->ug);
315         SETTING_TRACE_END;
316 }
317
318 void setting_main_result_ug_cb(ui_gadget_h ug, app_control_h service,
319                                void *priv)
320 {
321         if (!priv) {
322                 return;
323         }
324         SETTING_TRACE_BEGIN;
325         setting_main_appdata *ad = (setting_main_appdata *) priv;
326
327         if (service) {
328                 char *webkit_address = NULL;
329                 app_control_get_extra_data(service, "webkit_address", &webkit_address);
330                 if (webkit_address == NULL) {
331                         SETTING_TRACE("webkit_address is NULL");
332                         ad->webkit = NULL;
333                         return;
334                 }
335                 SETTING_TRACE("webkit_address = %s", webkit_address);
336
337                 int adress = (int) g_ascii_strtod(webkit_address, NULL);
338                 if (errno == ERANGE) {
339                         SETTING_TRACE_ERROR("fail to call g_ascii_strtod");
340                         ad->webkit = NULL;
341                 } else {
342                         SETTING_TRACE("adress = %d", adress);
343                         ad->webkit = (Evas_Object *)adress;
344                         SETTING_TRACE("webkit = %p", ad->webkit);
345                 }
346                 FREE(webkit_address);
347         }
348
349         SETTING_TRACE_END;
350 }
351
352 void setting_main_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
353                                void *priv)
354 {
355         /*setting_main_appdata *ad = (setting_main_appdata *) priv; */
356         Evas_Object *base;
357
358         if (!priv) {
359                 return;
360         }
361         SETTING_TRACE_BEGIN;
362
363         base = (Evas_Object *) ug_get_layout(ug);
364         if (!base) {
365                 return;
366         }
367
368
369         switch (mode) {
370                 case UG_MODE_FULLVIEW:
371                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
372                                                          EVAS_HINT_EXPAND);
373                         /*elm_win_resize_object_add(ad->win_main, base); */
374                         evas_object_show(base);
375                         break;
376                 default:
377                         break;
378         }
379
380         /*SETTING_TRACE_END; */
381 }