fix volume app ID
[apps/native/starter.git] / src / mobile / home_mgr.c
old mode 100644 (file)
new mode 100755 (executable)
index 454d208..dc25ae6
@@ -22,7 +22,6 @@
 #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>
@@ -36,7 +35,9 @@
 
 #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 10.0
 #define DEAD_TIMER_COUNT_MAX 2
@@ -47,6 +48,8 @@ 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;
@@ -56,6 +59,8 @@ static struct {
 } 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,
@@ -79,12 +84,29 @@ int home_mgr_get_volume_pid(void)
 
 
 
+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;
 }
 
 
@@ -106,23 +128,18 @@ static int _change_home_cb(const char *appid, const char *key, const char *value
 
 
 
-#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) {
-               _D("SAFE MODE is enabled");
-               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);
 
-       process_mgr_must_launch(home_appid, SERVICE_OPERATION_MAIN_KEY, SERVICE_OPERATION_MAIN_VALUE, _change_home_cb, _after_launch_home);
+       process_mgr_must_launch(home_appid, key, val, _change_home_cb, _after_launch_home);
 }
 
 
@@ -174,7 +191,7 @@ static int _show_home_cb(status_active_key_e key, void *data)
                        }
                }
 
-               home_mgr_open_home(NULL);
+               home_mgr_open_home(NULL, NULL, NULL);
                break;
        default:
                _E("False sequence [%d]", seq);
@@ -191,12 +208,6 @@ static int _change_selected_package_name(status_active_key_e key, void *data)
        char *appid = NULL;
        int seq = status_active_get()->starter_sequence;
 
-       /**
-        * @todo
-        * Sequence is not changed. it should be managed by WHO?
-        */
-       seq = 1;
-
        if (seq < 1) {
                _E("Sequence is not ready yet, do nothing");
                return 1;
@@ -231,7 +242,7 @@ static int _change_selected_package_name(status_active_key_e key, void *data)
                }
        }
 
-       home_mgr_open_home(appid);
+       home_mgr_open_home(appid, NULL, NULL);
 
        return 1;
 }
@@ -240,22 +251,40 @@ static int _change_selected_package_name(status_active_key_e key, void *data)
 
 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;
 }
 
 
@@ -264,9 +293,7 @@ static void _launch_home(const char *appid)
 {
        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;
@@ -305,9 +332,13 @@ static Eina_Bool _dead_timer_cb(void *data)
        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));
@@ -326,13 +357,9 @@ static Eina_Bool _dead_timer_cb(void *data)
                        }
                }
 
-               /* 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;
                }
        }
 
@@ -382,11 +409,25 @@ void home_mgr_relaunch_volume(void)
 
 
 
+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);
+}
+
+
+
 static int _power_off_cb(status_active_key_e key, void *data)
 {
        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;
@@ -399,9 +440,12 @@ static int _power_off_cb(status_active_key_e key, void *data)
 
 
 
-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;
 }
 
@@ -409,14 +453,13 @@ static Eina_Bool _launch_volume_idler_cb(void *data)
 
 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);
+       ecore_idler_add(_launch_apps_idler_cb, NULL);
 }