Support legacy lifecycle 30/136730/4
authorHwankyu Jhun <h.jhun@samsung.com>
Mon, 3 Jul 2017 04:59:29 +0000 (13:59 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 3 Jul 2017 06:32:42 +0000 (15:32 +0900)
This patch is for backward compatibility.
In Tizen 2.3, the resume callback is invoked when getting the reset event.

Change-Id: I741be7217ef3b81435a72a84f2e6bf592fcff18f
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/appcore_efl_base.h
include/appcore_ui_base.h
src/efl_base/appcore_efl_base.c
src/legacy/appcore-efl.c
src/ui_base/appcore_ui_base.c

index ac86a72..90903d2 100644 (file)
@@ -35,6 +35,7 @@ enum appcore_efl_base_hint {
        APPCORE_EFL_BASE_HINT_BG_LAUNCH_CONTROL = APPCORE_UI_BASE_HINT_BG_LAUNCH_CONTROL,
        APPCORE_EFL_BASE_HINT_HW_ACC_CONTROL = APPCORE_UI_BASE_HINT_HW_ACC_CONTROL,
        APPCORE_EFL_BASE_HINT_WINDOW_AUTO_CONTROL = APPCORE_UI_BASE_HINT_WINDOW_AUTO_CONTROL,
+       APPCORE_EFL_BASE_HINT_LEGACY_CONTROL = APPCORE_UI_BASE_HINT_LEGACY_CONTROL,
 };
 
 int appcore_efl_base_on_receive(aul_type type, bundle *b);
@@ -60,6 +61,8 @@ void appcore_efl_base_group_remove();
 unsigned int appcore_efl_base_get_main_window(void);
 unsigned int appcore_efl_base_get_main_surface(void);
 int appcore_efl_base_get_hint(void);
+bool appcore_efl_base_get_bg_state(void);
+void appcore_efl_base_set_bg_state(bool bg_state);
 
 #ifdef __cplusplus
 }
index 9359564..83f648d 100644 (file)
@@ -46,6 +46,7 @@ enum appcore_ui_base_hint {
        APPCORE_UI_BASE_HINT_BG_LAUNCH_CONTROL = 0x4,
        APPCORE_UI_BASE_HINT_HW_ACC_CONTROL = 0x8,
        APPCORE_UI_BASE_HINT_WINDOW_AUTO_CONTROL = 0x10,
+       APPCORE_UI_BASE_HINT_LEGACY_CONTROL = 0x20,
 };
 
 int appcore_ui_base_on_receive(aul_type type, bundle *b);
@@ -72,6 +73,8 @@ void appcore_ui_base_group_remove();
 unsigned int appcore_ui_base_get_main_window(void);
 unsigned int appcore_ui_base_get_main_surface(void);
 int appcore_ui_base_get_hint(void);
+bool appcore_ui_base_get_bg_state(void);
+void appcore_ui_base_set_bg_state(bool bg_state);
 
 #ifdef __cplusplus
 }
index 5cea46c..1ac09fd 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -190,3 +191,13 @@ EXPORT_API int appcore_efl_base_get_hint(void)
 {
        return appcore_ui_base_get_hint();
 }
+
+EXPORT_API bool appcore_efl_base_get_bg_state(void)
+{
+       return appcore_ui_base_get_bg_state();
+}
+
+EXPORT_API void appcore_efl_base_set_bg_state(bool bg_state)
+{
+       appcore_ui_base_set_bg_state(bg_state);
+}
index 503e550..b171a27 100644 (file)
@@ -99,7 +99,8 @@ EXPORT_API int appcore_efl_init(const char *name, int *argc, char ***argv,
                        APPCORE_EFL_BASE_HINT_WINDOW_STACK_CONTROL |
                        APPCORE_EFL_BASE_HINT_BG_LAUNCH_CONTROL |
                        APPCORE_EFL_BASE_HINT_HW_ACC_CONTROL |
-                       APPCORE_EFL_BASE_HINT_WINDOW_AUTO_CONTROL);
+                       APPCORE_EFL_BASE_HINT_WINDOW_AUTO_CONTROL |
+                       APPCORE_EFL_BASE_HINT_LEGACY_CONTROL);
 
        return ret;
 }
