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