mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 21:01:34 +08:00
Merge pull request #1647 from NativeScript/cankov/fix-android-background-navigate
Frame.navigate while in background
This commit is contained in:
@ -127,7 +127,7 @@ function pageFromBuilder(moduleNamePath: string, moduleExports: any): Page {
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NavigationContext {
|
export interface NavigationContext {
|
||||||
entry: definition.BackstackEntry;
|
entry: definition.BackstackEntry;
|
||||||
isBackNavigation: boolean;
|
isBackNavigation: boolean;
|
||||||
}
|
}
|
||||||
@ -264,7 +264,7 @@ export class Frame extends CustomLayoutView implements definition.Frame {
|
|||||||
//trace.write("calling _updateActionBar on Frame", trace.categories.Navigation);
|
//trace.write("calling _updateActionBar on Frame", trace.categories.Navigation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _processNavigationContext(navigationContext: NavigationContext) {
|
protected _processNavigationContext(navigationContext: NavigationContext) {
|
||||||
if (navigationContext.isBackNavigation) {
|
if (navigationContext.isBackNavigation) {
|
||||||
this.performGoBack(navigationContext);
|
this.performGoBack(navigationContext);
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import definition = require("ui/frame");
|
import definition = require("ui/frame");
|
||||||
import frameCommon = require("./frame-common");
|
import frameCommon = require("./frame-common");
|
||||||
import pages = require("ui/page");
|
import pages = require("ui/page");
|
||||||
|
import transitionModule = require("ui/transition");
|
||||||
|
import trace = require("trace");
|
||||||
import {View} from "ui/core/view";
|
import {View} from "ui/core/view";
|
||||||
import {Observable} from "data/observable";
|
import {Observable} from "data/observable";
|
||||||
import trace = require("trace");
|
import * as application from "application";
|
||||||
import application = require("application");
|
|
||||||
import * as types from "utils/types";
|
import * as types from "utils/types";
|
||||||
import * as utils from "utils/utils";
|
import * as utils from "utils/utils";
|
||||||
import transitionModule = require("ui/transition");
|
|
||||||
|
|
||||||
global.moduleMerge(frameCommon, exports);
|
global.moduleMerge(frameCommon, exports);
|
||||||
|
|
||||||
@ -348,6 +348,45 @@ export class Frame extends frameCommon.Frame {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected _processNavigationContext(navigationContext: frameCommon.NavigationContext) {
|
||||||
|
let activity = this._android.activity;
|
||||||
|
if (activity) {
|
||||||
|
let isForegroundActivity = activity === application.android.foregroundActivity;
|
||||||
|
let isPaused = application.android.paused;
|
||||||
|
|
||||||
|
if (activity && !isForegroundActivity || (isForegroundActivity && isPaused)) {
|
||||||
|
let weakActivity = new WeakRef(activity);
|
||||||
|
let resume = (args: application.AndroidActivityEventData) => {
|
||||||
|
let weakActivityInstance = weakActivity.get();
|
||||||
|
let isCurrent = args.activity === weakActivityInstance;
|
||||||
|
if (!weakActivityInstance) {
|
||||||
|
trace.write(`Frame _processNavigationContext: Drop For Activity GC-ed`, trace.categories.Navigation);
|
||||||
|
unsubscribe();
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (isCurrent) {
|
||||||
|
trace.write(`Frame _processNavigationContext: Activity.Resumed, Continue`, trace.categories.Navigation);
|
||||||
|
super._processNavigationContext(navigationContext);
|
||||||
|
unsubscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let unsubscribe = () => {
|
||||||
|
trace.write(`Frame _processNavigationContext: Unsubscribe from Activity.Resumed`, trace.categories.Navigation);
|
||||||
|
application.android.off(application.AndroidApplication.activityResumedEvent, resume);
|
||||||
|
application.android.off(application.AndroidApplication.activityStoppedEvent, unsubscribe);
|
||||||
|
application.android.off(application.AndroidApplication.activityDestroyedEvent, unsubscribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
trace.write(`Frame._processNavigationContext: Subscribe for Activity.Resumed`, trace.categories.Navigation);
|
||||||
|
application.android.on(application.AndroidApplication.activityResumedEvent, resume);
|
||||||
|
application.android.on(application.AndroidApplication.activityStoppedEvent, unsubscribe);
|
||||||
|
application.android.on(application.AndroidApplication.activityDestroyedEvent, unsubscribe);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super._processNavigationContext(navigationContext);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var framesCounter = 0;
|
var framesCounter = 0;
|
||||||
|
Reference in New Issue
Block a user