From 6015cbe3e4b64398106209f020e1c30115ceea82 Mon Sep 17 00:00:00 2001 From: farfromrefuge Date: Mon, 13 Nov 2023 16:43:09 +0100 Subject: [PATCH 1/2] fix(android): prevent error while navigation back after using page transition --- .../ui/transition/page-transition.android.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/core/ui/transition/page-transition.android.ts b/packages/core/ui/transition/page-transition.android.ts index 2d4f064e4e..0f11251c9f 100644 --- a/packages/core/ui/transition/page-transition.android.ts +++ b/packages/core/ui/transition/page-transition.android.ts @@ -8,8 +8,9 @@ import { getPageStartDefaultsForType, getRectFromProps, SharedTransition, Shared import { ImageSource } from '../../image-source'; import { ContentView } from '../content-view'; import { GridLayout } from '../layouts/grid-layout'; -import { ad } from '../../utils'; import { Screen } from '../../platform'; +import { ExpandedEntry } from '../frame/fragment.transitions.android'; +import { android as AndroidUtils } from '../../utils/native-helper'; // import { Image } from '../image'; @NativeClass @@ -171,11 +172,19 @@ export class PageTransition extends Transition { return animationSet; } - androidFragmentTransactionCallback(fragmentTransaction: androidx.fragment.app.FragmentTransaction, currentEntry: BackstackEntry, newEntry: BackstackEntry) { + androidFragmentTransactionCallback(fragmentTransaction: androidx.fragment.app.FragmentTransaction, currentEntry: ExpandedEntry, newEntry: BackstackEntry) { const fromPage = currentEntry.resolvedPage; const toPage = newEntry.resolvedPage; const newFragment: androidx.fragment.app.Fragment = newEntry.fragment; const state = SharedTransition.getState(this.id); + if (!state) { + // when navigating transition is set on the currentEntry but never cleaned up + // which means that on a next navigation forward (without transition) and back + // we will go here with an empty state! + currentEntry.transition = null; + return; + } + const pageEnd = state.pageEnd; //we can't look for presented right now as the toPage might not be loaded @@ -277,10 +286,10 @@ function loadViewInBackground(view: View) { hiddenHost.content = hostView; hiddenHost.visibility = 'collapse'; hostView.addChild(view); - hiddenHost._setupAsRootView(ad.getApplicationContext()); + hiddenHost._setupAsRootView(AndroidUtils.getApplicationContext()); hiddenHost.callLoaded(); - ad.getCurrentActivity().addContentView(hiddenHost.android, new android.view.ViewGroup.LayoutParams(0, 0)); + AndroidUtils.getCurrentActivity().addContentView(hiddenHost.android, new android.view.ViewGroup.LayoutParams(0, 0)); return { hiddenHost, From 448ffc0b0f22b5f709a76fe6b7db4562122891b3 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 28 Jun 2024 15:48:16 -0700 Subject: [PATCH 2/2] chore: cleanup --- packages/core/ui/transition/page-transition.android.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/ui/transition/page-transition.android.ts b/packages/core/ui/transition/page-transition.android.ts index ceab494057..46574c8875 100644 --- a/packages/core/ui/transition/page-transition.android.ts +++ b/packages/core/ui/transition/page-transition.android.ts @@ -2,9 +2,8 @@ import type { View } from '../core/view'; import { ViewBase } from '../core/view-base'; import { BackstackEntry } from '../frame'; import { isNumber } from '../../utils/types'; -import { FadeTransition } from './fade-transition'; import { Transition } from '.'; -import { getPageStartDefaultsForType, getRectFromProps, SharedTransition, SharedTransitionAnimationType, SharedTransitionEventData } from './shared-transition'; +import { getRectFromProps, SharedTransition, SharedTransitionAnimationType, SharedTransitionEventData } from './shared-transition'; import { ImageSource } from '../../image-source'; import { ContentView } from '../content-view'; import { GridLayout } from '../layouts/grid-layout';