index d6521b3..4aaa141 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define _GNU_SOURCE
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -62,6 +63,7 @@ typedef struct _appcore_ui_base_context {
        unsigned int hint;
        char *below_app;
        char *appid;
+       bool bg_state;
 
        int state;
        Ecore_Event_Handler *hshow;
@@ -86,7 +88,6 @@ static appcore_ui_base_context __context;
 static struct wl_display *dsp;
 static struct wl_registry *reg;
 static struct tizen_policy *tz_policy;
-static bool bg_state = false;
 
 static void __wl_listener_cb(void *data, struct wl_registry *reg,
                uint32_t id, const char *interface, uint32_t ver)
@@ -406,8 +407,8 @@ static void __set_bg_state(void)
 
        tizen_policy_set_background_state(tz_policy, getpid());
        wl_display_roundtrip(dsp);
-       bg_state = true;
-       _DBG("bg state: %d", bg_state);
+       __context.bg_state = true;
+       _DBG("bg state: %d", __context.bg_state);
 }
 
 static void __unset_bg_state(void)
@@ -417,8 +418,8 @@ static void __unset_bg_state(void)
 
        tizen_policy_unset_background_state(tz_policy, getpid());
        wl_display_roundtrip(dsp);
-       bg_state = false;
-       _DBG("bg state: %d", bg_state);
+       __context.bg_state = false;
+       _DBG("bg state: %d", __context.bg_state);
 }
 
 static void __do_start(bundle *b)
@@ -445,20 +446,43 @@ static void __do_start(bundle *b)
        if (__context.hint & APPCORE_UI_BASE_HINT_BG_LAUNCH_CONTROL) {
                bg_launch = bundle_get_val(b, AUL_SVC_K_BG_LAUNCH);
                if (bg_launch && strcmp(bg_launch, "enable") == 0) {
-                       if (!bg_state && __context.state != AS_RUNNING)
+                       if (!__context.bg_state &&
+                                       __context.state != AS_RUNNING)
                                __set_bg_state();
                } else {
-                       if (bg_state)
+                       if (__context.bg_state)
                                __unset_bg_state();
                }
        }
 
        if (__context.hint & APPCORE_UI_BASE_HINT_WINDOW_AUTO_CONTROL) {
-               if (!bg_state)
+               if (!__context.bg_state)
                        __raise_win();
        }
 }
 
+static int __is_legacy_lifecycle(void)
+{
+       static int is_legacy = -1;
+       const char *api_version;
+
+       if (is_legacy != -1)
+               return is_legacy;
+
+       api_version = getenv("TIZEN_API_VERSION");
+       if (api_version) {
+               if (strverscmp("2.4", api_version) > 0 &&
+                               strverscmp("2.2.1", api_version) < 0)
+                       is_legacy = 1;
+               else
+                       is_legacy = 0;
+       } else {
+               is_legacy = 0;
+       }
+
+       return is_legacy;
+}
+
 EXPORT_API int appcore_ui_base_on_receive(aul_type type, bundle *b)
 {
        if (__context.state == AS_DYING) {
@@ -477,9 +501,15 @@ EXPORT_API int appcore_ui_base_on_receive(aul_type type, bundle *b)
        switch (type) {
        case AUL_START:
                __do_start(b);
+               if (__context.hint & APPCORE_UI_BASE_HINT_LEGACY_CONTROL) {
+                       if (!__context.bg_state && __is_legacy_lifecycle()) {
+                               _DBG("Legacy lifecycle");
+                               __do_resume();
+                       }
+               }
                break;
        case AUL_RESUME:
-               if (bg_state)
+               if (__context.bg_state)
                        __unset_bg_state();
                __raise_win();
                break;
@@ -502,17 +532,66 @@ EXPORT_API int appcore_ui_base_on_receive(aul_type type, bundle *b)
        return 0;
 }
 
-EXPORT_API int appcore_ui_base_on_create(void)
+static void __add_ecore_events(void)
 {
-       appcore_base_on_create();
+       __context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW,
+                       __stub_show_cb, NULL);
+       if (!__context.hshow)
+               _ERR("Failed to add ECORE_WL_EVENT_WINDOW_SHOW event");
+
+       __context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE,
+                       __stub_hide_cb, NULL);
+       if (!__context.hhide)
+               _ERR("Failed to add ECORE_WL_EVENT_WINDOW_HIDE event");
 
-       __context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __stub_show_cb, NULL);
-       __context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE, __stub_hide_cb, NULL);
        __context.hvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
