2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
26 #include "app_manager.h"
27 #include "app_manager_internal.h"
33 #define LOG_TAG "CAPI_APPFW_APP_MANAGER"
36 static const char* app_manager_error_to_string(app_manager_error_e error)
39 case APP_MANAGER_ERROR_NONE:
41 case APP_MANAGER_ERROR_INVALID_PARAMETER:
42 return "Invalid parameter";
43 case APP_MANAGER_ERROR_OUT_OF_MEMORY:
44 return "Out of memory";
45 case APP_MANAGER_ERROR_IO_ERROR:
47 case APP_MANAGER_ERROR_NO_SUCH_APP:
48 return "No such application";
49 case APP_MANAGER_ERROR_DB_FAILED:
51 case APP_MANAGER_ERROR_INVALID_PACKAGE:
52 return "Invalid package";
58 int app_manager_error(app_manager_error_e error, const char* function, const char *description)
61 LOGE("[%s] %s(0x%08x) : %s", function, app_manager_error_to_string(error), error, description);
63 LOGE("[%s] %s(0x%08x)", function, app_manager_error_to_string(error), error);
68 API int app_manager_set_app_context_event_cb(app_manager_app_context_event_cb callback, void *user_data)
70 int retval = app_context_set_event_cb(callback, user_data);
72 if (retval != APP_MANAGER_ERROR_NONE)
73 return app_manager_error(retval, __FUNCTION__, NULL);
75 return APP_MANAGER_ERROR_NONE;
78 API void app_manager_unset_app_context_event_cb(void)
80 app_context_unset_event_cb();
83 API int app_manager_foreach_app_context(app_manager_app_context_cb callback, void *user_data)
85 int retval = app_context_foreach_app_context(callback, user_data);
87 if (retval != APP_MANAGER_ERROR_NONE)
88 return app_manager_error(retval, __FUNCTION__, NULL);
90 return APP_MANAGER_ERROR_NONE;
93 API int app_manager_get_app_context(const char *app_id, app_context_h *app_context)
95 int retval = app_context_get_app_context(app_id, app_context);
97 if (retval != APP_MANAGER_ERROR_NONE)
98 return app_manager_error(retval, __FUNCTION__, NULL);
100 return APP_MANAGER_ERROR_NONE;
103 API int app_manager_resume_app(app_context_h app_context)
108 if (app_context == NULL)
109 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
111 if (app_context_get_app_id(app_context, &app_id) != APP_MANAGER_ERROR_NONE)
112 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, "failed to get the application ID");
114 if (aul_app_is_running(app_id) == 0) {
116 return app_manager_error(APP_MANAGER_ERROR_APP_NO_RUNNING, __FUNCTION__, NULL);
119 retval = aul_resume_app(app_id);
123 if (retval == AUL_R_EINVAL)
124 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
125 else if (retval == AUL_R_EILLACC)
126 return app_manager_error(APP_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
128 return app_manager_error(APP_MANAGER_ERROR_REQUEST_FAILED, __FUNCTION__, NULL);
130 return APP_MANAGER_ERROR_NONE;
133 API int app_manager_foreach_app_info(app_manager_app_info_cb callback, void *user_data)
137 retval = app_info_foreach_app_info(callback, user_data);
139 if (retval != APP_MANAGER_ERROR_NONE)
140 return app_manager_error(retval, __FUNCTION__, NULL);
142 return APP_MANAGER_ERROR_NONE;
145 API int app_manager_get_app_info(const char *app_id, app_info_h *app_info)
149 retval = app_info_create(app_id, app_info);
151 if (retval != APP_MANAGER_ERROR_NONE)
152 return app_manager_error(retval, __FUNCTION__, NULL);
154 return APP_MANAGER_ERROR_NONE;
157 API int app_manager_get_app_id(pid_t pid, char **app_id)
159 char buffer[256] = {0, };
160 char *app_id_dup = NULL;
163 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
165 if (aul_app_get_appid_bypid(pid, buffer, sizeof(buffer)) != AUL_R_OK)
166 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, "Invalid process ID");
168 app_id_dup = strdup(buffer);
169 if (app_id_dup == NULL)
170 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
172 *app_id = app_id_dup;
174 return APP_MANAGER_ERROR_NONE;
177 API int app_manager_terminate_app(app_context_h app_context)
182 if (app_context == NULL)
183 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
185 if (app_context_get_pid(app_context, &pid) != APP_MANAGER_ERROR_NONE)
186 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, "failed to get the process ID");
188 retval = aul_terminate_pid(pid);
189 if (retval == AUL_R_EINVAL) {
190 LOGE("[%s] APP_MANAGER_ERROR_INVALID_PARAMETER(0x%08x) : Invalid param", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
191 return APP_MANAGER_ERROR_INVALID_PARAMETER;
192 } else if (retval == AUL_R_EILLACC) {
193 LOGE("[%s] APP_MANAGER_ERROR_PERMISSION_DENIED(0x%08x) : Permission denied", __FUNCTION__, APP_MANAGER_ERROR_PERMISSION_DENIED);
194 return APP_MANAGER_ERROR_PERMISSION_DENIED;
195 } else if (retval < 0) {
196 return APP_MANAGER_ERROR_REQUEST_FAILED;
199 return APP_MANAGER_ERROR_NONE;
202 API int app_manager_request_terminate_bg_app(app_context_h app_context)
204 int retval = APP_MANAGER_ERROR_NONE;
207 if (app_context == NULL)
208 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
210 if (app_context_get_pid(app_context, &pid) != APP_MANAGER_ERROR_NONE)
211 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, "failed to get the process ID");
213 retval = aul_terminate_bgapp_pid(pid);
214 if (retval == AUL_R_EINVAL) {
215 LOGE("[%s] APP_MANAGER_ERROR_INVALID_PARAMETER(0x%08x) : Invalid param", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
216 return APP_MANAGER_ERROR_INVALID_PARAMETER;
217 } else if (retval == AUL_R_EILLACC) {
218 LOGE("[%s] APP_MANAGER_ERROR_PERMISSION_DENIED(0x%08x) : Permission denied", __FUNCTION__, APP_MANAGER_ERROR_PERMISSION_DENIED);
219 return APP_MANAGER_ERROR_PERMISSION_DENIED;
220 } else if (retval < 0) {
221 return APP_MANAGER_ERROR_REQUEST_FAILED;
224 return APP_MANAGER_ERROR_NONE;
227 API int app_manager_is_running(const char *app_id, bool *running)
229 if (app_id == NULL) {
230 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid package", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
231 return APP_MANAGER_ERROR_INVALID_PARAMETER;
234 if (running == NULL) {
235 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid output param", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
236 return APP_MANAGER_ERROR_INVALID_PARAMETER;
239 *running = aul_app_is_running(app_id);
241 return APP_MANAGER_ERROR_NONE;
244 API int app_manager_open_app(const char *app_id)
248 retval = aul_open_app(app_id);
249 if (retval == AUL_R_ERROR) {
250 LOGE("[%s] APP_MANAGER_ERROR_NO_SUCH_APP(0x%08x) : No such application", __FUNCTION__, APP_MANAGER_ERROR_NO_SUCH_APP);
251 return APP_MANAGER_ERROR_NO_SUCH_APP;
252 } else if (retval == AUL_R_EINVAL) {
253 LOGE("[%s] APP_MANAGER_ERROR_INVALID_PARAMETER(0x%08x) : Invalid param", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
254 return APP_MANAGER_ERROR_INVALID_PARAMETER;
255 } else if (retval == AUL_R_EILLACC) {
256 LOGE("[%s] APP_MANAGER_ERROR_PERMISSION_DENIED(0x%08x) : Permission denied", __FUNCTION__, APP_MANAGER_ERROR_PERMISSION_DENIED);
257 return APP_MANAGER_ERROR_PERMISSION_DENIED;
258 } else if (retval < 0) {
259 return APP_MANAGER_ERROR_REQUEST_FAILED;
262 return APP_MANAGER_ERROR_NONE;
265 API int app_manager_get_shared_data_path(const char *app_id, char **path)
268 int retval = aul_get_app_shared_data_path_by_appid(app_id, path);
272 r = APP_MANAGER_ERROR_NONE;
275 r = app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
278 r = app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
281 r = app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
284 r = app_manager_error(APP_MANAGER_ERROR_REQUEST_FAILED, __FUNCTION__, NULL);
291 API int app_manager_get_shared_resource_path(const char *app_id, char **path)
294 int retval = aul_get_app_shared_resource_path_by_appid(app_id, path);
298 r = APP_MANAGER_ERROR_NONE;
301 r = app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
304 r = app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
307 r = app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
310 r = app_manager_error(APP_MANAGER_ERROR_REQUEST_FAILED, __FUNCTION__, NULL);
317 API int app_manager_get_shared_trusted_path(const char *app_id, char **path)
320 int retval = aul_get_app_shared_trusted_path_by_appid(app_id, path);
324 r = APP_MANAGER_ERROR_NONE;
327 r = app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
330 r = app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
333 r = app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
336 r = app_manager_error(APP_MANAGER_ERROR_REQUEST_FAILED, __FUNCTION__, NULL);
343 API int app_manager_get_external_shared_data_path(const char *app_id, char **path)
346 int retval = aul_get_app_external_shared_data_path_by_appid(app_id, path);
350 r = APP_MANAGER_ERROR_NONE;
353 r = app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
356 r = app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
359 r = app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
362 r = app_manager_error(APP_MANAGER_ERROR_REQUEST_FAILED, __FUNCTION__, NULL);