diff --git a/tns-core-modules/application/application.android.ts b/tns-core-modules/application/application.android.ts index 6d5166675..e27378534 100644 --- a/tns-core-modules/application/application.android.ts +++ b/tns-core-modules/application/application.android.ts @@ -290,15 +290,10 @@ function initLifecycleCallbacks() { onActivityResumed: profile("onActivityResumed", function (activity: android.support.v7.app.AppCompatActivity) { androidApp.foregroundActivity = activity; - if ((activity).isNativeScriptActivity) { - notify({ eventName: resumeEvent, object: androidApp, android: activity }); - androidApp.paused = false; - } - androidApp.notify({ eventName: ActivityResumed, object: androidApp, activity: activity }); }), - onActivitySaveInstanceState: profile("onActivityResumed", function (activity: android.support.v7.app.AppCompatActivity, outState: android.os.Bundle) { + onActivitySaveInstanceState: profile("onActivitySaveInstanceState", function (activity: android.support.v7.app.AppCompatActivity, outState: android.os.Bundle) { androidApp.notify({ eventName: SaveActivityState, object: androidApp, activity: activity, bundle: outState }); }), diff --git a/tns-core-modules/ui/frame/activity.android.ts b/tns-core-modules/ui/frame/activity.android.ts index 55d9118a9..946ca63df 100644 --- a/tns-core-modules/ui/frame/activity.android.ts +++ b/tns-core-modules/ui/frame/activity.android.ts @@ -50,6 +50,10 @@ class NativeScriptActivity extends android.support.v7.app.AppCompatActivity { this._callbacks.onDestroy(this, super.onDestroy); } + public onPostResume(): void { + this._callbacks.onPostResume(this, super.onPostResume); + } + public onBackPressed(): void { this._callbacks.onBackPressed(this, super.onBackPressed); } diff --git a/tns-core-modules/ui/frame/frame.android.ts b/tns-core-modules/ui/frame/frame.android.ts index d2e3c9943..4053b9890 100644 --- a/tns-core-modules/ui/frame/frame.android.ts +++ b/tns-core-modules/ui/frame/frame.android.ts @@ -859,13 +859,13 @@ class FragmentCallbacksImplementation implements AndroidFragmentCallbacks { // lose its parent we temporarily add it to the parent, and then remove it (addViewInLayout doesn't trigger layout pass) const nativeView = page.nativeViewProtected; if (nativeView != null) { - const parentView = nativeView.getParent(); + const parentView = nativeView.getParent(); if (parentView instanceof android.view.ViewGroup) { if (parentView.getChildCount() === 0) { parentView.addViewInLayout(nativeView, -1, new org.nativescript.widgets.CommonLayoutParams()); } - parentView.removeView(nativeView); + parentView.removeView(nativeView); } } @@ -1006,6 +1006,30 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks { } } + @profile + public onPostResume(activity: any, superFunc: Function): void { + superFunc.call(activity); + + if (traceEnabled()) { + traceWrite("NativeScriptActivity.onPostResume();", traceCategories.NativeLifecycle); + } + + // NOTE: activity.onPostResume() is called when activity resume is complete and we can + // safely raise the application resume event; + // onActivityResumed(...) lifecycle callback registered in application is called too early + // and raising the application resume event there causes issues like + // https://github.com/NativeScript/NativeScript/issues/6708 + if ((activity).isNativeScriptActivity) { + const args = { + eventName: application.resumeEvent, + object: application.android, + android: activity + }; + application.notify(args); + application.android.paused = false; + } + } + @profile public onDestroy(activity: any, superFunc: Function): void { if (traceEnabled()) { diff --git a/tns-core-modules/ui/frame/frame.d.ts b/tns-core-modules/ui/frame/frame.d.ts index dac7f0f55..a92519b69 100644 --- a/tns-core-modules/ui/frame/frame.d.ts +++ b/tns-core-modules/ui/frame/frame.d.ts @@ -415,6 +415,7 @@ export interface AndroidActivityCallbacks { onSaveInstanceState(activity: any, outState: any, superFunc: Function): void; onStart(activity: any, superFunc: Function): void; onStop(activity: any, superFunc: Function): void; + onPostResume(activity: any, superFunc: Function): void; onDestroy(activity: any, superFunc: Function): void; onBackPressed(activity: any, superFunc: Function): void; onRequestPermissionsResult(activity: any, requestCode: number, permissions: Array, grantResults: Array, superFunc: Function): void;