896091fd70335e68dc8997302a4483e67dfc4a71
[platform/core/api/system-settings.git] / src / sst_interface.c
1 /*
2  * Copyright (c) 2020 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 "sst_interface.h"
17
18 #include <vconf.h>
19 #include "sst.h"
20 #include "sst_core.h"
21 #include "sst_font.h"
22 #include "sst_misc.h"
23 #include "sst_vconf.h"
24 #include "sst_screen.h"
25 #include "sst_feature.h"
26 #include "sst_ringtones.h"
27 #include "sst_time_N_locale.h"
28
29 #define SYSTEM_SETTINGS_MAX -1
30
31 struct _system_setting_s system_setting_table[] = {
32         {
33                 SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE,
34                 VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
35                 SYSTEM_SETTING_DATA_TYPE_STRING,
36                 sst_ringtone_get_incoming_call,
37                 sst_ringtone_set_incoming_call,
38                 sst_ringtone_add_incoming_call, /* ADD */
39                 sst_ringtone_del_incoming_call, /* DEL */
40                 sst_ringtone_list_incoming_call,        /* LIST */
41                 sst_feature_check_incoming_call,                /* feature check */
42         },
43
44         {
45                 SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN,
46                 VCONFKEY_BGSET,
47                 SYSTEM_SETTING_DATA_TYPE_STRING,
48                 sst_vconf_get,
49                 sst_screen_set_home_wallpaper,
50                 NULL,           /* ADD */
51                 NULL,           /* DEL */
52                 NULL,           /* LIST */
53                 sst_feature_check_home_screen,          /* feature check */
54         },
55
56         {
57                 SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN,
58                 VCONFKEY_IDLE_LOCK_BGSET,
59                 SYSTEM_SETTING_DATA_TYPE_STRING,
60                 sst_vconf_get,
61                 sst_screen_set_lock_wallpaper,
62                 NULL,           /* ADD */
63                 NULL,           /* DEL */
64                 NULL,           /* LIST */
65                 sst_feature_check_lock_screen,          /* feature check */
66         },
67
68         {
69                 SYSTEM_SETTINGS_KEY_FONT_SIZE,
70                 VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
71                 SYSTEM_SETTING_DATA_TYPE_INT,
72                 sst_vconf_get,
73                 sst_font_set_size,
74                 NULL,           /* ADD */
75                 NULL,           /* DEL */
76                 NULL,           /* LIST */
77                 sst_feature_check_font,         /* feature check */
78         },
79
80         {
81                 SYSTEM_SETTINGS_KEY_FONT_TYPE,
82                 VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
83                 SYSTEM_SETTING_DATA_TYPE_STRING,
84                 sst_vconf_get,
85                 sst_font_set_type,
86                 NULL,           /* ADD */
87                 NULL,           /* DEL */
88                 NULL,           /* LIST */
89                 sst_feature_check_font,         /* feature check */
90         },
91
92         {
93                 SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION,
94                 VCONFKEY_SETAPPL_MOTION_ACTIVATION,
95                 SYSTEM_SETTING_DATA_TYPE_BOOL,
96                 sst_vconf_get,
97                 sst_vconf_set,
98                 NULL,           /* ADD */
99                 NULL,           /* DEL */
100                 NULL,           /* LIST */
101                 NULL,           /* feature check */
102         },
103
104         {
105                 SYSTEM_SETTINGS_KEY_EMAIL_ALERT_RINGTONE,
106                 VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
107                 SYSTEM_SETTING_DATA_TYPE_STRING,
108                 sst_ringtone_get_email_alert,
109                 sst_ringtone_set_email_alert,
110                 NULL,           /* ADD */
111                 NULL,           /* DEL */
112                 NULL,           /* LIST */
113                 sst_feature_check_notification_email,           /* feature check */
114         },
115         {
116                 SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,
117                 VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
118                 SYSTEM_SETTING_DATA_TYPE_BOOL,
119                 sst_vconf_get,
120                 sst_vconf_set,
121                 NULL,           /* ADD */
122                 NULL,           /* DEL */
123                 NULL,           /* LIST */
124                 NULL,           /* feature check */
125         },
126         {
127                 SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED,
128                 VCONFKEY_3G_ENABLE,
129                 SYSTEM_SETTING_DATA_TYPE_BOOL,
130                 sst_vconf_get,
131                 sst_vconf_set,
132                 NULL,           /* ADD */
133                 NULL,           /* DEL */
134                 NULL,           /* LIST */
135                 NULL,           /* feature check */
136         },
137         //{ /* Deprecated */
138         //      -5, NULL, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, { NULL, 0 }, NULL
139         //},
140         {
141                 SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP,
142                 VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR,
143                 SYSTEM_SETTING_DATA_TYPE_STRING,
144                 sst_screen_get_lockscreen,
145                 sst_screen_set_lockscreen,
146                 NULL,           /* ADD */
147                 NULL,           /* DEL */
148                 NULL,           /* LIST */
149                 sst_feature_check_lock_screen,          /* feature check */
150         },
151         {
152                 SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
153                 NULL,
154                 SYSTEM_SETTING_DATA_TYPE_STRING,
155                 sst_font_get_default_type,
156                 NULL,
157                 NULL,           /* ADD */
158                 NULL,           /* DEL */
159                 NULL,           /* LIST */
160                 sst_feature_check_font,         /* feature check */
161         },
162         {
163                 SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
164                 VCONFKEY_REGIONFORMAT,
165                 SYSTEM_SETTING_DATA_TYPE_STRING,
166                 sst_locale_get_country,
167                 sst_locale_set_country,
168                 NULL,           /* ADD */
169                 NULL,           /* DEL */
170                 NULL,           /* LIST */
171                 NULL,           /* feature check */
172         },
173         {
174                 SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
175                 VCONFKEY_LANGSET,
176                 SYSTEM_SETTING_DATA_TYPE_STRING,
177                 sst_locale_get_language,
178                 sst_locale_set_language,
179                 NULL,           /* ADD */
180                 NULL,           /* DEL */
181                 NULL,           /* LIST */
182                 NULL,           /* feature check */
183         },
184         {
185                 SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
186                 VCONFKEY_REGIONFORMAT_TIME1224,
187                 SYSTEM_SETTING_DATA_TYPE_BOOL,
188                 sst_locale_get_timeformat_24hour,
189                 sst_locale_set_timeformat_24hour,
190                 NULL,           /* ADD */
191                 NULL,           /* DEL */
192                 NULL,           /* LIST */
193                 NULL,           /* feature check */
194         },
195         {
196                 SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE,
197                 VCONFKEY_SETAPPL_TIMEZONE_ID,
198                 SYSTEM_SETTING_DATA_TYPE_STRING,
199                 sst_locale_get_timezone,
200                 sst_locale_set_timezone,
201                 NULL,           /* ADD */
202                 NULL,           /* DEL */
203                 NULL,           /* LIST */
204                 NULL,           /* feature check */
205         },
206         {
207                 SYSTEM_SETTINGS_KEY_TIME_CHANGED,
208                 VCONFKEY_SYSTEM_TIME_CHANGED,
209                 SYSTEM_SETTING_DATA_TYPE_INT,
210                 sst_time_get_changed,
211                 NULL,
212                 NULL,           /* ADD */
213                 NULL,           /* DEL */
214                 NULL,           /* LIST */
215                 NULL,           /* feature check */
216         },
217         {
218                 SYSTEM_SETTINGS_KEY_SOUND_LOCK,
219                 VCONFKEY_SETAPPL_SOUND_LOCK_BOOL,
220                 SYSTEM_SETTING_DATA_TYPE_BOOL,
221                 sst_vconf_get,
222                 NULL,
223                 NULL,           /* ADD */
224                 NULL,           /* DEL */
225                 NULL,           /* LIST */
226                 NULL,           /* feature check */
227         },
228         {
229                 SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE,
230                 VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
231                 SYSTEM_SETTING_DATA_TYPE_BOOL,
232                 sst_get_sound_silent_mode,
233                 sst_set_sound_silent_mode,
234                 NULL,           /* ADD */
235                 NULL,           /* DEL */
236                 NULL,           /* LIST */
237                 NULL,           /* feature check */
238         },
239         {
240                 SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
241                 VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL,
242                 SYSTEM_SETTING_DATA_TYPE_BOOL,
243                 sst_vconf_get,
244                 sst_vconf_set,
245                 NULL,           /* ADD */
246                 NULL,           /* DEL */
247                 NULL,           /* LIST */
248                 NULL,           /* feature check */
249         },
250         {
251                 SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO,
252                 VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
253                 SYSTEM_SETTING_DATA_TYPE_BOOL,
254                 sst_vconf_get,
255                 sst_vconf_set,
256                 NULL,           /* ADD */
257                 NULL,           /* DEL */
258                 NULL,           /* LIST */
259                 NULL,           /* feature check */
260         },
261         {
262                 SYSTEM_SETTINGS_KEY_DEVICE_NAME,
263                 VCONFKEY_SETAPPL_DEVICE_NAME_STR,
264                 SYSTEM_SETTING_DATA_TYPE_STRING,
265                 sst_vconf_get,
266                 NULL,
267                 NULL,           /* ADD */
268                 NULL,           /* DEL */
269                 NULL,           /* LIST */
270                 NULL,           /* feature check */
271         },
272         {
273                 SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
274                 VCONFKEY_SETAPPL_MOTION_ACTIVATION,
275                 SYSTEM_SETTING_DATA_TYPE_BOOL,
276                 sst_vconf_get,
277                 NULL,
278                 NULL,           /* ADD */
279                 NULL,           /* DEL */
280                 NULL,           /* LIST */
281                 NULL,           /* feature check */
282         },
283         {
284                 SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
285                 VCONFKEY_WIFI_ENABLE_QS,
286                 SYSTEM_SETTING_DATA_TYPE_BOOL,
287                 sst_get_network_wifi_notification,
288                 NULL,
289                 NULL,           /* ADD */
290                 NULL,           /* DEL */
291                 NULL,           /* LIST */
292                 sst_feature_check_wifi,         /* feature check */
293         },
294         {
295                 SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
296                 VCONFKEY_TELEPHONY_FLIGHT_MODE,
297                 SYSTEM_SETTING_DATA_TYPE_BOOL,
298                 sst_vconf_get,
299                 NULL,
300                 NULL,           /* ADD */
301                 NULL,           /* DEL */
302                 NULL,           /* LIST */
303                 NULL,           /* feature check */
304         },
305         {
306                 SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME,
307                 VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL,
308                 SYSTEM_SETTING_DATA_TYPE_INT,
309                 sst_vconf_get,
310                 sst_screen_set_backlight_time,
311                 NULL,           /* ADD */
312                 NULL,           /* DEL */
313                 NULL,           /* LIST */
314                 NULL,           /* feature check */
315         },
316         {
317                 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION,
318                 VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
319                 SYSTEM_SETTING_DATA_TYPE_STRING,
320                 sst_vconf_get,
321                 sst_set_sound_notification,
322                 NULL,           /* ADD */
323                 NULL,           /* DEL */
324                 NULL,           /* LIST */
325                 sst_feature_check_incoming_call,                /* feature check */
326         },
327         {
328                 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD,
329                 VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
330                 SYSTEM_SETTING_DATA_TYPE_INT,
331                 sst_vconf_get,
332                 sst_vconf_set,
333                 NULL,           /* ADD */
334                 NULL,           /* DEL */
335                 NULL,           /* LIST */
336                 NULL,           /* feature check */
337         },
338         {
339                 SYSTEM_SETTINGS_KEY_LOCK_STATE,
340                 VCONFKEY_IDLE_LOCK_STATE_READ_ONLY,
341                 SYSTEM_SETTING_DATA_TYPE_INT,
342                 sst_vconf_get,
343                 sst_vconf_set,
344                 NULL,           /* add */
345                 NULL,           /* del */
346                 NULL,           /* list */
347                 NULL,           /* feature check */
348         },
349         {
350                 SYSTEM_SETTINGS_KEY_ADS_ID,
351                 VCONFKEY_SETAPPL_AD_ID,
352                 SYSTEM_SETTING_DATA_TYPE_STRING,
353                 sst_get_ads_id,
354                 sst_set_ads_id,
355                 NULL,           /* add */
356                 NULL,           /* del */
357                 NULL,           /* list */
358                 NULL,           /* feature check */
359         },
360
361         {
362                 SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE,
363                 VCONFKEY_SETAPPL_UDSM,
364                 SYSTEM_SETTING_DATA_TYPE_INT,
365                 sst_get_uds_state,
366                 NULL,
367                 NULL,           /* add */
368                 NULL,           /* del */
369                 NULL,           /* list */
370                 sst_feature_check_telephony,            /* feature check */
371         },
372         {
373                 SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST,
374                 VCONFKEY_SETAPPL_UDSM_PKGID_LIST,
375                 SYSTEM_SETTING_DATA_TYPE_STRING,
376                 NULL,
377                 NULL,
378                 NULL,           /* add */
379                 NULL,           /* del */
380                 NULL,           /* list */
381                 sst_feature_check_telephony,            /* feature check */
382         },
383         {
384                 SYSTEM_SETTINGS_KEY_ACCESSIBILITY_TTS,
385                 VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
386                 SYSTEM_SETTING_DATA_TYPE_BOOL,
387                 sst_vconf_get,
388                 sst_vconf_set,
389                 NULL,           /* ADD */
390                 NULL,           /* DEL */
391                 NULL,           /* LIST */
392                 NULL,           /* feature check */
393         },
394         {
395                 SYSTEM_SETTINGS_KEY_VIBRATION,
396                 VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
397                 SYSTEM_SETTING_DATA_TYPE_BOOL,
398                 sst_vconf_get,
399                 sst_vconf_set,
400                 NULL,           /* ADD */
401                 NULL,           /* DEL */
402                 NULL,           /* LIST */
403                 NULL,           /* feature check */
404         },
405         {
406                 SYSTEM_SETTINGS_KEY_AUTOMATIC_TIME_UPDATE,
407                 VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
408                 SYSTEM_SETTING_DATA_TYPE_BOOL,
409                 sst_vconf_get,
410                 sst_vconf_set,
411                 NULL,           /* ADD */
412                 NULL,           /* DEL */
413                 NULL,           /* LIST */
414                 sst_feature_check_telephony,            /* feature check */
415         },
416         {
417                 SYSTEM_SETTINGS_KEY_DEVELOPER_OPTION_STATE,
418                 VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE,
419                 SYSTEM_SETTING_DATA_TYPE_BOOL,
420                 sst_vconf_get,
421                 sst_vconf_set,
422                 NULL,           /* ADD */
423                 NULL,           /* DEL */
424                 NULL,           /* LIST */
425                 NULL,           /* feature check */
426         },
427         {
428                 SYSTEM_SETTINGS_KEY_ACCESSIBILITY_GRAYSCALE,
429                 VCONFKEY_SETAPPL_ACCESSIBILITY_GREYSCALE,
430                 SYSTEM_SETTING_DATA_TYPE_BOOL,
431                 sst_vconf_get,
432                 sst_vconf_set,
433                 NULL,           /* ADD */
434                 NULL,           /* DEL */
435                 NULL,           /* LIST */
436                 sst_feature_check_accessibility_grayscale,              /* feature check */
437         },
438         {
439                 SYSTEM_SETTINGS_KEY_ACCESSIBILITY_NEGATIVE_COLOR,
440                 VCONFKEY_SETAPPL_ACCESSIBILITY_HIGH_CONTRAST,
441                 SYSTEM_SETTING_DATA_TYPE_BOOL,
442                 sst_vconf_get,
443                 sst_vconf_set,
444                 NULL,           /* ADD */
445                 NULL,           /* DEL */
446                 NULL,           /* LIST */
447                 sst_feature_check_accessibility_negative,               /* feature check */
448         },
449         {
450                 SYSTEM_SETTINGS_KEY_ROTARY_EVENT_ENABLED,
451                 VCONFKEY_SETAPPL_ROTARY_EVENT_ENABLED_BOOL,
452                 SYSTEM_SETTING_DATA_TYPE_BOOL,
453                 sst_vconf_get,
454                 sst_vconf_set,
455                 NULL,           /* ADD */
456                 NULL,           /* DEL */
457                 NULL,           /* LIST */
458                 sst_feature_check_rotary,               /* feature check */
459         },
460         {
461                 SYSTEM_SETTINGS_MAX, NULL, -1, NULL, NULL, NULL, NULL, NULL, NULL
462         }
463 };
464
465 static int _search_item(system_settings_key_e key)
466 {
467         int start = 0;
468         int end = SYSTEM_SETTINGS_KEY_MAX;
469
470         while (start <= end) {
471                 int mid = (start + end) / 2;
472                 if (system_setting_table[mid].key == key)
473                         return mid;
474                 else if (system_setting_table[mid].key < key)
475                         start = mid + 1;
476                 else
477                         end = mid - 1;
478         }
479
480         ERR("key=%d, Can NOT find the key", key);
481         return -1;
482 }
483
484 int sst_get_interface(system_settings_key_e key, sst_interface **iface)
485 {
486         DBG("Enter");
487         RETVM_IF(key < 0 || SYSTEM_SETTINGS_KEY_MAX <= key,
488                 SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, "Invalid Key(%d)", key);
489
490         int idx = _search_item(key);
491         if (-1 == idx) {
492                 ERR("Unknown key(%d)", key);
493                 return TIZEN_ERROR_INVALID_PARAMETER;
494         }
495
496         if (system_setting_table[idx].feature_check_cb != NULL) {
497                 int ret = system_setting_table[idx].feature_check_cb(iface);
498                 if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
499                         ERR("feature_check_cb(%d) Fail(%d)", key, ret);
500                         return ret;
501                 }
502         }
503
504         *iface = &system_setting_table[idx];
505         INFO("key = %d, type = %d", key, (*iface)->data_type);
506
507         return SYSTEM_SETTINGS_ERROR_NONE;
508 }