From 7c689530093c5bb4e991b7743b9751162ae5dc65 Mon Sep 17 00:00:00 2001 From: Hristo Hristov Date: Fri, 20 Oct 2017 08:37:36 +0300 Subject: [PATCH] Fix clear history transition (#4951) * fix: Navigation test app added * Removed native popToBackstack call. Implemented custom fragment save/restore state. When navigating back we reverse manually transitions/animations because we no longer add them to navite backstack. Fragment instance stored on entry. Animation and Transition listeners now holds reference to entry instead of fragment for easier update of fragment. Animation and Transition listeners removed when entry removed from backstack. Animation and Transition removed from fragment when fragment activity is destroyed. * Revert package.json start up entry Fixed bug where goBack took the last element in backstack while navigationQueue is not empty. Fixed bug where goBack to specific entry in the backstack was removing that entry... Removed duplicated method Refactored method name Fixed TS --- apps/app/navigation-app/app.css | 13 + apps/app/navigation-app/app.ts | 12 + apps/app/navigation-app/main-page.ts | 69 +++ apps/app/navigation-app/main-page.xml | 13 + tests/app/ui/helper.ts | 16 +- tests/app/ui/scroll-view/scroll-view-tests.ts | 27 +- tns-core-modules/ui/frame/fragment.android.ts | 9 +- .../ui/frame/fragment.transitions.android.ts | 473 +++++++++--------- .../ui/frame/fragment.transitions.d.ts | 38 +- tns-core-modules/ui/frame/frame-common.ts | 47 +- tns-core-modules/ui/frame/frame.android.ts | 181 ++++--- tns-core-modules/ui/frame/frame.d.ts | 16 + tns-core-modules/ui/frame/frame.ios.ts | 3 +- 13 files changed, 557 insertions(+), 360 deletions(-) create mode 100644 apps/app/navigation-app/app.css create mode 100644 apps/app/navigation-app/app.ts create mode 100644 apps/app/navigation-app/main-page.ts create mode 100644 apps/app/navigation-app/main-page.xml diff --git a/apps/app/navigation-app/app.css b/apps/app/navigation-app/app.css new file mode 100644 index 000000000..6836901c4 --- /dev/null +++ b/apps/app/navigation-app/app.css @@ -0,0 +1,13 @@ +.btn1 { + background-color: lightgreen; + color: coral; + font-size: 20; + font-family: monospace; +} + +.btn2 { + background-color: coral; + color: lightgreen; + font-size: 24; + font-family: serif; +} \ No newline at end of file diff --git a/apps/app/navigation-app/app.ts b/apps/app/navigation-app/app.ts new file mode 100644 index 000000000..677bdc781 --- /dev/null +++ b/apps/app/navigation-app/app.ts @@ -0,0 +1,12 @@ +import * as application from "tns-core-modules/application"; +import * as trace from "tns-core-modules/trace"; +trace.addCategories( + trace.categories.Transition) +// + "," + +// trace.categories.NativeLifecycle + "," + +// trace.categories.Navigation); +trace.enable(); + +// Needed only for build infrastructure +application.setCssFileName("navigation-app/app.css"); +application.start({ moduleName: "navigation-app/main-page" }); \ No newline at end of file diff --git a/apps/app/navigation-app/main-page.ts b/apps/app/navigation-app/main-page.ts new file mode 100644 index 000000000..5f952ca9f --- /dev/null +++ b/apps/app/navigation-app/main-page.ts @@ -0,0 +1,69 @@ +import { EventData } from 'tns-core-modules/data/observable'; +import { Page, NavigatedData } from 'tns-core-modules/ui/page'; +import { topmost, NavigationEntry } from 'tns-core-modules/ui/frame'; + +export function nav() { + const e: NavigationEntry = { + moduleName: "navigation-app/main-page" + } + topmost().navigate(e) +} +export function navClearTrans() { + console.log("transition and clear") + + const e: NavigationEntry = { + transition: { + name: "slideLeft", + curve: "linear" + }, + clearHistory: true, + moduleName: "navigation-app/main-page" + } + topmost().navigate(e) +} + +export function navWithTransition() { + const e: NavigationEntry = { + transition: { + name: "slideLeft", + curve: "linear" + }, + moduleName: "navigation-app/main-page" + } + topmost().navigate(e) +} + +export function navWithClear() { + const e: NavigationEntry = { + clearHistory: true, + moduleName: "navigation-app/main-page" + } + topmost().navigate(e) +} + +let i = 0; +const colors = ["lightgreen", "lightblue", "lightcoral"] + +export function navigatedFrom(args: NavigatedData) { + console.log(`navigatedFrom ${args.object.toString()} isBack: ${args.isBackNavigation}`) +} + +export function navigatedTo(args: NavigatedData) { + console.log(`navigatedTo ${args.object.toString()} isBack: ${args.isBackNavigation}`) +} + +export function navigatingTo(args: NavigatedData) { + if (!args.isBackNavigation) { + (args.object).page.backgroundColor = colors[(i++) % 3]; + const array = new Array(); + for (let i = 0; i < 50; i++) { + array[i] = i; + } + (args.object).page.bindingContext = array; + } + console.log(`navigatingTo ${args.object.toString()} isBack: ${args.isBackNavigation}`) +} + +export function navigatingFrom(args: NavigatedData) { + console.log(`navigatingFrom ${args.object.toString()} isBack: ${args.isBackNavigation}`) +} \ No newline at end of file diff --git a/apps/app/navigation-app/main-page.xml b/apps/app/navigation-app/main-page.xml new file mode 100644 index 000000000..cf7d2a0d8 --- /dev/null +++ b/apps/app/navigation-app/main-page.xml @@ -0,0 +1,13 @@ + + +