-                               __stub_visibility_cb, NULL);
-       __context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __stub_lower_cb, NULL);
+                       __stub_visibility_cb, NULL);
+       if (!__context.hvchange)
+               _ERR("Failed to add ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE event");
+
+       __context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER,
+                       __stub_lower_cb, NULL);
+       if (!__context.hlower)
+               _ERR("Failed to add ECORE_WL_EVENT_WINDOW_LOWER event");
+
        __context.hpvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE,
                        __stub_pre_visibility_cb, NULL);
+       if (!__context.hpvchange)
+               _ERR("Failed to add ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE event");
+}
+
+static void __del_ecore_events(void)
+{
+       if (__context.hshow) {
+               ecore_event_handler_del(__context.hshow);
+               __context.hshow = NULL;
+       }
+
+       if (__context.hhide) {
+               ecore_event_handler_del(__context.hhide);
+               __context.hhide = NULL;
+       }
+
+       if (__context.hvchange) {
+               ecore_event_handler_del(__context.hvchange);
+               __context.hvchange = NULL;
+       }
+
+       if (__context.hlower) {
+               ecore_event_handler_del(__context.hlower);
+               __context.hlower = NULL;
+       }
+
+       if (__context.hpvchange) {
+               ecore_event_handler_del(__context.hpvchange);
+               __context.hpvchange = NULL;
+       }
+}
+
+EXPORT_API int appcore_ui_base_on_create(void)
+{
+       __add_ecore_events();
+       appcore_base_on_create();
        __context.state = AS_CREATED;
        LOG(LOG_DEBUG, "LAUNCH", "[%s:Application:create:done]", __context.appid);
 
@@ -743,17 +822,7 @@ EXPORT_API int appcore_ui_base_init(appcore_ui_base_ops ops, int argc, char **ar
 
 EXPORT_API void appcore_ui_base_fini(void)
 {
-       if (__context.hshow)
-               ecore_event_handler_del(__context.hshow);
-       if (__context.hhide)
-               ecore_event_handler_del(__context.hhide);
-       if (__context.hvchange)
-               ecore_event_handler_del(__context.hvchange);
-       if (__context.hlower)
-               ecore_event_handler_del(__context.hlower);
-       if (__context.hpvchange)
-               ecore_event_handler_del(__context.hpvchange);
-
+       __del_ecore_events();
        __finish_wl();
 
        free(__context.appid);
@@ -799,6 +868,16 @@ EXPORT_API int appcore_ui_base_get_hint(void)
        return __context.hint;
 }
 
+EXPORT_API bool appcore_ui_base_get_bg_state(void)
+{
+       return __context.bg_state;
+}
+
+EXPORT_API void appcore_ui_base_set_bg_state(bool bg_state)
+{
+       __context.bg_state = bg_state;
+}
+
 static int __on_receive(aul_type type, bundle *b, void *data)
 {
        return appcore_ui_base_on_receive(type, b);