#include <fcntl.h>
#include <pkgmgr-info.h>
#include <stdio.h>
-#include <dd-deviced.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#define HOME_TERMINATED "home_terminated"
#define ISTRUE "TRUE"
-#define SYSPOPUPID_VOLUME "volume"
+#define SYSPOPUPID_VOLUME "org.tizen.volume"
+#define APPID_INDICATOR "org.tizen.indicator"
+#define APPID_QUICKPANEL "org.tizen.quickpanel"
-#define DEAD_TIMER_SEC 2.0
+#define DEAD_TIMER_SEC 10.0
#define DEAD_TIMER_COUNT_MAX 2
-#define VCONFKEY_STARTER_IS_FALLBACK "db/starter/is_fallback"
-#define VCONFKEY_STARTER_FALLBACK_PKG "db/starter/fallback_pkg"
-
int errno;
static struct {
pid_t home_pid;
pid_t volume_pid;
+ pid_t indicator_pid;
+ pid_t quickpanel_pid;
int power_off;
Ecore_Timer *dead_timer;
} s_home_mgr = {
.home_pid = (pid_t)-1,
.volume_pid = (pid_t)-1,
+ .indicator_pid = (pid_t)-1,
+ .quickpanel_pid = (pid_t)-1,
.power_off = 0,
.dead_timer = NULL,
};
+int home_mgr_get_home_pid(void)
+{
+ return s_home_mgr.home_pid;
+}
+
+
+
+int home_mgr_get_volume_pid(void)
+{
+ return s_home_mgr.volume_pid;
+}
+
+
+
+int home_mgr_get_indicator_pid(void)
+{
+ return s_home_mgr.indicator_pid;
+}
+
+
+
+int home_mgr_get_quickpanel_pid(void)
+{
+ return s_home_mgr.quickpanel_pid;
+}
+
+
static void _after_launch_home(int pid)
{
- if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){
- _E("failed to send oom dbus signal");
+ if (pid != s_home_mgr.home_pid) {
+ _I("home is created by power key new[%d] != old[%d]", pid, s_home_mgr.home_pid);
+ if (pid > 0) {
+ dbus_util_send_perceptible_signal(pid);
+ }
+ s_home_mgr.home_pid = pid;
}
- s_home_mgr.home_pid = pid;
}
-#define SERVICE_OPERATION_MAIN_KEY "__APP_SVC_OP_TYPE__"
-#define SERVICE_OPERATION_MAIN_VALUE "http://tizen.org/appcontrol/operation/main"
-void home_mgr_open_home(const char *appid)
+void home_mgr_open_home(const char *appid, const char *key, const char *val)
{
char *home_appid = NULL;
- if (status_passive_get()->idle_screen_safemode) {
- home_appid = MENU_SCREEN_PKG_NAME;
- } else if (!appid) {
+ if (!appid) {
home_appid = status_active_get()->setappl_selected_package_name;
} else {
home_appid = (char *) appid;
}
ret_if(!home_appid);
- if (!strncmp(home_appid, MENU_SCREEN_PKG_NAME, strlen(home_appid))) {
- process_mgr_must_launch(home_appid, SERVICE_OPERATION_MAIN_KEY, SERVICE_OPERATION_MAIN_VALUE, _change_home_cb, _after_launch_home);
- } else {
- process_mgr_must_open(home_appid, _change_home_cb, _after_launch_home);
- }
+ process_mgr_must_launch(home_appid, key, val, _change_home_cb, _after_launch_home);
}
{
int seq = status_active_get()->starter_sequence;
int is_fallback = 0;
- char *fallback_pkg = NULL;
_D("[MENU_DAEMON] _show_home_cb is invoked(%d)", seq);
}
if (is_fallback) {
- fallback_pkg = vconf_get_str(VCONFKEY_STARTER_FALLBACK_PKG);
- if (!fallback_pkg) {
- _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
- home_mgr_open_home(NULL);
- break;
- }
- _D("fallback pkg : %s", fallback_pkg);
-
- if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, fallback_pkg) < 0) {
- _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
- home_mgr_open_home(NULL);
- free(fallback_pkg);
- break;
- }
-
if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 0)) {
_E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
}
- free(fallback_pkg);
- } else {
- home_mgr_open_home(NULL);
+ if (!strcmp(status_active_get()->setappl_selected_package_name, MENU_SCREEN_PKG_NAME)) {
+ char *fallback_pkg;
+
+ fallback_pkg = vconf_get_str(VCONFKEY_STARTER_FALLBACK_PKG);
+ _D("fallback pkg : %s", fallback_pkg);
+ if (fallback_pkg) {
+ int status;
+
+ status = vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, fallback_pkg);
+ free(fallback_pkg);
+ if (status == 0) {
+ break;
+ }
+ _E("Failed to set vconfkey : %s (%d)", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, status);
+ } else {
+ _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
+ }
+ }
}
+
+ home_mgr_open_home(NULL, NULL, NULL);
break;
default:
_E("False sequence [%d]", seq);
}
}
- home_mgr_open_home(appid);
+ home_mgr_open_home(appid, NULL, NULL);
return 1;
}
static void _after_launch_volume(int pid)
{
- if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0){
- _E("failed to send oom dbus signal");
+ if (pid != s_home_mgr.volume_pid) {
+ _I("volume is launched new[%d] != old[%d]", pid, s_home_mgr.volume_pid);
+ if (pid > 0) {
+ dbus_util_send_perceptible_signal(pid);
+ }
+ s_home_mgr.volume_pid = pid;
}
- s_home_mgr.volume_pid = pid;
+}
+
+
+
+static void _after_launch_indicator(int pid)
+{
+ s_home_mgr.indicator_pid = pid;
+}
+
+
+
+static void _after_launch_quickpanel(int pid)
+{
+ s_home_mgr.quickpanel_pid = pid;
}
static void _launch_after_home(int pid)
{
- if (pid > 0) {
- if(dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){
- _E("failed to send oom dbus signal");
+ if (pid != s_home_mgr.home_pid) {
+ _I("home is created by power key new[%d] != old[%d]", pid, s_home_mgr.home_pid);
+ if (pid > 0) {
+ dbus_util_send_perceptible_signal(pid);
}
+ s_home_mgr.home_pid = pid;
}
- s_home_mgr.home_pid = pid;
}
{
const char *home_appid = NULL;
- if (status_passive_get()->idle_screen_safemode) {
- home_appid = MENU_SCREEN_PKG_NAME;
- } else if (!appid) {
+ if (!appid) {
home_appid = status_active_get()->setappl_selected_package_name;
} else {
home_appid = (char *) appid;
Evas_Object *popup = NULL;
char title[BUF_SIZE_128] = { 0, };
char text[BUF_SIZE_1024] = { 0, };
+ char *appid = NULL;
- char *appid = (char *)data;
- retv_if(!appid, ECORE_CALLBACK_CANCEL);
+ appid = status_active_get()->setappl_selected_package_name;
+ if (!appid) {
+ _E("appid is NULL");
+ return ECORE_CALLBACK_CANCEL;
+ }
_D("dead count : %s(%d)", appid, s_home_mgr.dead_count);
if (s_home_mgr.dead_count >= DEAD_TIMER_COUNT_MAX) {
_D("Change homescreen package to default");
- if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) {
- _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME);
- return ECORE_CALLBACK_RENEW;
+ /* set fallback status */
+ if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 1) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
+ }
+
+ if (vconf_set_str(VCONFKEY_STARTER_FALLBACK_PKG, appid) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
}
strncpy(title, _("IDS_COM_POP_WARNING"), sizeof(title));
}
}
- /* set fallback status */
- if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 1) < 0) {
- _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
- }
-
- if (vconf_set_str(VCONFKEY_STARTER_FALLBACK_PKG, appid) < 0) {
- _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
+ if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) {
+ _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME);
+ return ECORE_CALLBACK_RENEW;
}
}
-int home_mgr_check_dead_signal(int pid, void *data)
+void home_mgr_relaunch_homescreen(void)
{
char *appid = NULL;
- _D("Process %d is termianted", pid);
-
- if (pid < 0) {
- _E("pid : %d", pid);
- return 0;
- }
-
if (s_home_mgr.power_off) {
_E("power off");
- return 0;
+ return;
}
appid = status_active_get()->setappl_selected_package_name;
if (!appid) {
_E("appid is NULL");
- return 0;
+ return;
}
- if (pid == s_home_mgr.home_pid) {
- s_home_mgr.dead_count++;
- _D("home dead count : %d", s_home_mgr.dead_count);
+ s_home_mgr.dead_count++;
+ _D("home dead count : %d", s_home_mgr.dead_count);
+ if (!s_home_mgr.dead_timer) {
+ _D("Add dead timer");
+ s_home_mgr.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, NULL);
if (!s_home_mgr.dead_timer) {
- _D("Add dead timer");
- s_home_mgr.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, (void *)appid);
+ _E("Failed to add a dead timer");
}
-
- _launch_home(appid);
- } else if (pid == s_home_mgr.volume_pid) {
- process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume);
- } else {
- _D("Unknown process, ignore it (dead pid %d, home pid %d)", pid, s_home_mgr.home_pid);
}
- return 0;
+ _launch_home(appid);
+}
+
+
+
+void home_mgr_relaunch_volume(void)
+{
+ process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume);
+}
+
+
+
+void home_mgr_relaunch_indicator(void)
+{
+ process_mgr_must_launch(APPID_INDICATOR, NULL, NULL, NULL, _after_launch_indicator);
+}
+
+
+
+void home_mgr_relaunch_quickpanel(void)
+{
+ process_mgr_must_launch(APPID_QUICKPANEL, NULL, NULL, NULL, _after_launch_quickpanel);
}
{
int val = status_active_get()->sysman_power_off_status;
- if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART) {
+ if (val > VCONFKEY_SYSMAN_POWER_OFF_NONE) {
s_home_mgr.power_off = 1;
} else {
s_home_mgr.power_off = 0;
-static Eina_Bool _launch_volume_idler_cb(void *data)
+static Eina_Bool _launch_apps_idler_cb(void *data)
{
process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume);
+ process_mgr_must_launch(APPID_INDICATOR, NULL, NULL, NULL, _after_launch_indicator);
+ process_mgr_must_launch(APPID_QUICKPANEL, NULL, NULL, NULL, _after_launch_quickpanel);
+
return ECORE_CALLBACK_CANCEL;
}
void home_mgr_init(void *data)
{
- _D( "[MENU_DAEMON]home_mgr_init is invoked");
+ _D("[MENU_DAEMON]home_mgr_init is invoked");
status_active_register_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _show_home_cb, NULL);
status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL);
status_active_register_cb(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, _change_selected_package_name, NULL);
- _change_selected_package_name(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, NULL);
-
- ecore_idler_add(_launch_volume_idler_cb, NULL);
- aul_listen_app_dead_signal(home_mgr_check_dead_signal, NULL);
+ ecore_idler_add(_launch_apps_idler_cb, NULL);
}