Fixed: The exit transition of the current page is not played when navigating with clearHistory

Resolves #2225
This commit is contained in:
Rossen Hristov
2016-06-02 10:47:23 +03:00
parent 659d91bfb2
commit 5c47f54fe5
5 changed files with 171 additions and 113 deletions

View File

@ -321,13 +321,13 @@ export class Frame extends CustomLayoutView implements definition.Frame {
public _goBackCore(backstackEntry: definition.BackstackEntry) {
if (trace.enabled) {
trace.write(`${this}._goBackCore(${this._backstackEntryTrace(backstackEntry)}); ${this}.currentPage: ${this.currentPage}`, trace.categories.Navigation);
trace.write(`GO BACK CORE(${this._backstackEntryTrace(backstackEntry)}); currentPage: ${this.currentPage}`, trace.categories.Navigation);
}
}
public _navigateCore(backstackEntry: definition.BackstackEntry) {
if (trace.enabled) {
trace.write(`${this}._navigateCore(${this._backstackEntryTrace(backstackEntry)}); ${this}.currentPage: ${this.currentPage}`, trace.categories.Navigation);
trace.write(`NAVIGATE CORE(${this._backstackEntryTrace(backstackEntry)}); currentPage: ${this.currentPage}`, trace.categories.Navigation);
}
}

View File

@ -163,24 +163,6 @@ export class Frame extends frameCommon.Frame {
backstackEntry.fragmentTag = newFragmentTag;
backstackEntry.navDepth = navDepth;
// Clear History
let length = manager.getBackStackEntryCount();
let emptyNativeBackStack = clearHistory && length > 0;
if (emptyNativeBackStack) {
for (let i = 0; i < length; i++) {
let fragmentToRemove = <FragmentClass>manager.findFragmentByTag(manager.getBackStackEntryAt(i).getName());
Frame._clearHistory(fragmentToRemove);
}
if (currentFragment) {
Frame._clearHistory(currentFragment);
}
let firstEntryName = manager.getBackStackEntryAt(0).getName();
if (trace.enabled) {
trace.write(`POP BACK STACK ${firstEntryName}`, trace.categories.Navigation);
}
manager.popBackStackImmediate(firstEntryName, android.app.FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
let fragmentTransaction = manager.beginTransaction();
if (trace.enabled) {
trace.write(`BEGIN TRANSACTION ${fragmentTransaction}`, trace.categories.Navigation);
@ -198,6 +180,27 @@ export class Frame extends frameCommon.Frame {
}
}
// Clear History
let length = manager.getBackStackEntryCount();
let emptyNativeBackStack = clearHistory && length > 0;
if (emptyNativeBackStack) {
for (let i = 0; i < length; i++) {
let fragmentToRemove = <FragmentClass>manager.findFragmentByTag(manager.getBackStackEntryAt(i).getName());
Frame._clearHistory(fragmentToRemove);
}
if (currentFragment) {
// We need to reverse the transitions because Android will ask the current fragment
// to create its POP EXIT animator due to popping the back stack, but in reality
// we need to create the EXIT animator because we are actually going forward and not back.
transitionModule._reverseTransitionsDirection(currentFragment);
}
let firstEntryName = manager.getBackStackEntryAt(0).getName();
if (trace.enabled) {
trace.write(`POP BACK STACK ${firstEntryName}`, trace.categories.Navigation);
}
manager.popBackStackImmediate(firstEntryName, android.app.FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
// Hide/remove current fragment if it exists and was not popped
if (currentFragment && !emptyNativeBackStack) {
if (this.android.cachePagesOnNavigate && !clearHistory) {

View File

@ -113,4 +113,8 @@ export class SlideTransition extends transition.Transition {
animator.setInterpolator(this.getCurve());
return animator;
}
public toString(): string {
return `${super.toString()} ${this._direction}`;
}
}

View File

@ -6,9 +6,9 @@ import { device } from "platform";
import * as animationModule from "ui/animation";
import lazy from "utils/lazy";
import trace = require("trace");
var _sdkVersion = lazy(() => parseInt(device.sdkVersion));
let _sdkVersion = lazy(() => parseInt(device.sdkVersion));
var _defaultInterpolator = lazy(() => new android.view.animation.AccelerateDecelerateInterpolator());
let _defaultInterpolator = lazy(() => new android.view.animation.AccelerateDecelerateInterpolator());
interface CompleteOptions {
isBack: boolean;
@ -20,22 +20,23 @@ interface ExpandedFragment {
completePageAdditionWhenTransitionEnds: CompleteOptions;
completePageRemovalWhenTransitionEnds: CompleteOptions;
isDestroyed: boolean;
reverseNextAnimDirection: boolean;
}
var enterFakeResourceId = -10;
var exitFakeResourceId = -20;
var popEnterFakeResourceId = -30;
var popExitFakeResourceId = -40;
let enterFakeResourceId = -10;
let exitFakeResourceId = -20;
let popEnterFakeResourceId = -30;
let popExitFakeResourceId = -40;
export module AndroidTransitionType {
export var enter: string = "enter";
export var exit: string = "exit";
export var popEnter: string = "popEnter";
export var popExit: string = "popExit";
export let enter: string = "enter";
export let exit: string = "exit";
export let popEnter: string = "popEnter";
export let popExit: string = "popExit";
}
export function _clearBackwardTransitions(fragment: any): void {
var expandedFragment = <ExpandedFragment>fragment;
let expandedFragment = <ExpandedFragment>fragment;
if (expandedFragment.enterPopExitTransition) {
if (trace.enabled) {
trace.write(`Cleared enterPopExitTransition ${expandedFragment.enterPopExitTransition} for ${fragment}`, trace.categories.Transition);
@ -44,14 +45,14 @@ export function _clearBackwardTransitions(fragment: any): void {
}
if (_sdkVersion() >= 21) {
var enterTransition = (<any>fragment).getEnterTransition();
let enterTransition = (<any>fragment).getEnterTransition();
if (enterTransition) {
if (trace.enabled) {
trace.write(`Cleared Enter ${enterTransition.getClass().getSimpleName() } transition for ${fragment}`, trace.categories.Transition);
}
(<any>fragment).setEnterTransition(null);
}
var returnTransition = (<any>fragment).getReturnTransition();
let returnTransition = (<any>fragment).getReturnTransition();
if (returnTransition) {
if (trace.enabled) {
trace.write(`Cleared Pop Exit ${returnTransition.getClass().getSimpleName() } transition for ${fragment}`, trace.categories.Transition);
@ -62,7 +63,7 @@ export function _clearBackwardTransitions(fragment: any): void {
}
export function _clearForwardTransitions(fragment: any): void {
var expandedFragment = <ExpandedFragment>fragment;
let expandedFragment = <ExpandedFragment>fragment;
if (expandedFragment.exitPopEnterTransition) {
if (trace.enabled) {
trace.write(`Cleared exitPopEnterTransition ${expandedFragment.exitPopEnterTransition} for ${fragment}`, trace.categories.Transition);
@ -71,14 +72,14 @@ export function _clearForwardTransitions(fragment: any): void {
}
if (_sdkVersion() >= 21) {
var exitTransition = (<any>fragment).getExitTransition();
let exitTransition = (<any>fragment).getExitTransition();
if (exitTransition) {
if (trace.enabled) {
trace.write(`Cleared Exit ${exitTransition.getClass().getSimpleName() } transition for ${fragment}`, trace.categories.Transition);
}
(<any>fragment).setExitTransition(null);//exit
}
var reenterTransition = (<any>fragment).getReenterTransition();
let reenterTransition = (<any>fragment).getReenterTransition();
if (reenterTransition) {
if (trace.enabled) {
trace.write(`Cleared Pop Enter ${reenterTransition.getClass().getSimpleName() } transition for ${fragment}`, trace.categories.Transition);
@ -89,12 +90,13 @@ export function _clearForwardTransitions(fragment: any): void {
}
export function _setAndroidFragmentTransitions(navigationTransition: NavigationTransition, currentFragment: any, newFragment: any, fragmentTransaction: any): void {
var name;
trace.write(`Setting Android Fragment Transitions...`, trace.categories.Transition);
let name;
if (navigationTransition.name) {
name = navigationTransition.name.toLowerCase();
}
var useLollipopTransition = name && (name.indexOf("slide") === 0 || name === "fade" || name === "explode") && _sdkVersion() >= 21;
let useLollipopTransition = name && (name.indexOf("slide") === 0 || name === "fade" || name === "explode") && _sdkVersion() >= 21;
if (useLollipopTransition) {
// setEnterTransition: Enter
// setExitTransition: Exit
@ -109,7 +111,7 @@ export function _setAndroidFragmentTransitions(navigationTransition: NavigationT
}
if (name.indexOf("slide") === 0) {
var direction = name.substr("slide".length) || "left"; //Extract the direction from the string
let direction = name.substr("slide".length) || "left"; //Extract the direction from the string
switch (direction) {
case "left":
let rightEdge = new (<any>android).transition.Slide((<any>android).view.Gravity.RIGHT);
@ -193,26 +195,25 @@ export function _setAndroidFragmentTransitions(navigationTransition: NavigationT
currentFragment.setExitTransition(explodeExit);
}
}
return;
}
var transition: definitionTransition;
else {
let transition: definitionTransition;
if (name) {
if (name.indexOf("slide") === 0) {
//HACK: Use an absolute import to work around a webpack issue that doesn't resolve relatively-imported "xxx.android/ios" modules
var slideTransitionModule = require("ui/transition/slide-transition");
var direction = name.substr("slide".length) || "left"; //Extract the direction from the string
let slideTransitionModule = require("ui/transition/slide-transition");
let direction = name.substr("slide".length) || "left"; //Extract the direction from the string
transition = new slideTransitionModule.SlideTransition(direction, navigationTransition.duration, navigationTransition.curve);
}
else if (name === "fade") {
//HACK: Use an absolute import to work around a webpack issue that doesn't resolve relatively-imported "xxx.android/ios" modules
var fadeTransitionModule = require("ui/transition/fade-transition");
let fadeTransitionModule = require("ui/transition/fade-transition");
transition = new fadeTransitionModule.FadeTransition(navigationTransition.duration, navigationTransition.curve);
}
else if (name.indexOf("flip") === 0) {
//HACK: Use an absolute import to work around a webpack issue that doesn't resolve relatively-imported "xxx.android/ios" modules
var flipTransitionModule = require("ui/transition/flip-transition");
var direction = name.substr("flip".length) || "right"; //Extract the direction from the string
let flipTransitionModule = require("ui/transition/flip-transition");
let direction = name.substr("flip".length) || "right"; //Extract the direction from the string
transition = new flipTransitionModule.FlipTransition(direction, navigationTransition.duration, navigationTransition.curve);
}
}
@ -221,24 +222,28 @@ export function _setAndroidFragmentTransitions(navigationTransition: NavigationT
}
if (transition) {
var newExpandedFragment = <ExpandedFragment>newFragment;
let newExpandedFragment = <ExpandedFragment>newFragment;
newExpandedFragment.enterPopExitTransition = transition;
if (currentFragment) {
var currentExpandedFragment = <ExpandedFragment>currentFragment;
let currentExpandedFragment = <ExpandedFragment>currentFragment;
currentExpandedFragment.exitPopEnterTransition = transition;
}
fragmentTransaction.setCustomAnimations(enterFakeResourceId, exitFakeResourceId, popEnterFakeResourceId, popExitFakeResourceId);
}
}
_printTransitions(currentFragment);
_printTransitions(newFragment);
}
function _setUpNativeTransition(navigationTransition: NavigationTransition, nativeTransition: any/*android.transition.Transition*/) {
if (navigationTransition.duration) {
nativeTransition.setDuration(navigationTransition.duration);
}
if (navigationTransition.curve) {
var animation: typeof animationModule = require("ui/animation");
var interpolator = animation._resolveAnimationCurve(navigationTransition.curve);
let animation: typeof animationModule = require("ui/animation");
let interpolator = animation._resolveAnimationCurve(navigationTransition.curve);
nativeTransition.setInterpolator(interpolator);
}
else {
@ -247,9 +252,12 @@ function _setUpNativeTransition(navigationTransition: NavigationTransition, nati
}
export function _onFragmentShown(fragment: any, isBack: boolean): void {
var expandedFragment = <ExpandedFragment>fragment;
var transitionType = isBack ? "Pop Enter" : "Enter";
var relevantTransition = isBack ? expandedFragment.exitPopEnterTransition : expandedFragment.enterPopExitTransition;
if (trace.enabled){
trace.write(`_onFragmentShown(${fragment}, isBack: ${isBack})`, trace.categories.Transition);
}
let expandedFragment = <ExpandedFragment>fragment;
let transitionType = isBack ? "Pop Enter" : "Enter";
let relevantTransition = isBack ? expandedFragment.exitPopEnterTransition : expandedFragment.enterPopExitTransition;
if (relevantTransition) {
if (trace.enabled) {
trace.write(`${fragment} has been shown when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${relevantTransition}. Will complete page addition when transition ends.`, trace.categories.Transition);
@ -257,7 +265,7 @@ export function _onFragmentShown(fragment: any, isBack: boolean): void {
expandedFragment.completePageAdditionWhenTransitionEnds = { isBack: isBack };
}
else if (_sdkVersion() >= 21) {
var nativeTransition = isBack ? (<any>fragment).getReenterTransition() : (<any>fragment).getEnterTransition();
let nativeTransition = isBack ? (<any>fragment).getReenterTransition() : (<any>fragment).getEnterTransition();
if (nativeTransition) {
if (trace.enabled) {
trace.write(`${fragment} has been shown when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${nativeTransition.getClass().getSimpleName() } transition. Will complete page addition when transition ends.`, trace.categories.Transition);
@ -272,9 +280,12 @@ export function _onFragmentShown(fragment: any, isBack: boolean): void {
}
export function _onFragmentHidden(fragment: any, isBack: boolean, destroyed: boolean) {
var expandedFragment = <ExpandedFragment>fragment;
var transitionType = isBack ? "Pop Exit" : "Exit";
var relevantTransition = isBack ? expandedFragment.enterPopExitTransition : expandedFragment.exitPopEnterTransition;
if (trace.enabled){
trace.write(`_onFragmentHidden(${fragment}, isBack: ${isBack}, destroyed: ${destroyed})`, trace.categories.Transition);
}
let expandedFragment = <ExpandedFragment>fragment;
let transitionType = isBack ? "Pop Exit" : "Exit";
let relevantTransition = isBack ? expandedFragment.enterPopExitTransition : expandedFragment.exitPopEnterTransition;
if (relevantTransition) {
if (trace.enabled) {
trace.write(`${fragment} has been hidden when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${relevantTransition}. Will complete page removal when transition ends.`, trace.categories.Transition);
@ -282,7 +293,7 @@ export function _onFragmentHidden(fragment: any, isBack: boolean, destroyed: boo
expandedFragment.completePageRemovalWhenTransitionEnds = { isBack: isBack };
}
else if (_sdkVersion() >= 21) {
var nativeTransition = isBack ? (<any>fragment).getReturnTransition() : (<any>fragment).getExitTransition();
let nativeTransition = isBack ? (<any>fragment).getReturnTransition() : (<any>fragment).getExitTransition();
if (nativeTransition) {
if (trace.enabled) {
trace.write(`${fragment} has been hidden when going ${isBack ? "back" : "forward"}, but there is ${transitionType} ${nativeTransition.getClass().getSimpleName() } transition. Will complete page removal when transition ends.`, trace.categories.Transition);
@ -300,14 +311,14 @@ export function _onFragmentHidden(fragment: any, isBack: boolean, destroyed: boo
}
function _completePageAddition(fragment: any, isBack: boolean) {
let expandedFragment = <ExpandedFragment>fragment;
expandedFragment.completePageAdditionWhenTransitionEnds = undefined;
let frame = fragment.frame;
let entry: BackstackEntry = fragment.entry;
let page: Page = entry.resolvedPage;
if (trace.enabled) {
trace.write(`STARTING ADDITION of ${page}...`, trace.categories.Transition);
}
var expandedFragment = <ExpandedFragment>fragment;
expandedFragment.completePageAdditionWhenTransitionEnds = undefined;
var frame = fragment.frame;
var entry: BackstackEntry = fragment.entry;
var page: Page = entry.resolvedPage;
// The original code that was once in Frame onFragmentShown
frame._currentEntry = entry;
page.onNavigatedTo(isBack);
@ -319,14 +330,14 @@ function _completePageAddition(fragment: any, isBack: boolean) {
}
function _completePageRemoval(fragment: any, isBack: boolean) {
let expandedFragment = <ExpandedFragment>fragment;
expandedFragment.completePageRemovalWhenTransitionEnds = undefined;
let frame = fragment.frame;
let entry: BackstackEntry = fragment.entry;
let page: Page = entry.resolvedPage;
if (trace.enabled) {
trace.write(`STARTING REMOVAL of ${page}...`, trace.categories.Transition);
}
var expandedFragment = <ExpandedFragment>fragment;
expandedFragment.completePageRemovalWhenTransitionEnds = undefined;
var frame = fragment.frame;
var entry: BackstackEntry = fragment.entry;
var page: Page = entry.resolvedPage;
if (page.frame) {
frame._removeView(page);
// This could be undefined if activity is destroyed (e.g. without actual navigation).
@ -364,7 +375,7 @@ function _completePageRemoval(fragment: any, isBack: boolean) {
export function _removePageNativeViewFromAndroidParent(page: Page): void {
if (page._nativeView && page._nativeView.getParent) {
var androidParent = page._nativeView.getParent();
let androidParent = page._nativeView.getParent();
if (androidParent && androidParent.removeView) {
if (trace.enabled) {
trace.write(`REMOVED ${page}._nativeView from its Android parent`, trace.categories.Transition);
@ -374,12 +385,16 @@ export function _removePageNativeViewFromAndroidParent(page: Page): void {
}
}
function _toShortString(nativeTransition: any): string {
return `${nativeTransition.getClass().getSimpleName()}@${nativeTransition.hashCode().toString(16)}`;
}
function _addNativeTransitionListener(fragment: any, nativeTransition: any/*android.transition.Transition*/) {
var expandedFragment = <ExpandedFragment>fragment;
var transitionListener = new (<any>android).transition.Transition.TransitionListener({
let expandedFragment = <ExpandedFragment>fragment;
let transitionListener = new (<any>android).transition.Transition.TransitionListener({
onTransitionCancel: function (transition: any): void {
if (trace.enabled) {
trace.write(`CANCEL ${nativeTransition} transition for ${fragment}`, trace.categories.Transition);
trace.write(`CANCEL ${_toShortString(nativeTransition)} transition for ${fragment}`, trace.categories.Transition);
}
if (expandedFragment.completePageRemovalWhenTransitionEnds) {
_completePageRemoval(fragment, expandedFragment.completePageRemovalWhenTransitionEnds.isBack);
@ -390,7 +405,7 @@ function _addNativeTransitionListener(fragment: any, nativeTransition: any/*andr
},
onTransitionEnd: function (transition: any): void {
if (trace.enabled) {
trace.write(`END ${nativeTransition} transition for ${fragment}`, trace.categories.Transition);
trace.write(`END ${_toShortString(nativeTransition)} transition for ${fragment}`, trace.categories.Transition);
}
if (expandedFragment.completePageRemovalWhenTransitionEnds) {
_completePageRemoval(fragment, expandedFragment.completePageRemovalWhenTransitionEnds.isBack);
@ -401,17 +416,17 @@ function _addNativeTransitionListener(fragment: any, nativeTransition: any/*andr
},
onTransitionPause: function (transition: any): void {
if (trace.enabled) {
trace.write(`PAUSE ${nativeTransition} transition for ${fragment}`, trace.categories.Transition);
trace.write(`PAUSE ${_toShortString(nativeTransition)} transition for ${fragment}`, trace.categories.Transition);
}
},
onTransitionResume: function (transition: any): void {
if (trace.enabled) {
trace.write(`RESUME ${nativeTransition} transition for ${fragment}`, trace.categories.Transition);
trace.write(`RESUME ${_toShortString(nativeTransition)} transition for ${fragment}`, trace.categories.Transition);
}
},
onTransitionStart: function (transition: any): void {
if (trace.enabled) {
trace.write(`START ${nativeTransition} transition for ${fragment}`, trace.categories.Transition);
trace.write(`START ${_toShortString(nativeTransition)} transition for ${fragment}`, trace.categories.Transition);
}
}
});
@ -419,16 +434,18 @@ function _addNativeTransitionListener(fragment: any, nativeTransition: any/*andr
}
export function _onFragmentCreateAnimator(fragment: any, nextAnim: number): android.animation.Animator {
var expandedFragment = <ExpandedFragment>fragment;
var transitionType;
let expandedFragment = <ExpandedFragment>fragment;
let noReverse = !expandedFragment.reverseNextAnimDirection;
delete expandedFragment.reverseNextAnimDirection;
let transitionType;
switch (nextAnim) {
case enterFakeResourceId: transitionType = AndroidTransitionType.enter; break;
case exitFakeResourceId: transitionType = AndroidTransitionType.exit; break;
case popEnterFakeResourceId: transitionType = AndroidTransitionType.popEnter; break;
case popExitFakeResourceId: transitionType = AndroidTransitionType.popExit; break;
case enterFakeResourceId: transitionType = noReverse ? AndroidTransitionType.enter : AndroidTransitionType.popEnter; break;
case exitFakeResourceId: transitionType = noReverse ? AndroidTransitionType.exit : AndroidTransitionType.popExit; break;
case popEnterFakeResourceId: transitionType = noReverse ? AndroidTransitionType.popEnter : AndroidTransitionType.enter; break;
case popExitFakeResourceId: transitionType = noReverse ? AndroidTransitionType.popExit : AndroidTransitionType.exit; break;
}
var transition;
let transition;
switch (transitionType) {
case AndroidTransitionType.enter:
case AndroidTransitionType.popExit:
@ -440,10 +457,10 @@ export function _onFragmentCreateAnimator(fragment: any, nextAnim: number): andr
break;
}
var animator: android.animation.Animator;
let animator: android.animation.Animator;
if (transition) {
animator = <android.animation.Animator>transition.createAndroidAnimator(transitionType);
var transitionListener = new android.animation.Animator.AnimatorListener({
let transitionListener = new android.animation.Animator.AnimatorListener({
onAnimationStart: function (animator: android.animation.Animator): void {
if (trace.enabled) {
trace.write(`START ${transitionType} ${transition} for ${fragment}`, trace.categories.Transition);
@ -488,6 +505,23 @@ export function _onFragmentCreateAnimator(fragment: any, nextAnim: number): andr
return animator;
}
export function _reverseTransitionsDirection(fragment: any): void {
trace.write(`Swapping ${fragment} transitions...`, trace.categories.Transition);
let expandedFragment = <ExpandedFragment>fragment;
expandedFragment.reverseNextAnimDirection = true;
if (_sdkVersion() >= 21) {
let enterTransition = fragment.getEnterTransition();
let exitTransition = fragment.getExitTransition();
let reenterTransition = fragment.getReenterTransition();
let returnTransition = fragment.getReturnTransition();
fragment.setEnterTransition(exitTransition);
fragment.setExitTransition(enterTransition);
fragment.setReenterTransition(returnTransition);
fragment.setReturnTransition(reenterTransition);
}
_printTransitions(fragment);
}
let intEvaluator: android.animation.IntEvaluator;
function ensureIntEvaluator() {
if (!intEvaluator) {
@ -503,11 +537,27 @@ function _createDummyZeroDurationAnimator(): android.animation.Animator {
let nativeArray = (<any>Array).create(java.lang.Object, 2);
nativeArray[0] = java.lang.Integer.valueOf(0);
nativeArray[1] = java.lang.Integer.valueOf(1);
var animator = android.animation.ValueAnimator.ofObject(intEvaluator, nativeArray);
let animator = android.animation.ValueAnimator.ofObject(intEvaluator, nativeArray);
animator.setDuration(0);
return animator;
}
function _printTransitions(f: any) {
if (f && trace.enabled){
let ef = <ExpandedFragment>f;
let result = `${ef} Transitions:`;
result += `${ef.enterPopExitTransition ? " enterPopExit=" + ef.enterPopExitTransition : ""}`;
result += `${ef.exitPopEnterTransition ? " exitPopEnter=" + ef.exitPopEnterTransition : ""}`;
if (_sdkVersion() >= 21) {
result += `${f.getEnterTransition() ? " enter=" + _toShortString(f.getEnterTransition()) : ""}`;
result += `${f.getExitTransition() ? " exit=" + _toShortString(f.getExitTransition()) : ""}`;
result += `${f.getReenterTransition() ? " popEnter=" + _toShortString(f.getReenterTransition()) : ""}`;
result += `${f.getReturnTransition() ? " popExit=" + _toShortString(f.getReturnTransition()) : ""}`;
}
trace.write(result, trace.categories.Transition);
}
}
export class Transition implements definitionTransition {
private _duration: number;
private _interpolator: android.view.animation.Interpolator;
@ -517,7 +567,7 @@ export class Transition implements definitionTransition {
constructor(duration: number, curve: any) {
this._duration = duration;
if (curve) {
var animation: typeof animationModule = require("ui/animation");
let animation: typeof animationModule = require("ui/animation");
this._interpolator = animation._resolveAnimationCurve(curve);
}
else {

View File

@ -26,6 +26,7 @@
export function _onFragmentShown(fragment: any, isBack: boolean): void;
export function _onFragmentHidden(fragment: any, isBack: boolean, destroyed: boolean): void;
export function _removePageNativeViewFromAndroidParent(page: Page): void;
export function _reverseTransitionsDirection(fragment: any): void;
export function _createIOSAnimatedTransitioning(navigationTransition: NavigationTransition, nativeCurve: any, operation: number, fromVC: any, toVC: any): any;
//@endprivate