Fix background management feature 47/83147/4 accepted/tizen/common/20161212.185619 accepted/tizen/ivi/20161213.003142 accepted/tizen/mobile/20161213.002957 accepted/tizen/tv/20161213.003043 accepted/tizen/wearable/20161213.003122 submit/tizen/20161212.091026
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 9 Aug 2016 09:17:03 +0000 (18:17 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 9 Aug 2016 09:45:19 +0000 (18:45 +0900)
While an application receives the AUL_SUSPEND event,
the allowed_bg value is changed to "false". AMD always
sends the AUL_SUSPEND event when the application is not
allowed to run in the background. And, the allowed_bg value
can be changed when the application receives the AUL_WAKE event.

- Requires
[aul] https://review.tizen.org/gerrit/#/c/83134/
[amd] https://review.tizen.org/gerrit/#/c/83044/

Change-Id: I941e0bfd92c8f4750f18f83f8cf5e50f13219bd7
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/appcore.c

index 144f15d..ca16b35 100644 (file)
@@ -499,6 +499,7 @@ static int __aul_handler(aul_type type, bundle *b, void *data)
 #ifdef _APPFW_FEATURE_BACKGROUND_MANAGEMENT
        const char *bg = NULL;
        struct appcore *ac = data;
+       int suspend = APPCORE_SUSPENDED_STATE_DID_EXIT_FROM_SUSPEND;
 #endif
 
        switch (type) {
@@ -571,15 +572,23 @@ static int __aul_handler(aul_type type, bundle *b, void *data)
        case AUL_WAKE:
                _DBG("[APP %d]     AUL event: AUL_WAKE", _pid);
                if (!ac->allowed_bg && ac->suspended_state) {
-                       int suspend = APPCORE_SUSPENDED_STATE_DID_EXIT_FROM_SUSPEND;
                        __remove_suspend_timer(data);
                        __sys_do(ac, &suspend, SE_SUSPENDED_STATE);
                        ac->suspended_state = false;
                }
+
+               if (b) {
+                       bg = bundle_get_val(b, AUL_K_ALLOWED_BG);
+                       if (bg && strcmp(bg, "ALLOWED_BG") == 0) {
+                               _DBG("[__SUSPEND__] allowed background");
+                               ac->allowed_bg = true;
+                       }
+               }
                break;
        case AUL_SUSPEND:
                _DBG("[APP %d]     AUL event: AUL_SUSPEND", _pid);
-               if (!ac->allowed_bg && !ac->suspended_state) {
+               ac->allowed_bg = false;
+               if (!ac->suspended_state) {
                        __remove_suspend_timer(data);
                        __flush_memory((gpointer)ac);
                }