FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Fix for frequent crashes in Frame package by DickSmith · Pull Request #5063 · NativeScript/NativeScript · GitHub

6 changes: 5 additions & 1 deletion tns-core-modules/timer/timer.ios.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ class TimerTargetImpl extends NSObject {

public tick(timer): void {
if (!this.disposed) {
this.callback();
try {
this.callback();
} catch (e) {
// TODO
}
}

if (!this.shouldRepeat) {
Expand Down
58 changes: 32 additions & 26 deletions tns-core-modules/ui/frame/frame-common.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export function reloadPage(): void {
create: currentEntry.create,
moduleName: currentEntry.moduleName,
backstackVisible: currentEntry.backstackVisible
}
};

frame.navigate(newEntry);
}
Expand All @@ -72,7 +72,7 @@ const moduleCreatePage = profile("module.createPage", (moduleNamePath: string, m
if (traceEnabled()) {
traceWrite("Calling createPage()", traceCategories.Navigation);
}
var page = moduleExports.createPage();
const page = moduleExports.createPage();

let cssFileName = resolveFileName(moduleNamePath, "css");
// If there is no cssFile only appCss will be applied at loaded.
Expand Down Expand Up @@ -204,7 +204,7 @@ export class FrameBase extends CustomLayoutView implements FrameDefinition {
const navigationContext: NavigationContext = {
entry: backstackEntry,
isBackNavigation: true
}
};

this._navigationQueue.push(navigationContext);

Expand Down Expand Up @@ -273,7 +273,7 @@ export class FrameBase extends CustomLayoutView implements FrameDefinition {
const navigationContext: NavigationContext = {
entry: backstackEntry,
isBackNavigation: false
}
};

this._navigationQueue.push(navigationContext);

Expand Down Expand Up @@ -367,34 +367,38 @@ export class FrameBase extends CustomLayoutView implements FrameDefinition {

@profile
private performNavigation(navigationContext: NavigationContext) {
let navContext = navigationContext.entry;
if (navigationContext) {
let navContext = navigationContext.entry;

// TODO: This should happen once navigation is completed.
if (navContext && navContext.entry && navContext.entry.clearHistory) {
// Don't clear backstack immediately or we can't remove pages from frame.
} else if (FrameBase._isEntryBackstackVisible(this._currentEntry)) {
this._backStack.push(this._currentEntry);
}

// TODO: This should happen once navigation is completed.
if (navigationContext.entry.entry.clearHistory) {
// Don't clear backstack immediately or we can't remove pages from frame.
} else if (FrameBase._isEntryBackstackVisible(this._currentEntry)) {
this._backStack.push(this._currentEntry);
this._onNavigatingTo(navContext, navigationContext.isBackNavigation);
this._navigateCore(navContext);
}

this._onNavigatingTo(navContext, navigationContext.isBackNavigation);
this._navigateCore(navContext);
}

@profile
private performGoBack(navigationContext: NavigationContext) {
let backstackEntry = navigationContext.entry;
if (!backstackEntry) {
backstackEntry = this._backStack.pop();
navigationContext.entry = backstackEntry;
} else {
const index = this._backStack.indexOf(backstackEntry);
const removed = this._backStack.splice(index + 1);
this._backStack.pop();
this._removeBackstackEntries(removed);
if (navigationContext) {
let backstackEntry = navigationContext.entry;
if (!backstackEntry) {
backstackEntry = this._backStack.pop();
navigationContext.entry = backstackEntry;
} else {
const index = this._backStack.indexOf(backstackEntry);
const removed = this._backStack.splice(index + 1);
this._backStack.pop();
this._removeBackstackEntries(removed);
}

this._onNavigatingTo(backstackEntry, true);
this._goBackCore(backstackEntry);
}

this._onNavigatingTo(backstackEntry, true);
this._goBackCore(backstackEntry);
}

public _goBackCore(backstackEntry: BackstackEntry) {
Expand All @@ -414,7 +418,9 @@ export class FrameBase extends CustomLayoutView implements FrameDefinition {
this.currentPage.onNavigatingFrom(isBack);
}

backstackEntry.resolvedPage.onNavigatingTo(backstackEntry.entry.context, isBack, backstackEntry.entry.bindingContext);
if (backstackEntry && backstackEntry.resolvedPage) {
backstackEntry.resolvedPage.onNavigatingTo(backstackEntry.entry.context, isBack, backstackEntry.entry.bindingContext);
}
}

public get animated(): boolean {
Expand Down
45 changes: 25 additions & 20 deletions tns-core-modules/ui/frame/frame.android.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -168,34 +168,39 @@ export class Frame extends FrameBase {
}

transaction.replace(this.containerViewId, newFragment, newFragmentTag);
transaction.commit();
transaction.commitAllowingStateLoss();
}

public _goBackCore(backstackEntry: BackstackEntry) {
super._goBackCore(backstackEntry);
navDepth = backstackEntry.navDepth;

const activity = this._android.activity;
const manager = activity.getFragmentManager();
const transaction = manager.beginTransaction();
if (backstackEntry) {
navDepth = backstackEntry.navDepth;

if (!backstackEntry.fragment) {
// Happens on newer API levels. On older all fragments
// are recreated once activity is created.
// This entry fragment was destroyed by app suspend.
// We need to recreate its animations and then reverse it.
backstackEntry.fragment = this.createFragment(backstackEntry, backstackEntry.fragmentTag);
_updateTransitions(backstackEntry);
}
const activity = this._android.activity;
if (activity) {
const manager = activity.getFragmentManager();
const transaction = manager.beginTransaction();

if (!backstackEntry.fragment) {
// Happens on newer API levels. On older all fragments
// are recreated once activity is created.
// This entry fragment was destroyed by app suspend.
// We need to recreate its animations and then reverse it.
backstackEntry.fragment = this.createFragment(backstackEntry, backstackEntry.fragmentTag);
_updateTransitions(backstackEntry);
}

const transitionReversed = _reverseTransitions(backstackEntry, this._currentEntry);
if (!transitionReversed) {
// If transition were not reversed then use animations.
transaction.setCustomAnimations(AnimationType.popEnterFakeResourceId, AnimationType.popExitFakeResourceId, AnimationType.enterFakeResourceId, AnimationType.exitFakeResourceId);
}
const transitionReversed = _reverseTransitions(backstackEntry, this._currentEntry);
if (!transitionReversed) {
// If transition were not reversed then use animations.
transaction.setCustomAnimations(AnimationType.popEnterFakeResourceId, AnimationType.popExitFakeResourceId, AnimationType.enterFakeResourceId, AnimationType.exitFakeResourceId);
}

transaction.replace(this.containerViewId, backstackEntry.fragment, backstackEntry.fragmentTag);
transaction.commit();
transaction.replace(this.containerViewId, backstackEntry.fragment, backstackEntry.fragmentTag);
transaction.commitAllowingStateLoss();
}
}
}

public _removeBackstackEntries(removed: BackstackEntry[]): void {
Expand Down
Loading

Back | FazBrowse Home | New Git URL