Skip to content

Fix ContentPage memory leak on Android when using NavigationPage modally (fixes #33918)#34117

Merged
jfversluis merged 5 commits intodotnet:inflight/currentfrom
brunck:issue-33918
Feb 24, 2026
Merged

Fix ContentPage memory leak on Android when using NavigationPage modally (fixes #33918)#34117
jfversluis merged 5 commits intodotnet:inflight/currentfrom
brunck:issue-33918

Conversation

@brunck
Copy link
Copy Markdown
Contributor

@brunck brunck commented Feb 18, 2026

Description of Change

On Android, navigating modally with a NavigationPage (including as children of a TabbedPage) caused a memory leak. After the modal was dismissed, StackNavigationManager held onto three references that prevented the pages from being garbage collected:

  • _currentPage — the last active page
  • _fragmentContainerView — the Android fragment container
  • _fragmentManager — the Android fragment manager

These were never cleared in Disconnect(), so even after the modal stack was fully dismissed and the handler was disconnected, the managed objects remained reachable.

NavigationPage.cs — Fix

Removed a duplicate RemoveFromInnerChildren(currentPage) call that was invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d, and was flagged by Copilot in #27888 but it appears no action was taken on that. Ultimately, this line ended up duplicated for unknown reasons.

MemoryTests.cs — Re-enable NavigationPage leak test on Android

PagesDoNotLeak excluded NavigationPage on Android under #if !ANDROID (referencing issue #27411) because NavigationPage leaked there. The exclusion has been removed, as the test passes.

NavigationPageTests.Android.cs — New device test

Added StackNavigationManagerClearsReferencesOnDisconnect, which:

  1. Pushes a TabbedPage with two NavigationPage children modally
  2. Switches tabs to ensure both NavigationPage handlers are activated
  3. Pops the modal

Testing

  • StackNavigationManagerClearsReferencesOnDisconnect — new device test; fails without fix, passes with fix (verified on Pixel 8a, Android 15)
  • PagesDoNotLeak(NavigationPage) — re-enabled on Android; passes with fix
  • PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents — existing test; still passes

Issues Fixed

Fixes #33918

Copilot AI review requested due to automatic review settings February 18, 2026 18:07
@dotnet-policy-service dotnet-policy-service bot added the community ✨ Community Contribution label Feb 18, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes an Android memory leak when modal navigation involves NavigationPage (including inside TabbedPage) by ensuring StackNavigationManager releases references on disconnect, and re-enables/adds regression coverage in device memory tests.

Changes:

  • Clear retained references (_currentPage, fragment container/manager, navigation stack) in StackNavigationManager.Disconnect() to allow GC after modal dismissal.
  • Re-enable PagesDoNotLeak(NavigationPage) on Android in memory device tests.
  • Add an Android device test asserting StackNavigationManager clears retained references after popping a modal tabbed flow; remove a duplicate RemoveFromInnerChildren call in NavigationPage pop logic.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
src/Core/src/Platform/Android/Navigation/StackNavigationManager.cs Clears internal fields/stack on Disconnect() to break reference chains and prevent page retention.
src/Controls/tests/DeviceTests/Memory/MemoryTests.cs Re-enables NavigationPage coverage in PagesDoNotLeak on Android.
src/Controls/tests/DeviceTests/Elements/NavigationPage/NavigationPageTests.Android.cs Adds Android regression test validating references are cleared after modal tabbed navigation is popped.
src/Controls/src/Core/NavigationPage/NavigationPage.cs Removes a duplicated RemoveFromInnerChildren(currentPage) during pop navigation.

brunck and others added 2 commits February 18, 2026 13:17
…ionPageTests.Android.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

await baseNavPage.Navigation.PopModalAsync(animated: false);

var flags = BindingFlags.NonPublic | BindingFlags.Instance;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of using reflection, why not write a test on MemoryTests and validate that GC will collect the NavigationPage?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That didn't work. Using reflection is a pattern used by other tests as well.

@jfversluis jfversluis self-assigned this Feb 23, 2026
@jfversluis jfversluis added s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) s/agent-approved AI agent recommends approval - PR fix is correct and optimal labels Feb 24, 2026
@jfversluis jfversluis changed the base branch from main to inflight/current February 24, 2026 08:15
@jfversluis jfversluis added this to the .NET 10 SR5 milestone Feb 24, 2026
@jfversluis jfversluis merged commit 70760ec into dotnet:inflight/current Feb 24, 2026
22 of 29 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 24, 2026
…lly (fixes #33918) (#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in #27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue #27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes #33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@brunck brunck deleted the issue-33918 branch February 24, 2026 21:05
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
…lly (fixes #33918) (#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in #27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue #27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes #33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
…lly (fixes #33918) (#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in #27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue #27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes #33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
github-actions bot pushed a commit that referenced this pull request Mar 3, 2026
…lly (fixes #33918) (#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in #27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue #27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes #33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
HarishKumarSF4517 pushed a commit to HarishKumarSF4517/maui that referenced this pull request Mar 5, 2026
…lly (fixes dotnet#33918) (dotnet#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in dotnet#27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue dotnet#27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes dotnet#33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
github-actions bot pushed a commit that referenced this pull request Mar 6, 2026
…lly (fixes #33918) (#34117)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Description of Change

On Android, navigating modally with a `NavigationPage` (including as
children of a `TabbedPage`) caused a memory leak. After the modal was
dismissed, `StackNavigationManager` held onto three references that
prevented the pages from being garbage collected:

- `_currentPage` — the last active page
- `_fragmentContainerView` — the Android fragment container
- `_fragmentManager` — the Android fragment manager

These were never cleared in `Disconnect()`, so even after the modal
stack was fully dismissed and the handler was disconnected, the managed
objects remained reachable.

### `NavigationPage.cs` — Fix

Removed a duplicate `RemoveFromInnerChildren(currentPage)` call that was
invoked twice in succession during pop navigation.
This seemed to be accidentally added in June 2025 by commit 850f52d,
and was flagged by Copilot in #27888 but it appears no action was taken
on that. Ultimately, this line ended up duplicated for unknown reasons.

### `MemoryTests.cs` — Re-enable `NavigationPage` leak test on Android

`PagesDoNotLeak` excluded `NavigationPage` on Android under `#if
!ANDROID` (referencing issue #27411) because `NavigationPage` leaked
there. The exclusion has been removed, as the test passes.

### `NavigationPageTests.Android.cs` — New device test

Added `StackNavigationManagerClearsReferencesOnDisconnect`, which:

1. Pushes a `TabbedPage` with two `NavigationPage` children modally
2. Switches tabs to ensure both `NavigationPage` handlers are activated
3. Pops the modal

## Testing

- [x] `StackNavigationManagerClearsReferencesOnDisconnect` — new device
test; fails without fix, passes with fix (verified on Pixel 8a, Android
15)
- [x] `PagesDoNotLeak(NavigationPage)` — re-enabled on Android; passes
with fix
- [x] `PushingAndPoppingDoesntFireBackButtonVisibleToolbarEvents` —
existing test; still passes

### Issues Fixed

Fixes #33918

---------

Co-authored-by: Brian Runck <brunck@intermatic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Mar 11, 2026
## What's Coming

.NET MAUI inflight/candidate introduces significant improvements across
all platforms with focus on quality, performance, and developer
experience. This release includes 46 commits with various improvements,
bug fixes, and enhancements.


## Button
- [Android] Implemented material3 support for Button by @Dhivya-SF4094
in #33173
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Button](#33172)
  </details>

## CollectionView
- [Android] Fix RemainingItemsThresholdReachedCommand not firing when
CollectionView has Header and Footer both defined by @SuthiYuvaraj in
#29618
  <details>
  <summary>🔧 Fixes</summary>

- [Android : RemainingItemsThresholdReachedCommand not firing when
CollectionVew has Header and Footer both
defined](#29588)
  </details>

- [iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts
by @Shalini-Ashokan in #33853
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/MacCatalyst] CollectionView ScrollTo does not work with
horizontal Layout](#33852)
  </details>

- [iOS & Mac] Fixed IndicatorView Size doesnt update dynamically by
@SubhikshaSf4851 in #31129
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Catalyst] IndicatorView.IndicatorSize does not update
dynamically at runtime](#31064)
  </details>

- [Android] Fix for CollectionView Scrolled event is triggered on the
initial app load. by @BagavathiPerumal in
#33558
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CollectionView Scrolled event is triggered on the initial
app load.](#33333)
  </details>

- [iOS, Android] Fix for CollectionView IsEnabled=false allows touch
interactions by @praveenkumarkarunanithi in
#31403
  <details>
  <summary>🔧 Fixes</summary>

- [More issues with CollectionView IsEnabled, InputTransparent, Opacity
via Styles and code behind](#19771)
  </details>

- [iOS] Fix VerticalOffset Update When Modifying
CollectionView.ItemsSource While Scrolled by @devanathan-vaithiyanathan
in #34153
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS]VerticalOffset Not Reset to Zero After Clearing ItemSource in
CollectionView](#26798)
  </details>

## DateTimePicker
- [Android] Fix DatePicker MinimumDate/MaximumDate not updating
dynamically by @HarishwaranVijayakumar in
#33687
  <details>
  <summary>🔧 Fixes</summary>

- [[regression/8.0.3] [Android] DatePicker control minimum date
issue](#19256)
- [[Android] DatePicker does not update MinimumDate / MaximumDate in the
Popup when set in the viewmodel after first
opening](#33583)
  </details>

## Drawing
- Android drawable perf by @albyrock87 in
#31567

## Editor
- [Android] Implemented material3 support for Editor by
@SyedAbdulAzeemSF4852 in #33478
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
Editor](#33476)
  </details>

## Entry
- [iOS, Mac] Fix for CursorPosition not updating when typing into Entry
control by @SyedAbdulAzeemSF4852 in
#30505
  <details>
  <summary>🔧 Fixes</summary>

- [Entry control CursorPosition does not update on TextChanged event
[iOS Maui 8.0.7] ](#20911)
- [CursorPosition not calculated correctly on behaviors events for iOS
devices](#32483)
  </details>

## Flyoutpage
- [Android, Windows] Fix for FlyoutPage toolbar button not updating on
orientation change by @praveenkumarkarunanithi in
#31962
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout page in Android does not show flyout button (burger)
consistently](#24468)
  </details>

- Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on
iOS by @praveenkumarkarunanithi in
#29265
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] CollectionView not rendering first item correctly in
FlyoutPage.Flyout](#29170)
  </details>

## Image
- [Android] Fix excessive memory usage for stream and resource-based
image loading by @Shalini-Ashokan in
#33590
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Unexpected high Bitmap.ByteCount when loading image via
ImageSource.FromResource() or ImageSource.FromStream() in .NET
MAUI](#33239)
  </details>

- [Android] Fix for Resize method returns an image that has already been
disposed by @SyedAbdulAzeemSF4852 in
#29964
  <details>
  <summary>🔧 Fixes</summary>

- [In GraphicsView, the Resize method returns an image that has already
been disposed](#29961)
- [IIMage.Resize bugged
behaviour](#31103)
  </details>

## Label
- Fixed Label Span font property inheritance when applied via Style by
@SubhikshaSf4851 in #34110
  <details>
  <summary>🔧 Fixes</summary>

- [`Span` does not inherit text styling from `Label` if that styling is
applied using `Style` ](#21326)
  </details>

- [Android] Implemented material3 support for Label by
@SyedAbdulAzeemSF4852 in #33599
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
Label](#33598)
  </details>

## Map
- [Android] Fix Circle Stroke color is incorrectly updated as Fill
color. by @NirmalKumarYuvaraj in
#33643
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Circle Stroke color is incorrectly updated as Fill
color.](#33642)
  </details>

## Mediapicker
- [iOS] Fix: invoke MediaPicker completion handler after
DismissViewController by @yuriikyry4enko in
#34250
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Media Picker UIImagePickerController closing
issue](#21996)
  </details>

## Navigation
- Fix ContentPage memory leak on Android when using NavigationPage
modally (fixes #33918) by @brunck in
#34117
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage)
is retained after
PopModalAsync()](#33918)
  </details>

## Picker
- [Android] Implement material3 support for TimePicker by
@HarishwaranVijayakumar in #33646
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
TimePicker](#33645)
  </details>

- [Android] Implemented Material3 support for Picker by
@SyedAbdulAzeemSF4852 in #33668
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Picker](#33665)
  </details>

## RadioButton
- [Android] Implemented material3 support for RadioButton by
@SyedAbdulAzeemSF4852 in #33468
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
RadioButton](#33467)
  </details>

## Setup
- Clarify MA003 error message by @jeremy-visionaid in
#34067
  <details>
  <summary>🔧 Fixes</summary>

- [MA003 false positive with
9.0.21](#26599)
  </details>

## Shell
- [Android] Fix TabBar FlowDirection not updating dynamically by
@SubhikshaSf4851 in #33091
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, iOS] FlowDirection RTL is not updated dynamically on Shell
TabBar](#32993)
  </details>

- [Android] Fix page not disposed on Shell replace navigation by
@Vignesh-SF3580 in #33426
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] [Shell] replace navigation leaks current
page](#25134)
  </details>

- [Android] Fixed Shell flyout does not disable scrolling when
FlyoutVerticalScrollMode is set to Disabled by @NanthiniMahalingam in
#32734
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell.FlyoutVerticalScrollMode="Disabled" does not disable
scrolling](#32477)
  </details>

## Single Project
- Fix: Throw a clear error when an SVG lacks dimensions instead of a
NullReferenceException by @Shalini-Ashokan in
#33194
  <details>
  <summary>🔧 Fixes</summary>

- [MAUI Fails To Convert Valid SVG Files Into PNG Files (Object
reference not set to an instance of an
object)](#32460)
  </details>

## SwipeView
- [iOS] Fix SwipeView stays open on iOS after updating content by
@devanathan-vaithiyanathan in #31248
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] - Swipeview with collectionview
issue](#19541)
  </details>

## TabbedPage
- [Windows] Fixed IsEnabled Property not works on Tabs by
@NirmalKumarYuvaraj in #26728
  <details>
  <summary>🔧 Fixes</summary>

- [ShellContent IsEnabledProperty does not
work](#5161)
- [[Windows] Shell Tab IsEnabled Not
Working](#32996)
  </details>

- [Android] Fix NavigationBar overlapping StatusBar when NavigationBar
visibility changes by @Vignesh-SF3580 in
#33359
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] NavigationBar overlaps with StatusBar when mixing
HasNavigationBar=true/false in TabbedPage on Android 15 (API
35)](#33340)
  </details>

## Templates
- Fix for unable to open task using keyboard navigation on windows
platform by @SuthiYuvaraj in #33647
  <details>
  <summary>🔧 Fixes</summary>

- [Unable to open task using keyboard: A11y_.NET maui_User can get all
the insights of
Dashboard_Keyboard](#30787)
  </details>

## TitleView
- Fix for NavigationPage.TitleView does not expand with host window in
iPadOS 26+ by @SuthiYuvaraj in #33088

## Toolbar
- [iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+
by @Shalini-Ashokan in #34036
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] ToolbarItem color with custom BarTextColor not
working](#33970)
  </details>

- [Android] Fix for ToolbarItem retaining the icon from the previous
page on Android when using NavigationPage. by @BagavathiPerumal in
#32311
  <details>
  <summary>🔧 Fixes</summary>

- [Toolbaritem keeps the icon of the previous page on Android, using
NavigationPage (not shell)](#31727)
  </details>

## WebView
- [Android] Fix WebView in a grid expands beyond it's cell by
@devanathan-vaithiyanathan in #32145
  <details>
  <summary>🔧 Fixes</summary>

- [Android - WebView in a grid expands beyond it's
cell](#32030)
  </details>

## Xaml
- ContentPresenter: Propagate binding context to children with explicit
TemplateBinding by @HarishwaranVijayakumar in
#30880
  <details>
  <summary>🔧 Fixes</summary>

- [Binding context in
ContentPresenter](#23797)
  </details>


<details>
<summary>🔧 Infrastructure (1)</summary>

- [Revert] ContentPresenter: Propagate binding context to children with
explicit TemplateBinding by @Ahamed-Ali in
#34332

</details>

<details>
<summary>🧪 Testing (6)</summary>

- [Testing] Feature Matrix UITest Cases for Shell Flyout Page by
@NafeelaNazhir in #32525
- [Testing] Feature Matrix UITest Cases for Brushes by
@LogishaSelvarajSF4525 in #31833
- [Testing] Feature Matrix UITest Cases for BindableLayout by
@LogishaSelvarajSF4525 in #33108
- [Android] Add UI tests for Material 3 CheckBox by
@HarishwaranVijayakumar in #34126
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Add UI tests for Material 3
CheckBox](#34125)
  </details>
- [Testing] Feature Matrix UITest Cases for Shell Tabbed Page by
@NafeelaNazhir in #33159
- [Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate
- 1 by @TamilarasanSF4853 in #34334

</details>

<details>
<summary>📦 Other (2)</summary>

- Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 by
@PaulAndersonS in #34178
- Fix crash when closing Windows based app when using TitleBar by
@MFinkBK in #34032
  <details>
  <summary>🔧 Fixes</summary>

- [Unhandled exception "Value does not fall within the expected range"
when closing Windows app](#32194)
  </details>

</details>
**Full Changelog**:
main...inflight/candidate
@github-actions github-actions bot locked and limited conversation to collaborators Mar 27, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

community ✨ Community Contribution s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage) is retained after PopModalAsync()

4 participants