2 * Copyright (c) 2000 - 2015 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.
17 #include <Elementary.h>
20 #include <sys/types.h>
35 #include "process_mgr.h"
40 #define PWLOCK_LITE_PKG_NAME "org.tizen.pwlock-lite"
42 #define DATA_UNENCRYPTED "unencrypted"
43 #define DATA_MOUNTED "mounted"
44 #define SD_DATA_ENCRYPTED "encrypted"
45 #define SD_CRYPT_META_FILE ".MetaEcfsFile"
46 #define MMC_MOUNT_POINT "/opt/storage/sdcard"
51 static void _hide_home(void)
53 int seq = status_active_get()->starter_sequence;
56 vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
62 static void _show_home(void)
64 vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
69 static void _signal_handler(int signum, siginfo_t *info, void *unused)
71 _D("_signal_handler : Terminated...");
77 static int _power_off_cb(status_active_key_e key, void *data)
79 int val = status_active_get()->sysman_power_off_status;
81 if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT
82 || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART)
84 _D("_power_off_cb : Terminated...");
93 static void _language_changed_cb(keynode_t *node, void *data)
99 lang = vconf_keynode_get_str(node);
102 _D("language is changed : %s", lang);
104 elm_language_set(lang);
109 static int _set_i18n(const char *domain, const char *dir)
113 if (domain == NULL) {
118 char *lang = vconf_get_str(VCONFKEY_LANGSET);
119 r = setlocale(LC_ALL, lang);
121 _E("setlocale() error");
127 r = bindtextdomain(domain, dir);
129 _E("bindtextdomain() error");
132 r = textdomain(domain);
134 _E("textdomain() error");
137 if (vconf_notify_key_changed(VCONFKEY_LANGSET, _language_changed_cb, NULL) < 0) {
138 _E("Failed to register changed cb : %s", VCONFKEY_LANGSET);
146 static int _check_dead_signal(int pid, void *data)
148 #ifndef TIZEN_ARCH_ARM64
151 int indicator_pid = 0;
152 int quickpanel_pid = 0;
155 _D("Process %d is termianted", pid);
163 * If the architecture is not 64bit,
164 * starter try to re-launch these apps when the app is dead.
166 home_pid = home_mgr_get_home_pid();
167 volume_pid = home_mgr_get_volume_pid();
168 indicator_pid = home_mgr_get_indicator_pid();
169 quickpanel_pid = home_mgr_get_quickpanel_pid();
170 lock_pid = lock_mgr_get_lock_pid();
172 if (pid == home_pid) {
173 _D("Homescreen is dead");
174 home_mgr_relaunch_homescreen();
175 } else if (pid == volume_pid) {
176 _D("volume is dead");
177 home_mgr_relaunch_volume();
178 } else if (pid == indicator_pid) {
179 _D("indicator is dead");
180 home_mgr_relaunch_indicator();
181 } else if (pid == quickpanel_pid) {
182 _D("quickpanel is dead");
183 home_mgr_relaunch_quickpanel();
184 } else if (pid == lock_pid) {
185 _D("lockscreen is dead");
188 _D("Unknown process, ignore it");
191 _D("Process %d is termianted", pid);
204 static void _init(struct appdata *ad)
206 struct sigaction act;
207 char err_buf[128] = {0,};
209 memset(&act,0x00,sizeof(struct sigaction));
210 act.sa_sigaction = _signal_handler;
211 act.sa_flags = SA_SIGINFO;
213 int ret = sigemptyset(&act.sa_mask);
215 if (strerror_r(errno, err_buf, sizeof(err_buf)) == 0) {
216 _E("Failed to sigemptyset[%d / %s]", errno, err_buf);
219 ret = sigaddset(&act.sa_mask, SIGTERM);
221 if (strerror_r(errno, err_buf, sizeof(err_buf)) == 0) {
222 _E("Failed to sigaddset[%d / %s]", errno, err_buf);
225 ret = sigaction(SIGTERM, &act, NULL);
227 if (strerror_r(errno, err_buf, sizeof(err_buf)) == 0) {
228 _E("Failed to sigaction[%d / %s]", errno, err_buf);
232 _set_i18n(PACKAGE, LOCALEDIR);
235 status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL);
237 hw_key_create_window();
244 aul_listen_app_dead_signal(_check_dead_signal, NULL);
249 static void _fini(struct appdata *ad)
251 hw_key_destroy_window();
256 status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb);
259 if (vconf_ignore_key_changed(VCONFKEY_LANGSET, _language_changed_cb) < 0) {
260 _E("Failed to unregister changed cb : %s", VCONFKEY_LANGSET);
266 int main(int argc, char *argv[])
270 _D("starter is launched..!!");
272 elm_init(argc, argv);