Fix to check SYSTEM_SETTINGS_KEY_AUTOMATIC_TIME_UPDATE feature
[platform/core/api/system-settings.git] / src / sst_screen.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_screen.h"
17
18 #include <stdlib.h>
19 #include <dlfcn.h>
20 #include <pkgmgr-info.h>
21 #include <vconf.h>
22 #include "sst.h"
23 #include "sst_vconf.h"
24 #include "sst_exclusive.h"
25 #include "sst_utils_wrapper.h"
26
27 int sst_screen_set_backlight_time(sst_interface *iface, int value)
28 {
29         if (value < 0 || 600 < value) {
30                 ERR("Invalid Value(%d)", value);
31                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
32         }
33
34         if (vconf_set_int(iface->vconf_key, value)) {
35                 ERR("vconf_set_int(%s, %d) Fail", iface->vconf_key, value);
36                 /* vconf_set_int returns error with 0 value,
37                    that means there is no write privilege about lcd back light time */
38                 return value? SYSTEM_SETTINGS_ERROR_IO_ERROR: SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
39         }
40
41         return SYSTEM_SETTINGS_ERROR_NONE;
42 }
43
44 int sst_screen_set_home_wallpaper(sst_interface *iface, const char *value)
45 {
46         bool valid = sstu_is_valid_image(value);
47         if (false == valid) {
48                 ERR("Invalid image file(%s)", value);
49                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
50         }
51
52         return sst_excl_set_wallpaper(iface->vconf_key, value);
53 }
54
55 int sst_screen_set_lock_wallpaper(sst_interface *iface, const char *value)
56 {
57         bool valid = sstu_is_valid_image(value);
58         if (false == valid) {
59                 ERR("Invalid image file(%s)", value);
60                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
61         }
62
63         if (vconf_set_str(iface->vconf_key, value)) {
64                 ERR("vconf_set_str(%s, %s) Fail", iface->vconf_key, value);
65                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
66         }
67
68         return SYSTEM_SETTINGS_ERROR_NONE;
69 }
70
71 static int _category_func(const char *name, void *user_data)
72 {
73         const char *category = "lock-screen";
74         bool *found = user_data;
75
76         RETV_IF(NULL == name, PMINFO_R_OK);
77
78         if (SST_EQUAL == strcmp(name, category)) {
79                 *found = true;
80                 return PMINFO_R_ERROR; //not Error. It stops iteration.
81         } else {
82                 DBG("Unexpeced category(%s)", name);
83                 return PMINFO_R_OK;
84         }
85
86         return PMINFO_R_OK;
87 }
88
89 /**
90  * set 'swipe type' if current lockscreen app is 'com.samsung.lockscreen'
91  */
92 int sst_screen_set_lockscreen(sst_interface *iface, const char *app_id)
93 {
94         int ret;
95
96         RETV_IF(NULL == app_id, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
97         //ex) app_id = com.samsung.lockscreen
98
99         pkgmgrinfo_appinfo_h handle = NULL;
100         ret = pkgmgrinfo_appinfo_get_appinfo(app_id, &handle);
101         if (PMINFO_R_OK != ret) {
102                 ERR("pkgmgrinfo_appinfo_get_appinfo(%s) Fail(%d)", app_id, ret);
103                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
104         }
105
106         bool is_lock_screen = false;
107         ret = pkgmgrinfo_appinfo_foreach_category(handle, _category_func, &is_lock_screen);
108         if (ret != PMINFO_R_OK) {
109                 ERR("pkgmgrinfo_appinfo_foreach_category() Fail(%d)", ret);
110                 pkgmgrinfo_appinfo_destroy_appinfo(handle);
111                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
112         }
113         pkgmgrinfo_appinfo_destroy_appinfo(handle);
114
115         if (false == is_lock_screen) {
116                 ERR("Invalid Application(%s)", app_id);
117                 //Todo: It should be enable.
118                 //return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
119         }
120
121         int locktype = -1;
122         if (vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &locktype)) {
123                 ERR("vconf_get_int(lock_type) Fail");
124                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
125         }
126
127         if (locktype == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
128                 ERR("Unsupported lock type");
129                 return SYSTEM_SETTINGS_ERROR_LOCKSCREEN_APP_PASSWORD_MODE;
130         }
131
132         if (vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, app_id)) {
133                 ERR("vconf_set_str(3rd lock pkg) Fail");
134                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
135         }
136
137         if (SST_EQUAL == strcmp(app_id, "com.samsung.lockscreen")) {
138                 const char *lock_type_key = VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT;
139                 if (vconf_set_int(lock_type_key, SETTING_SCREEN_LOCK_TYPE_SWIPE)) {
140                         ERR("vconf_set_int(%s) Fail", lock_type_key);
141                         return SYSTEM_SETTINGS_ERROR_IO_ERROR;
142                 }
143         }
144         return SYSTEM_SETTINGS_ERROR_NONE;
145 }
146
147 int sst_screen_get_lockscreen(sst_interface *iface, char **value)
148 {
149         char *pkg_name = NULL;
150
151         int locktype = -1;
152         if (vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &locktype)) {
153                 ERR("vconf_get_int(lock_type) Fail");
154                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
155         }
156
157         if (sst_vconf_get_str_ally(iface->vconf_key, &pkg_name)) {
158                 ERR("sst_vconf_get_str_ally(%s) Fail", iface->vconf_key);
159                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
160         }
161
162         if (SST_EQUAL == strcmp(pkg_name, "com.samsung.lockscreen")
163                         && locktype == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
164                 //if current lock type is 'password', return SYSTEM_SETTINGS_ERROR_LOCKSCREEN_APP_PASSWORD_MODE
165                 free(pkg_name);
166                 return SYSTEM_SETTINGS_ERROR_LOCKSCREEN_APP_PASSWORD_MODE;
167         }
168
169         *value = pkg_name;
170         return SYSTEM_SETTINGS_ERROR_NONE;
171 }