Apply smack rule.
[apps/native/starter.git] / src / lockd-process-mgr.c
1  /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
4   * Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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
18
19 #include <vconf.h>
20 #include <vconf-keys.h>
21
22 #include <aul.h>
23
24 #include "lockd-debug.h"
25 #include "lockd-process-mgr.h"
26 #include "starter-vconf.h"
27
28 #define LOCKD_DEFAULT_PKG_NAME "org.tizen.lockscreen"
29 #define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.lockscreen"
30 #define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.lockscreen"
31 #define RETRY_MAXCOUNT 30
32 #define RELAUNCH_INTERVAL 100*1000
33
34 static char *_lockd_process_mgr_get_pkgname(void)
35 {
36         char *pkgname = NULL;
37
38         pkgname = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
39
40         LOCKD_DBG("pkg name is %s", pkgname);
41
42         if (pkgname == NULL) {
43                 return LOCKD_DEFAULT_PKG_NAME;
44         }
45
46         return pkgname;
47 }
48
49 int lockd_process_mgr_restart_lock(int phone_lock_state)
50 {
51         char *lock_app_path = NULL;
52         int pid;
53
54         lock_app_path = _lockd_process_mgr_get_pkgname();
55         pid = aul_launch_app(lock_app_path, NULL);
56
57         LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path,
58                   pid);
59
60         return pid;
61 }
62
63 int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
64                              int phone_lock_state)
65 {
66         char *lock_app_path = NULL;
67         int pid;
68         int ret;
69
70         lock_app_path = _lockd_process_mgr_get_pkgname();
71
72         int i;
73         for (i=0; i<RETRY_MAXCOUNT; i++)
74         {
75                 pid = aul_launch_app(lock_app_path, NULL);
76
77                 LOCKD_DBG("aul_launch_app(%s), pid = %d", lock_app_path, pid);
78
79                 if (pid == AUL_R_ECOMM) {
80                         LOCKD_DBG("Relaunch lock application [%d]times", i);
81                         usleep(RELAUNCH_INTERVAL);
82                 } else if (pid == AUL_R_ERROR) {
83                         LOCKD_DBG("launch[%s] is failed, launch default lock screen", lock_app_path);
84                         ret = vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCKD_DEFAULT_LOCKSCREEN);
85                         if (ret != 0) {
86                                 LOCKD_ERR("set failed");
87                         }
88                         pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL);
89                         if (pid >0) {
90                                 return pid;
91                         }
92                 } else {
93                         return pid;
94                 }
95         }
96         LOCKD_DBG("Relaunch lock application failed..!!");
97         return pid;
98 }
99
100 int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *))
101 {
102         int pid = 0;
103
104         int i;
105         for (i=0; i<RETRY_MAXCOUNT; i++)
106         {
107                 pid = aul_launch_app(LOCKD_DEFAULT_PKG_NAME, NULL);
108
109                 LOCKD_DBG("aul_launch_app(%s), pid = %d", LOCKD_DEFAULT_PKG_NAME, pid);
110
111                 if (pid == AUL_R_ECOMM) {
112                         LOCKD_DBG("Relaunch lock application [%d]times", i);
113                         usleep(RELAUNCH_INTERVAL);
114                 } else if (pid == AUL_R_ERROR) {
115                         LOCKD_DBG("launch[%s] is failed, launch default lock screen", LOCKD_DEFAULT_PKG_NAME);
116                         pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL);
117                         if (pid >0) {
118                                 return pid;
119                         }
120                 } else {
121                         return pid;
122                 }
123         }
124         LOCKD_DBG("Relaunch lock application failed..!!");
125         return pid;
126 }
127
128 int lockd_process_mgr_start_phone_lock(void)
129 {
130         int pid = 0;
131
132         pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, NULL);
133         LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME,
134                   pid);
135         return pid;
136 }
137
138 void lockd_process_mgr_terminate_lock_app(int lock_app_pid, int state)
139 {
140         LOCKD_DBG
141             ("lockd_process_mgr_terminate_lock_app,  state:%d\n",
142              state);
143
144         if (state == 1) {
145                 if (lock_app_pid != 0) {
146                         LOCKD_DBG("Terminate Lock app(pid : %d)", lock_app_pid);
147                         aul_terminate_pid(lock_app_pid);
148                 }
149         }
150 }
151
152 void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid)
153 {
154         LOCKD_DBG("Terminate Phone Lock(pid : %d)", phone_lock_pid);
155         aul_terminate_pid(phone_lock_pid);
156 }
157
158 int lockd_process_mgr_check_lock(int pid)
159 {
160         char buf[128];
161         LOCKD_DBG("%s, %d", __func__, __LINE__);
162
163         if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) {
164                 LOCKD_DBG("no such pkg by pid %d\n", pid);
165         } else {
166                 LOCKD_DBG("app pkgname = %s, pid = %d\n", buf, pid);
167                 if (aul_app_is_running(buf) == TRUE) {
168                         LOCKD_DBG("%s [pid = %d] is running\n", buf, pid);
169                         return TRUE;
170                 } else {
171                         LOCKD_DBG("[pid = %d] is exist but %s is not running\n",
172                                   pid, buf);
173                 }
174         }
175         return FALSE;
176 }