Add multi-user support
[platform/core/api/system-settings.git] / TC_gui / main.c
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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 #include "main.h"
17 #include <system_settings.h>
18 #include <system_settings_private.h>
19
20 /* For multi-user support */
21 #include <tzplatform_config.h>
22
23 static void _quit_cb(void *data, Evas_Object* obj, void* event_info)
24 {
25     Evas_Object *win = (Evas_Object *) data;
26     elm_win_lower(win);
27 }
28
29 static Evas_Object* create_win(const char *name)
30 {
31     Evas_Object *eo;
32     int w, h;
33
34     eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
35     if (!eo) return NULL;
36
37     elm_win_title_set(eo, name);
38     elm_win_borderless_set(eo, EINA_TRUE);
39     elm_win_autodel_set(eo, EINA_TRUE);
40     evas_object_smart_callback_add(eo, "delete,request", _quit_cb, NULL);
41
42 #ifdef USE_X11
43     Ecore_X_Window xwin = 0;
44     xwin = elm_win_xwindow_get(eo);
45     if (xwin > 0) ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
46     else {
47 #endif
48 #ifdef USE_WAYLAND
49       Ecore_Wl_Window *wlwin = NULL;
50       wlwin = elm_win_wl_window_get(eo);
51       if (wlwin != NULL) ecore_wl_screen_size_get(&w, &h);
52 #endif
53 #ifdef USE_X11
54     }
55 #endif
56
57     evas_object_resize(eo, w, h);
58
59     return eo;
60 }
61
62 static Evas_Object* _create_bg(Evas_Object *parent)
63 {
64     Evas_Object *bg;
65
66     bg = elm_bg_add(parent);
67     evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
68     elm_win_resize_object_add(parent, bg);
69     evas_object_show(bg);
70
71     return bg;
72 }
73
74 static Evas_Object* _create_layout_main(Evas_Object* parent)
75 {
76     Evas_Object *layout;
77
78     layout = elm_layout_add(parent);
79
80     elm_layout_theme_set(layout, "layout", "application", "default");
81     evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
82     elm_win_resize_object_add(parent, layout);
83
84     evas_object_show(layout);
85
86     return layout;
87 }
88
89 static Evas_Object* _create_naviframe_layout(Evas_Object* parent)
90 {
91     Evas_Object *navi;
92
93     navi = elm_naviframe_add(parent);
94     elm_object_part_content_set(parent, "elm.swallow.content", navi);
95
96     evas_object_show(navi);
97
98     return navi;
99 }
100
101
102 static void _create_view_layout(struct appdata *ad)
103 {
104     Evas_Object *list;
105     Evas_Object *btn;
106
107     list = _create_list_winset(ad->win_main, ad);
108     btn = elm_button_add(ad->navi);
109     elm_object_style_set(btn, "naviframe/end_btn/default");
110     evas_object_smart_callback_add(btn, "clicked", _quit_cb, ad->win_main);
111     elm_naviframe_item_push(ad->navi, _("Tizen UI"), btn, NULL, list, NULL);
112 }
113
114 void list_item_touch_handler_exit(void* data, Evas_Object* obj, void* event_info)
115 {
116     elm_exit();
117 }
118
119 /**
120  * Huge
121  */
122 void list_item_touch_handler1(void* data, Evas_Object* obj, void* event_info)
123 {
124         int ret;
125     ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, SYSTEM_SETTINGS_FONT_SIZE_HUGE);
126     ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, "HelveticaNeue");
127 }
128
129 /**
130  * Normal
131  */
132 void list_item_touch_handler2(void* data, Evas_Object* obj, void* event_info)
133 {
134         int ret;
135
136         ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, SYSTEM_SETTINGS_FONT_SIZE_NORMAL);
137         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, "HelveticaNeue");
138 }
139
140 void list_item_touch_handler3(void* data, Evas_Object* obj, void* event_info)
141 {
142         int ret;
143         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, "HelveticaNeue");
144 }
145
146 void list_item_touch_handler4(void* data, Evas_Object* obj, void* event_info)
147 {
148         int ret;
149     ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, "HelveticaNeue");
150 }
151
152 void list_item_touch_handler5(void* data, Evas_Object* obj, void* event_info)
153 {
154         SETTING_TRACE(">>>>>>>> motion activation ON (SET)");
155         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, 1/*ON*/);
156
157         bool enableMotion = false;;
158         int errorcode = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &enableMotion);
159         SETTING_TRACE(">>>>>>>> motion activation (GET TEST  1) -- %d - errorcode : %d", enableMotion, errorcode);
160
161         SETTING_TRACE(">>>>>>>> motion activation ON (SET)");
162         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, 0/*ON*/);
163
164         errorcode = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &enableMotion);
165         SETTING_TRACE(">>>>>>>> motion activation (GET TEST  2) -- %d - errorcode : %d ", enableMotion, errorcode);
166 }
167
168 void list_item_touch_handler6(void* data, Evas_Object* obj, void* event_info)
169 {
170         SETTING_TRACE(">>>>>>>> motion activation OFF ");
171         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, 0/*OFF*/);
172 }
173
174 void system_settings_changed_font_size(system_settings_key_e key, void *user_data)
175 {
176         struct appdata* ad = (struct appdata*)user_data;
177         SETTING_TRACE(" font size -- %s ", ad->pkgname);
178         SETTING_TRACE(">>>>>>>> system_settings_changed_font_size key = %d ", key);
179         SETTING_TRACE("---------------------------------CALLED BY USER APPLICATION -FONT SIZE ");
180 }
181
182 void system_settings_changed_font_type(system_settings_key_e key, void *user_data)
183 {
184         struct appdata* ad = (struct appdata*)user_data;
185         SETTING_TRACE(" font type -- %s ", ad->pkgname);
186         SETTING_TRACE(">>>>>>>> system_settings_changed_font_type key = %d ", key);
187         SETTING_TRACE("---------------------------------CALLED BY USER APPLICATION -FONT TYPE ");
188 }
189
190 void system_settings_changed_motion_activation(system_settings_key_e key, void *user_data)
191 {
192         struct appdata* ad = (struct appdata*)user_data;
193         SETTING_TRACE(" motion type -- %s ", ad->pkgname);
194         SETTING_TRACE(">>>>>>>> system_settings_changed_motion_activation key = %d ", key);
195         SETTING_TRACE("---------------------------------CALLED BY USER APPLICATION-MOTION ACTIVIATION ");
196 }
197 void list_item_touch_handler7(void* data, Evas_Object* obj, void* event_info)
198 {
199         const char* path = tzplatform_mkpath(TZ_USER_CONTENT, "Images/image16.jpg");
200         int ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, "/aaa.png");
201         SETTING_TRACE(">>>>>>>> home screen - error case :: %d ", ret);
202
203         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, path);
204         SETTING_TRACE(">>>>>>>> home screen - error case :: %d ", ret);
205
206 }
207
208 void list_item_touch_handler8(void* data, Evas_Object* obj, void* event_info)
209 {
210         const char* path = tzplatform_mkpath(TZ_USER_CONTENT, "Images/image16.jpg");
211         int ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, "aaa.png");
212         SETTING_TRACE(">>>>>>>> lock screen - error case  : %d ", ret);
213
214         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, path);
215         SETTING_TRACE(">>>>>>>> lock screen - error case  : %d ", ret);
216 }
217
218 //      SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,  /**< Indicates whether the usb debugging is enabled */
219 // get 3g data network
220 void list_item_touch_handler9(void* data, Evas_Object* obj, void* event_info)
221 {
222         bool state = false;;
223         int errorcode = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED, &state);
224         SETTING_TRACE(">>>>>>>> 3G data network (GET TEST) -- %d - errorcode : %d ", state, errorcode);
225 }
226
227 // set 3g data network to ON
228 void list_item_touch_handler10(void* data, Evas_Object* obj, void* event_info)
229 {
230         SETTING_TRACE(">>>>>>>> set 3G data network to ON ");
231         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED, 1/*ON*/);
232 }
233
234 // set 3g data network to OFF
235 void list_item_touch_handler11(void* data, Evas_Object* obj, void* event_info)
236 {
237         SETTING_TRACE(">>>>>>>> set 3G data network to OFF ");
238         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED, 0/*OFF*/);
239 }
240
241 // get usg debugging
242 void list_item_touch_handler12(void* data, Evas_Object* obj, void* event_info)
243 {
244         bool state = false;;
245         int errorcode = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED, &state);
246         SETTING_TRACE(">>>>>>>> USB Debugging (GET TEST) -- %d - errorcode : %d ", state, errorcode);
247 }
248
249 // set USB debugging to ON
250 void list_item_touch_handler13(void* data, Evas_Object* obj, void* event_info)
251 {
252         SETTING_TRACE(">>>>>>>> set USB debugging to ON ");
253         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED, 1/*ON*/);
254 }
255
256 // set USB debugging to OFF
257 void list_item_touch_handler14(void* data, Evas_Object* obj, void* event_info)
258 {
259         SETTING_TRACE(">>>>>>>> set USB debugging to OFF ");
260         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED, 0/*OFF*/);
261 }
262
263 // get ringtone path
264 void list_item_touch_handler15(void* data, Evas_Object* obj, void* event_info)
265 {
266         SETTING_TRACE(">>>>>>>> get ringtone path ");
267         char *ringtonepath = NULL;
268         int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, &ringtonepath);
269         SETTING_TRACE("current ringtone path : (%s) ", ringtonepath);
270
271 }
272
273 // get ringtone path - exception case
274 void list_item_touch_handler16(void* data, Evas_Object* obj, void* event_info)
275 {
276         SETTING_TRACE(">>>>>>>> get ringtone path - exception case ");
277         int ret;
278         char *ringtonepath = NULL;
279         const char *path_to_mp3 = tzplatform_mkpath(TZ_SYS_SHARE, "settings/Ringtones/Over the horizon.mp3");
280
281         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, path_to_mp3);
282         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, &ringtonepath);
283         SETTING_TRACE(" 1 current ringtone path : (%s) ", ringtonepath);
284         // set the key to the wrong value
285         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, "aaa.wav");
286
287         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, &ringtonepath);
288         SETTING_TRACE("2 current ringtone path : (%s) ", ringtonepath);
289 }
290
291 static Evas_Object* _create_list_winset(Evas_Object* parent, struct appdata* ad)
292 {
293         Evas_Object *li;
294         int idx = 0;
295         //struct _menu_item *menu_its;
296         int ret;
297         ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE, system_settings_changed_font_size, ad);
298
299         ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE, system_settings_changed_font_type, ad);
300         if (ret < 0) {
301                 SETTING_TRACE("SYSTEM_SETTINGS_KEY_FONT_TYPE returns negative values = %d ", ret);
302         } else {
303                 SETTING_TRACE("SYSTEM_SETTINGS_KEY_FONT_TYPE returns positive values = %d, means successful return. ", ret);
304         }
305
306         // callback registration
307         ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, system_settings_changed_motion_activation, ad);
308         if (ret < 0) {
309                         SETTING_TRACE("SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION returns negative values = %d ", ret);
310         } else {
311                         SETTING_TRACE("SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION returns positive values = %d, means successful return. ", ret);
312         }
313
314         li = elm_list_add(parent);
315         elm_list_mode_set(li, ELM_LIST_COMPRESS);
316
317         elm_list_item_append( li, "QUIT", NULL, NULL, list_item_touch_handler_exit, ad);
318         elm_list_item_append( li, "font size - bigger ", NULL, NULL, list_item_touch_handler1, ad);
319         elm_list_item_append( li, "font size - normal ", NULL, NULL, list_item_touch_handler2, ad);
320         elm_list_item_append( li, "font type - choose Helvetica 1 ", NULL, NULL, list_item_touch_handler3, ad);
321         elm_list_item_append( li, "font type - choose Helvetica 2 ", NULL, NULL, list_item_touch_handler4, ad);
322         elm_list_item_append( li, "motion activation ON ", NULL, NULL, list_item_touch_handler5, ad);
323         elm_list_item_append( li, "motion activation OFF ", NULL, NULL, list_item_touch_handler6, ad);
324         elm_list_item_append( li, "homescreen - set ", NULL, NULL, list_item_touch_handler7, ad);
325         elm_list_item_append( li, "lockscreen - set ", NULL, NULL, list_item_touch_handler8, ad);
326
327         elm_list_item_append( li, "3g data network GET ", NULL, NULL, list_item_touch_handler9, ad);
328         elm_list_item_append( li, "3g data network SET - ON ", NULL, NULL, list_item_touch_handler10, ad);
329         elm_list_item_append( li, "3g data network SET - OFF ", NULL, NULL, list_item_touch_handler11, ad);
330
331         elm_list_item_append( li, "usb debugging GET ", NULL, NULL, list_item_touch_handler12, ad);
332         elm_list_item_append( li, "usb debugging SET - ON ", NULL, NULL, list_item_touch_handler13, ad);
333         elm_list_item_append( li, "usb debugging SET - OFF ", NULL, NULL, list_item_touch_handler14, ad);
334
335         elm_list_item_append( li, "get call ringtone ", NULL, NULL, list_item_touch_handler15, ad);
336         elm_list_item_append( li, "get call ringtone - exception ", NULL, NULL, list_item_touch_handler16, ad);
337         elm_list_go(li);
338         return li;
339 }
340
341 static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
342 {
343         //struct appdata *ad = (struct appdata *)data;
344     //Evas_Event_Mouse_Down *ev = event_info;
345
346 }
347
348 static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
349 {
350     //struct appdata *ad = (struct appdata *)data;
351
352 }
353
354 static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
355 {
356     //struct appdata *ad = (struct appdata *)data;
357 }
358
359 static void _window_resize_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
360 {
361     struct appdata *ad = (struct appdata *)data;
362     evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
363 }
364
365 static int _rotation_cb(enum appcore_rm mode, void *data)
366 {
367     struct appdata *ad = (struct appdata *)data;
368     int angle;
369
370     switch (mode) {
371         case APPCORE_RM_LANDSCAPE_NORMAL:
372             angle = -90;
373             break;
374
375         case APPCORE_RM_LANDSCAPE_REVERSE:
376             angle = 90;
377             break;
378
379         case APPCORE_RM_PORTRAIT_REVERSE:
380             angle = 180;
381             break;
382
383         case APPCORE_RM_UNKNOWN:
384         case APPCORE_RM_PORTRAIT_NORMAL:
385         default:
386             angle = 0;
387             break;
388     }
389
390     elm_win_rotation_with_resize_set(ad->win_main, angle);
391     // set_rotation_degree(angle);
392
393     // This is need for customized rotation process.
394     // rotate_for_winset(mode);
395
396     return 0;
397 }
398
399 int app_create(void *data)
400 {
401     struct appdata *ad = (struct appdata *) data;
402
403     // Set the engine to opengl_x11
404     //elm_config_engine_set("opengl_x11");
405
406     ad->win_main = create_win(PACKAGE);
407
408     evas_object_event_callback_add(ad->win_main, EVAS_CALLBACK_RESIZE, _window_resize_cb, ad);
409     evas_object_show(ad->win_main);
410     ad->evas = evas_object_evas_get(ad->win_main);
411     appcore_set_rotation_cb(_rotation_cb, ad);
412
413     // set_edj_name(NULL);
414
415         ad->bg = _create_bg(ad->win_main);
416         ad->layout_main = _create_layout_main(ad->win_main);
417         elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
418
419         ad->navi = _create_naviframe_layout(ad->layout_main);
420
421         _create_view_layout(ad);
422
423     evas_object_event_callback_add(ad->navi, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, ad);
424     evas_object_event_callback_add(ad->navi, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb,  ad);
425     evas_object_event_callback_add(ad->navi, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, ad);
426
427     return 0;
428 }
429
430 int app_terminate(void *data)
431 {
432         //struct appdata *ad = data;
433
434         int ret;
435         // unregistration
436         ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE);
437         ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE);
438         ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION);
439         return 0;
440 }
441
442 int app_pause(void *data)
443 {
444         //struct appdata *ad = data;
445
446     return 0;
447 }
448
449 int app_resume(void *data)
450 {
451     //struct appdata *ad = data;
452
453     return 0;
454 }
455
456 int app_reset(bundle* b, void* data)
457 {
458         struct appdata* ad = data;
459
460         if (ad->win_main)
461                 elm_win_activate(ad->win_main);
462
463         return 0;
464 }
465
466
467 int main(int argc, char* argv[])
468 {
469         struct appdata ad;
470
471         ad.pkgname = "ARGUMENTATION SUCCESS *********************************";
472
473         struct appcore_ops ops = {
474                 .create = app_create,
475                 .terminate = app_terminate,
476                 .pause = app_pause,
477                 .resume = app_resume,
478                 .reset = app_reset
479         };
480
481         ops.data = &ad;
482
483         return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
484 }