new release for RSA
[platform/core/api/system-settings.git] / src / system_settings.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
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20
21 #include <vconf.h>
22 #include <dlog.h>
23
24 #include <system_settings.h>
25 #include <system_settings_private.h>
26
27 #include <glib.h>
28
29
30 #ifdef LOG_TAG
31 #undef LOG_TAG
32 #endif
33
34 #define LOG_TAG "TIZEN_N_SYSTEM_SETTINGS"
35
36 #define SYSTEM_SETTINGS_MAX -1
37
38
39
40 system_setting_s system_setting_table[] = {
41
42         {
43                 SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE,
44                 SYSTEM_SETTING_DATA_TYPE_STRING,
45                 system_setting_get_incoming_call_ringtone,
46                 system_setting_set_incoming_call_ringtone,
47                 system_setting_set_changed_callback_incoming_call_ringtone,
48                 system_setting_unset_changed_callback_incoming_call_ringtone,
49                 NULL
50         }, 
51
52         {
53                 SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN,
54                 SYSTEM_SETTING_DATA_TYPE_STRING,
55                 system_setting_get_wallpaper_home_screen,
56                 system_setting_set_wallpaper_home_screen,
57                 system_setting_set_changed_callback_wallpaper_home_screen,
58                 system_setting_unset_changed_callback_wallpaper_home_screen,
59                 NULL
60         },
61
62         {
63                 SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN,
64                 SYSTEM_SETTING_DATA_TYPE_STRING,
65                 system_setting_get_wallpaper_lock_screen,
66                 system_setting_set_wallpaper_lock_screen,
67                 system_setting_set_changed_callback_wallpaper_lock_screen,
68                 system_setting_unset_changed_callback_wallpaper_lock_screen,
69                 NULL
70         },
71
72         {
73                 SYSTEM_SETTINGS_KEY_FONT_SIZE,
74                 SYSTEM_SETTING_DATA_TYPE_INT,
75                 system_setting_get_font_size,
76                 system_setting_set_font_size,
77                 system_setting_set_changed_callback_font_size,
78                 system_setting_unset_changed_callback_font_size,
79                 NULL
80         },
81
82         {
83                 SYSTEM_SETTINGS_KEY_FONT_TYPE,
84                 SYSTEM_SETTING_DATA_TYPE_STRING,
85                 system_setting_get_font_type,
86                 system_setting_set_font_type,
87                 system_setting_set_changed_callback_font_type,
88                 system_setting_unset_changed_callback_font_type,
89                 NULL
90         },
91
92         {
93                 SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION,
94                 SYSTEM_SETTING_DATA_TYPE_BOOL,
95                 system_setting_get_motion_activation,
96                 system_setting_set_motion_activation,
97                 system_setting_set_changed_callback_motion_activation,
98                 system_setting_unset_changed_callback_motion_activation,
99                 NULL
100         },
101         {
102                 SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL
103         }
104 };
105
106 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
107 {
108     int index = 0;
109
110     while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX)
111     {   
112         if (system_setting_table[index].key == key)
113         {   
114             *item = &system_setting_table[index];
115             return 0;
116         }   
117
118         index++;
119     }   
120
121     return -1; 
122 }
123
124 int system_settings_get_value(system_settings_key_e key, system_setting_data_type_e data_type, void** value)
125 {
126     system_setting_h system_setting_item;
127         system_setting_get_value_cb     system_setting_getter;
128
129     if (system_settings_get_item(key, &system_setting_item))
130     {
131         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
132         return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
133     }
134
135     if (system_setting_item->data_type != data_type)
136     {
137         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
138         return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
139     }
140
141         printf("assigned getter \n");
142     system_setting_getter = system_setting_item->get_value_cb;
143
144     if (system_setting_getter == NULL)
145     {
146         LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
147         return SYSTEM_SETTINGS_ERROR_IO_ERROR;
148     }
149
150     return system_setting_getter(key, system_setting_item->data_type, value);
151 }
152
153 int system_settings_set_value(system_settings_key_e key, system_setting_data_type_e data_type, void* value)
154 {
155         system_setting_h system_setting_item;
156         system_setting_set_value_cb     system_setting_setter;
157
158     if (system_settings_get_item(key, &system_setting_item))
159     {
160         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
161         return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
162     }
163
164         printf("assigned setter \n");
165     system_setting_setter = system_setting_item->set_value_cb;
166
167     if (system_setting_setter == NULL)
168     {
169         LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
170         return SYSTEM_SETTINGS_ERROR_IO_ERROR;
171     }
172
173     return system_setting_setter(key, system_setting_item->data_type, value);
174 }
175
176 // typedef int (*system_setting_set_value_cb) (system_settings_key_e key, system_setting_data_type_e data_type, void* value);
177 int system_settings_set_value_int(system_settings_key_e key, int value)
178 {
179         printf("[MOCK] system_settings_set_value_int - value = %d \n", value);
180
181         // TODO: make sure the value is inside of enum.
182         int* ptr = &value;
183         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_INT,(void*)ptr);
184 }
185
186 int system_settings_get_value_int(system_settings_key_e key, int *value)
187 {
188         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void**)value);
189 }
190
191 int system_settings_set_value_bool(system_settings_key_e key, bool value)
192 {
193         printf("[MOCK] system_settings_set_value_bool - value = %d \n", value);
194         bool* ptr = &value;
195         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL,(void*)ptr);
196 }
197
198 int system_settings_get_value_bool(system_settings_key_e key, bool *value)
199 {
200         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void**)value);
201 }
202
203 int system_settings_set_value_double(system_settings_key_e key, double value)
204 {
205         printf("[MOCK] system_settings_set_value_double - value = %f \n", value);
206         double* ptr = &value;
207         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_DOUBLE,(void*)ptr);
208 }
209
210 int system_settings_get_value_double(system_settings_key_e key, double *value)
211 {
212         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_DOUBLE, (void**)value);
213 }
214
215 int system_settings_set_value_string(system_settings_key_e key, const char *value)
216 {
217         printf("[MOCK] system_settings_set_value_string - input string : %s \n", value);
218         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_STRING,(void*)value);
219 }
220
221 int system_settings_get_value_string(system_settings_key_e key, char **value)
222 {
223         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void**)value);
224 }
225
226
227 /*
228         - START
229                 - system_settings_set_changed_cb
230                         -> int (*system_setting_set_changed_callback_cb)(key, callback, user_data)
231 */
232
233 /*PUBLIC*/
234 int system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
235 {
236         printf("system_settings_set_changed_cb \n");
237
238     system_setting_h system_setting_item;
239         system_setting_set_changed_callback_cb system_setting_set_changed_cb;
240
241     if (system_settings_get_item(key, &system_setting_item))
242     {
243         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
244         return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
245     }
246
247         system_setting_set_changed_cb = system_setting_item->set_changed_cb;
248
249         // Store the callback function from application side
250         if (callback)
251                 system_setting_item->changed_cb = callback;
252
253     if (system_setting_set_changed_cb == NULL)
254     {
255         LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
256         return SYSTEM_SETTINGS_ERROR_IO_ERROR;
257     }
258
259         return system_setting_set_changed_cb(key, callback, user_data);
260 }
261
262
263 int system_settings_unset_changed_cb(system_settings_key_e key)
264 {
265         printf("system_settings_unset_changed_cb \n");
266
267     system_setting_h system_setting_item;
268         system_setting_unset_changed_callback_cb system_setting_unset_changed_cb;
269
270     if (system_settings_get_item(key, &system_setting_item))
271     {
272         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
273         return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
274     }
275
276         system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
277
278         // free the callback function from application side
279         if (system_setting_item->changed_cb)
280                 system_setting_item->changed_cb = NULL;
281         //-----------------------------------------------------
282
283     if (system_setting_unset_changed_cb == NULL)
284     {
285         LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
286         return SYSTEM_SETTINGS_ERROR_IO_ERROR;
287     }
288
289         return system_setting_unset_changed_cb(key);
290 }
291