From f29507f4a443aac01b4390572a1d5c419e4021e0 Mon Sep 17 00:00:00 2001 From: vardhan30016 Date: Mon, 24 Nov 2025 10:34:32 +0530 Subject: [PATCH 1/2] fix(navigation): forward NavigationEntry.context to page and bindingContext when none provided (closes #10912) --- packages/core/ui/frame/frame-common.ts | 56 +++++++++++++++++--------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/packages/core/ui/frame/frame-common.ts b/packages/core/ui/frame/frame-common.ts index 33edd741c1..e53251374d 100644 --- a/packages/core/ui/frame/frame-common.ts +++ b/packages/core/ui/frame/frame-common.ts @@ -427,25 +427,43 @@ export class FrameBase extends CustomLayoutView { @profile public performNavigation(navigationContext: NavigationContext) { - this._executingContext = navigationContext; - - const backstackEntry = navigationContext.entry; - const isBackNavigation = navigationContext.navigationType === NavigationType.back; - this._onNavigatingTo(backstackEntry, isBackNavigation); - const navigationTransition = this._getNavigationTransition(backstackEntry.entry); - if (navigationTransition?.instance) { - const state = SharedTransition.getState(navigationTransition?.instance.id); - SharedTransition.updateState(navigationTransition?.instance.id, { - // Allow setting custom page context to override default (from) page - // helpful for deeply nested frame navigation setups (eg: Nested Tab Navigation) - // when sharing elements in this condition, the (from) page would - // get overridden on each frame preventing shared element matching - page: state?.page || this.currentPage, - toPage: this, - }); - } - this._navigateCore(backstackEntry); - } + this._executingContext = navigationContext; + + const backstackEntry = navigationContext.entry; + const isBackNavigation = navigationContext.navigationType === NavigationType.Back; + + // --- PATCH START --- + try { + const entryContext = backstackEntry?.entry?.context; + const entryBindingContext = backstackEntry?.entry?.bindingContext; + const resolvedPage = backstackEntry?.resolvedPage; + + if (resolvedPage && entryContext !== undefined && entryContext !== null) { + (resolvedPage as any)._navigationContext = entryContext; + + if (entryBindingContext == null && resolvedPage.bindingContext == null) { + try { + resolvedPage.bindingContext = entryContext; + } catch (_) {} + } + } + } catch (_) {} + // --- PATCH END --- + + this._onNavigatingTo(backstackEntry, isBackNavigation); + + const navigationTransition = this._getNavigationTransition(backstackEntry); + if (navigationTransition?.instance) { + const state = SharedTransition.getState(navigationTransition?.instance.id); + SharedTransition.updateState(navigationTransition?.instance.id, { + page: state?.page || this.currentPage, + toPage: this, + }); + } + + this._navigateCore(backstackEntry); +} + @profile performGoBack(navigationContext: NavigationContext) { From bdc3d57e03ecb98372644a8394f327f89b35cb09 Mon Sep 17 00:00:00 2001 From: vardhan30016 Date: Mon, 24 Nov 2025 10:58:54 +0530 Subject: [PATCH 2/2] fix(android-actionbar): apply WindowInsets padding to prevent ActionBar overlaying status bar (closes #10856) --- packages/core/ui/action-bar/index.android.ts | 40 +++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/core/ui/action-bar/index.android.ts b/packages/core/ui/action-bar/index.android.ts index 126e443572..fd0366af3c 100644 --- a/packages/core/ui/action-bar/index.android.ts +++ b/packages/core/ui/action-bar/index.android.ts @@ -164,8 +164,44 @@ export class ActionBar extends ActionBarBase { } public createNativeView() { - return new androidx.appcompat.widget.Toolbar(this._context); - } + const toolbar = new androidx.appcompat.widget.Toolbar(this._context); + + // --- PATCH: Fix ActionBar overlaying status bar on Android 16+ --- + try { + const apiLevel = android.os.Build.VERSION.SDK_INT; + if (apiLevel >= 29) { + toolbar.setFitsSystemWindows(true); + + toolbar.setOnApplyWindowInsetsListener( + new android.view.View.OnApplyWindowInsetsListener({ + onApplyWindowInsets(view, insets) { + try { + const topInset = (typeof insets.getSystemWindowInsetTop === "function") + ? insets.getSystemWindowInsetTop() + : (insets.getInsets ? insets.getInsets(android.view.WindowInsets.Type.statusBars()).top : 0); + + view.setPadding( + view.getPaddingLeft(), + topInset, + view.getPaddingRight(), + view.getPaddingBottom() + ); + } catch (e) { + console.log("ActionBar inset patch error:", e); + } + return insets; + } + }) + ); + } + } catch (err) { + console.log("Failed to apply ActionBar status bar fix:", err); + } + // --- END PATCH --- + + return toolbar; +} + public initNativeView(): void { super.initNativeView();