mobile-lua: add additional LABELLED_BY relation
[profile/tv/apps/native/screen-reader.git] / src / screen_reader_vconf.c
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Flora License, Version 1.1 (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://floralicense.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 #include <Elementary.h>
18 #include <vconf.h>
19 #include "screen_reader_vconf.h"
20 #include "screen_reader_spi.h"
21 #include "logger.h"
22
23 #ifdef RUN_IPC_TEST_SUIT
24 #include "test_suite/test_suite.h"
25 #endif
26
27 #ifdef LOG_TAG
28 #undef LOG_TAG
29 #endif
30 #define LOG_TAG "SCREEN READER VCONF"
31
32 keylist_t *keys = NULL;
33
34 // ------------------------------ vconf callbacks----------------------
35
36 void app_termination_cb(keynode_t * node, void *user_data)
37 {
38         DEBUG("START");
39         DEBUG("Application terminate %d", !vconf_keynode_get_int(node));
40
41         Service_Data *service_data = user_data;
42         service_data->run_service = vconf_keynode_get_int(node);
43
44         if (service_data->run_service == 0) {
45                 elm_exit();
46         }
47
48         DEBUG("END");
49 }
50
51 void display_language_cb(keynode_t * node, void *user_data)
52 {
53         DEBUG("START");
54         DEBUG("Trying to set LC_MESSAGES to: %s", vconf_keynode_get_str(node));
55
56         Service_Data *sd = user_data;
57         snprintf(sd->display_language, LANGUAGE_NAME_SIZE, "%s", vconf_keynode_get_str(node));
58         //to make gettext work
59         setenv("LC_MESSAGES", sd->display_language, 1);
60
61         DEBUG("END");
62 }
63
64 // --------------------------------------------------------------------
65
66 int get_key_values(Service_Data * sd)
67 {
68         DEBUG("START");
69         int to_ret = 0;
70
71         char *display_language = vconf_get_str("db/menu_widget/language");
72         if (display_language) {
73                 snprintf(sd->display_language, LANGUAGE_NAME_SIZE, "%s", display_language);
74                 //to make gettext work
75                 setenv("LC_MESSAGES", sd->display_language, 1);
76                 free(display_language);
77         } else
78                 WARNING("Can't get db/menu_widget/language value");
79
80         DEBUG("SCREEN READER DATA SET TO: Display_Language: %s, Tracking signal: %s;", sd->display_language, sd->tracking_signal_name);
81
82         DEBUG("END");
83         return to_ret;
84 }
85
86 int _set_vconf_callback_and_print_message_on_error_and_return_error_code(const char *in_key, vconf_callback_fn cb, void *user_data)
87 {
88         int ret = vconf_notify_key_changed(in_key, cb, user_data);
89         if (ret != 0)
90                 DEBUG("Could not add notify callback to %s key", in_key);
91
92         return ret;
93 }
94
95 bool vconf_init(Service_Data * service_data)
96 {
97         DEBUG("--------------------- VCONF_init START ---------------------");
98         int ret = 0;
99
100         if (vconf_set(keys)) {
101                 DEBUG("nothing is written\n");
102         } else {
103                 DEBUG("everything is written\n");
104         }
105
106         vconf_keylist_free(keys);
107         // ----------------------------------------------------------------------------------
108
109         ret = get_key_values(service_data);
110         if (ret != 0) {
111                 DEBUG("Could not set data from vconf: %d", ret);
112         }
113
114         _set_vconf_callback_and_print_message_on_error_and_return_error_code("db/menu_widget/language", display_language_cb, service_data);
115
116         DEBUG("---------------------- VCONF_init END ----------------------\n\n");
117         return true;
118 }