Skip to content

[Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamically#33687

Merged
jfversluis merged 9 commits intodotnet:inflight/currentfrom
HarishwaranVijayakumar:fix-19256
Feb 27, 2026
Merged

[Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamically#33687
jfversluis merged 9 commits intodotnet:inflight/currentfrom
HarishwaranVijayakumar:fix-19256

Conversation

@HarishwaranVijayakumar
Copy link
Copy Markdown
Contributor

@HarishwaranVijayakumar HarishwaranVijayakumar commented Jan 23, 2026

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Issue Details

  • Android DatePicker minimum/maximum date constraints don't update properly when changed dynamically. In a dependent DatePicker scenario (LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails to respect the updated minimum date constraint.

Behavior:

  • First time setting MinimumDate/MaximumDate → Works correctly
  • Second time (or subsequent times) setting MinimumDate/MaximumDate → Fails to update

Root Cause of the issue

  • Android's DatePicker internally caches MinDate/MaxDate values and ignores subsequent setMinDate()/setMaxDate() calls unless the values are first reset.

Description of Change

Android DatePicker Constraint Fixes:

  • Added logic in DatePickerHandler.Android.cs to force dialog recreation when MinimumDate or MaximumDate are updated, ensuring Android's internal cache is invalidated and constraints are reapplied.
  • Updated ShowPickerDialog in DatePickerHandler.Android.cs to always apply minimum and maximum date constraints to newly created dialogs.
  • Introduced a ResetDialog method to safely dismiss and recreate the dialog when constraint properties change.

UI Tests for Regression Verification:

  • Added Issue19256 UI test page and NUnit test to verify dynamic updates to minimum date constraints in dependent DatePickers.
  • Added Issue33583 UI test page and NUnit test to verify updates to maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly honor updated minimum and maximum date values, with comprehensive tests confirming the fix.

Issues Fixed

Fixes #19256
Fixes #33583

Output

Before After
Before_fix.mov
After_fix.mov

@dotnet-policy-service dotnet-policy-service bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Jan 23, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review January 27, 2026 11:23
Copilot AI review requested due to automatic review settings January 27, 2026 11:23
@sheiksyedm
Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests 

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

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

This PR fixes a long-standing Android platform bug where DatePicker minimum and maximum date constraints fail to update dynamically after the initial setting. The issue manifests in dependent DatePicker scenarios where changing one picker's date should update another picker's minimum/maximum constraint.

Changes:

  • Implements the established Android workaround by resetting min/max values before setting new constraints
  • Adds ShowEvent handler to ensure constraints are re-applied after Android's internal dialog initialization
  • Includes comprehensive UI tests with screenshot verification to validate the fix

Reviewed changes

Copilot reviewed 5 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/Core/src/Platform/Android/DatePickerExtensions.cs Added reset logic (MinDate=0, MaxDate=long.MaxValue) before setting new constraint values to force Android to invalidate cached values
src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs Added ShowEvent handler to re-apply min/max dates after dialog initialization, working around Android's dialog reuse caching issue
src/Controls/tests/TestCases.HostApp/Issues/Issue19256.cs Created UI test page with two dependent DatePickers and buttons to reproduce the issue scenario
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue19256.cs Created NUnit test with two-screenshot verification approach to validate dynamic MinimumDate updates
src/Controls/tests/TestCases.Android.Tests/snapshots/android/DatePickerMinimumDateShouldUpdateDynamically_*.png Reference screenshots for automated visual verification (2 files)
.github/agent-pr-session/pr-19256.md Agent session documentation tracking the fix development process

@PureWeen
Copy link
Copy Markdown
Member

/rebase

@PureWeen
Copy link
Copy Markdown
Member

/azp run maui-pr-uitests, maui-pr-devicetests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 2 pipeline(s).

@PureWeen
Copy link
Copy Markdown
Member

PureWeen commented Feb 2, 2026

/rebase

@rmarinho rmarinho added the s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) label Feb 18, 2026
@kubaflo kubaflo added s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates and removed s/agent-fix-lose Author adopted the agent's fix and it turned out to be bad labels Feb 20, 2026
Copy link
Copy Markdown
Member

@jfversluis jfversluis left a comment

Choose a reason for hiding this comment

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

Code Review — PR #33687

Thanks for this fix! The dialog recreation approach is a clean and correct solution to the Android DatePicker caching bug. I verified that PureWeen's earlier concerns (ShowEvent handler leak and disjoint date range crash) are both fully resolved by the new approach — the ShowEvent is no longer used, and fresh dialog creation means both constraints are applied atomically with no ordering conflict.

The core fix logic is solid. There are a few items to address before this can merge:


🔴 Blocking: Missing snapshots for Issue33583 on Windows/MacCatalyst

Issue33583.cs test compiles for #if !IOS which includes Android, Windows, and MacCatalyst. However, only the Android snapshot is committed:

✅ TestCases.Android.Tests/snapshots/android/VerifyMaximumDateInRuntime.png
❌ No Windows snapshot
❌ No MacCatalyst snapshot

VerifyScreenshot() will fail on Windows and MacCatalyst CI because there are no reference images.

Recommended fix — since the bug and fix are Android-only, the simplest solution is to restrict the test:

// Change this:
#if !IOS

// To this:
#if ANDROID

Alternatively, run the test on Windows and MacCatalyst and commit those snapshots.


🟡 PR description is outdated

The description states:

"In DatePickerExtensions.cs, both UpdateMinimumDate and UpdateMaximumDate methods now reset the underlying Android values (MinDate to 0, MaxDate to long.MaxValue) before setting the new constraint"

But DatePickerExtensions.cs has zero changes in this PR. This describes the earlier "reset-before-set" approach that was replaced with dialog recreation. Please update the description to match the current implementation.


🟡 Agent session file describes abandoned approach

.github/agent-pr-session/pr-19256.md still documents the old ShowEvent-based approach and even lists "Recreate dialog each time" as an approach to ❌ Avoid — which contradicts the current (correct) implementation. Consider removing this file from the PR or updating it.


ℹ️ Pre-existing bug (not introduced by this PR)

Found a pre-existing copy-paste bug in DatePickerExtensions.cs line 56:

public static void UpdateMaximumDate(this MauiDatePicker platformDatePicker, IDatePicker datePicker)
{
    platformDatePicker.UpdateMinimumDate(datePicker, null); // ← Should be UpdateMaximumDate!
}

This doesn't affect your fix (the handler always passes the dialog parameter), but worth noting for a separate PR.


Summary

Aspect Status
Core fix (dialog recreation) ✅ Correct and well-designed
PureWeen's ShowEvent leak concern ✅ Resolved (ShowEvent removed)
PureWeen's disjoint range concern ✅ Resolved (fresh dialog, no conflicts)
Issue19256 test (Android-only) ✅ Good
Issue33583 test (cross-platform) 🔴 Missing Windows/Mac snapshots — change to #if ANDROID
PR description 🟡 Outdated — describes old approach
Agent session file 🟡 Outdated — describes abandoned approach

@jfversluis jfversluis added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/pr-needs-author-input PR needs an update from the author labels Feb 24, 2026
@sheiksyedm
Copy link
Copy Markdown
Contributor

sheiksyedm commented Feb 26, 2026

/azp run maui-pr-uitests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@HarishwaranVijayakumar
Copy link
Copy Markdown
Contributor Author

Code Review — PR #33687

Thanks for this fix! The dialog recreation approach is a clean and correct solution to the Android DatePicker caching bug. I verified that PureWeen's earlier concerns (ShowEvent handler leak and disjoint date range crash) are both fully resolved by the new approach — the ShowEvent is no longer used, and fresh dialog creation means both constraints are applied atomically with no ordering conflict.

The core fix logic is solid. There are a few items to address before this can merge:

🔴 Blocking: Missing snapshots for Issue33583 on Windows/MacCatalyst

Issue33583.cs test compiles for #if !IOS which includes Android, Windows, and MacCatalyst. However, only the Android snapshot is committed:

✅ TestCases.Android.Tests/snapshots/android/VerifyMaximumDateInRuntime.png
❌ No Windows snapshot
❌ No MacCatalyst snapshot

VerifyScreenshot() will fail on Windows and MacCatalyst CI because there are no reference images.

Recommended fix — since the bug and fix are Android-only, the simplest solution is to restrict the test:

// Change this:
#if !IOS

// To this:
#if ANDROID

Alternatively, run the test on Windows and MacCatalyst and commit those snapshots.

🟡 PR description is outdated

The description states:

"In DatePickerExtensions.cs, both UpdateMinimumDate and UpdateMaximumDate methods now reset the underlying Android values (MinDate to 0, MaxDate to long.MaxValue) before setting the new constraint"

But DatePickerExtensions.cs has zero changes in this PR. This describes the earlier "reset-before-set" approach that was replaced with dialog recreation. Please update the description to match the current implementation.

🟡 Agent session file describes abandoned approach

.github/agent-pr-session/pr-19256.md still documents the old ShowEvent-based approach and even lists "Recreate dialog each time" as an approach to ❌ Avoid — which contradicts the current (correct) implementation. Consider removing this file from the PR or updating it.

ℹ️ Pre-existing bug (not introduced by this PR)

Found a pre-existing copy-paste bug in DatePickerExtensions.cs line 56:

public static void UpdateMaximumDate(this MauiDatePicker platformDatePicker, IDatePicker datePicker)
{
    platformDatePicker.UpdateMinimumDate(datePicker, null); // ← Should be UpdateMaximumDate!
}

This doesn't affect your fix (the handler always passes the dialog parameter), but worth noting for a separate PR.

Summary

Aspect Status
Core fix (dialog recreation) ✅ Correct and well-designed
PureWeen's ShowEvent leak concern ✅ Resolved (ShowEvent removed)
PureWeen's disjoint range concern ✅ Resolved (fresh dialog, no conflicts)
Issue19256 test (Android-only) ✅ Good
Issue33583 test (cross-platform) 🔴 Missing Windows/Mac snapshots — change to #if ANDROID
PR description 🟡 Outdated — describes old approach
Agent session file 🟡 Outdated — describes abandoned approach

@jfversluis, Updated the PR description, added the base snapshots, and removed the session file.

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@jfversluis jfversluis changed the base branch from main to inflight/current February 27, 2026 13:28
@jfversluis jfversluis added this to the .NET 10 SR5 milestone Feb 27, 2026
@jfversluis jfversluis merged commit fb85a30 into dotnet:inflight/current Feb 27, 2026
146 of 150 checks passed
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
…ally (#33687)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details

- Android DatePicker minimum/maximum date constraints don't update
properly when changed dynamically. In a dependent DatePicker scenario
(LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails
to respect the updated minimum date constraint.

**Behavior:**
- **First time** setting `MinimumDate`/`MaximumDate` → Works correctly
- **Second time (or subsequent times)** setting
`MinimumDate`/`MaximumDate` → Fails to update

### Root Cause of the issue

- Android's DatePicker internally caches MinDate/MaxDate values and
ignores subsequent setMinDate()/setMaxDate() calls unless the values are
first reset.

### Description of Change

**Android DatePicker Constraint Fixes:**

* Added logic in `DatePickerHandler.Android.cs` to force dialog
recreation when `MinimumDate` or `MaximumDate` are updated, ensuring
Android's internal cache is invalidated and constraints are reapplied.
* Updated `ShowPickerDialog` in `DatePickerHandler.Android.cs` to always
apply minimum and maximum date constraints to newly created dialogs.
* Introduced a `ResetDialog` method to safely dismiss and recreate the
dialog when constraint properties change.

**UI Tests for Regression Verification:**

* Added `Issue19256` UI test page and NUnit test to verify dynamic
updates to minimum date constraints in dependent DatePickers.
* Added `Issue33583` UI test page and NUnit test to verify updates to
maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly
honor updated minimum and maximum date values, with comprehensive tests
confirming the fix.
### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #19256 
Fixes #33583

### Output
| Before | After |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/84c845ed-6825-4737-90c7-f3edd79adf6e">
| <video
src="https://github.com/user-attachments/assets/93c023f5-931d-477b-a95c-852f1c9f0751">
|




<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
…ally (#33687)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details

- Android DatePicker minimum/maximum date constraints don't update
properly when changed dynamically. In a dependent DatePicker scenario
(LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails
to respect the updated minimum date constraint.

**Behavior:**
- **First time** setting `MinimumDate`/`MaximumDate` → Works correctly
- **Second time (or subsequent times)** setting
`MinimumDate`/`MaximumDate` → Fails to update

### Root Cause of the issue

- Android's DatePicker internally caches MinDate/MaxDate values and
ignores subsequent setMinDate()/setMaxDate() calls unless the values are
first reset.

### Description of Change

**Android DatePicker Constraint Fixes:**

* Added logic in `DatePickerHandler.Android.cs` to force dialog
recreation when `MinimumDate` or `MaximumDate` are updated, ensuring
Android's internal cache is invalidated and constraints are reapplied.
* Updated `ShowPickerDialog` in `DatePickerHandler.Android.cs` to always
apply minimum and maximum date constraints to newly created dialogs.
* Introduced a `ResetDialog` method to safely dismiss and recreate the
dialog when constraint properties change.

**UI Tests for Regression Verification:**

* Added `Issue19256` UI test page and NUnit test to verify dynamic
updates to minimum date constraints in dependent DatePickers.
* Added `Issue33583` UI test page and NUnit test to verify updates to
maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly
honor updated minimum and maximum date values, with comprehensive tests
confirming the fix.
### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #19256 
Fixes #33583

### Output
| Before | After |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/84c845ed-6825-4737-90c7-f3edd79adf6e">
| <video
src="https://github.com/user-attachments/assets/93c023f5-931d-477b-a95c-852f1c9f0751">
|




<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
github-actions bot pushed a commit that referenced this pull request Mar 3, 2026
…ally (#33687)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details

- Android DatePicker minimum/maximum date constraints don't update
properly when changed dynamically. In a dependent DatePicker scenario
(LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails
to respect the updated minimum date constraint.

**Behavior:**
- **First time** setting `MinimumDate`/`MaximumDate` → Works correctly
- **Second time (or subsequent times)** setting
`MinimumDate`/`MaximumDate` → Fails to update

### Root Cause of the issue

- Android's DatePicker internally caches MinDate/MaxDate values and
ignores subsequent setMinDate()/setMaxDate() calls unless the values are
first reset.

### Description of Change

**Android DatePicker Constraint Fixes:**

* Added logic in `DatePickerHandler.Android.cs` to force dialog
recreation when `MinimumDate` or `MaximumDate` are updated, ensuring
Android's internal cache is invalidated and constraints are reapplied.
* Updated `ShowPickerDialog` in `DatePickerHandler.Android.cs` to always
apply minimum and maximum date constraints to newly created dialogs.
* Introduced a `ResetDialog` method to safely dismiss and recreate the
dialog when constraint properties change.

**UI Tests for Regression Verification:**

* Added `Issue19256` UI test page and NUnit test to verify dynamic
updates to minimum date constraints in dependent DatePickers.
* Added `Issue33583` UI test page and NUnit test to verify updates to
maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly
honor updated minimum and maximum date values, with comprehensive tests
confirming the fix.
### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #19256 
Fixes #33583

### Output
| Before | After |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/84c845ed-6825-4737-90c7-f3edd79adf6e">
| <video
src="https://github.com/user-attachments/assets/93c023f5-931d-477b-a95c-852f1c9f0751">
|




<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
HarishKumarSF4517 pushed a commit to HarishKumarSF4517/maui that referenced this pull request Mar 5, 2026
…ally (dotnet#33687)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details

- Android DatePicker minimum/maximum date constraints don't update
properly when changed dynamically. In a dependent DatePicker scenario
(LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails
to respect the updated minimum date constraint.

**Behavior:**
- **First time** setting `MinimumDate`/`MaximumDate` → Works correctly
- **Second time (or subsequent times)** setting
`MinimumDate`/`MaximumDate` → Fails to update

### Root Cause of the issue

- Android's DatePicker internally caches MinDate/MaxDate values and
ignores subsequent setMinDate()/setMaxDate() calls unless the values are
first reset.

### Description of Change

**Android DatePicker Constraint Fixes:**

* Added logic in `DatePickerHandler.Android.cs` to force dialog
recreation when `MinimumDate` or `MaximumDate` are updated, ensuring
Android's internal cache is invalidated and constraints are reapplied.
* Updated `ShowPickerDialog` in `DatePickerHandler.Android.cs` to always
apply minimum and maximum date constraints to newly created dialogs.
* Introduced a `ResetDialog` method to safely dismiss and recreate the
dialog when constraint properties change.

**UI Tests for Regression Verification:**

* Added `Issue19256` UI test page and NUnit test to verify dynamic
updates to minimum date constraints in dependent DatePickers.
* Added `Issue33583` UI test page and NUnit test to verify updates to
maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly
honor updated minimum and maximum date values, with comprehensive tests
confirming the fix.
### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes dotnet#19256 
Fixes dotnet#33583

### Output
| Before | After |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/84c845ed-6825-4737-90c7-f3edd79adf6e">
| <video
src="https://github.com/user-attachments/assets/93c023f5-931d-477b-a95c-852f1c9f0751">
|




<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
github-actions bot pushed a commit that referenced this pull request Mar 6, 2026
…ally (#33687)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details

- Android DatePicker minimum/maximum date constraints don't update
properly when changed dynamically. In a dependent DatePicker scenario
(LEFT picker's date sets RIGHT picker's minimum), the RIGHT picker fails
to respect the updated minimum date constraint.

**Behavior:**
- **First time** setting `MinimumDate`/`MaximumDate` → Works correctly
- **Second time (or subsequent times)** setting
`MinimumDate`/`MaximumDate` → Fails to update

### Root Cause of the issue

- Android's DatePicker internally caches MinDate/MaxDate values and
ignores subsequent setMinDate()/setMaxDate() calls unless the values are
first reset.

### Description of Change

**Android DatePicker Constraint Fixes:**

* Added logic in `DatePickerHandler.Android.cs` to force dialog
recreation when `MinimumDate` or `MaximumDate` are updated, ensuring
Android's internal cache is invalidated and constraints are reapplied.
* Updated `ShowPickerDialog` in `DatePickerHandler.Android.cs` to always
apply minimum and maximum date constraints to newly created dialogs.
* Introduced a `ResetDialog` method to safely dismiss and recreate the
dialog when constraint properties change.

**UI Tests for Regression Verification:**

* Added `Issue19256` UI test page and NUnit test to verify dynamic
updates to minimum date constraints in dependent DatePickers.
* Added `Issue33583` UI test page and NUnit test to verify updates to
maximum date constraints after dialog is shown.

These changes ensure that Android DatePicker controls now correctly
honor updated minimum and maximum date values, with comprehensive tests
confirming the fix.
### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #19256 
Fixes #33583

### Output
| Before | After |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/84c845ed-6825-4737-90c7-f3edd79adf6e">
| <video
src="https://github.com/user-attachments/assets/93c023f5-931d-477b-a95c-852f1c9f0751">
|




<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
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
@kubaflo kubaflo added s/agent-review-incomplete AI agent could not complete all phases (blocker, timeout, error) and removed s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-changes-requested AI agent recommends changes - found a better alternative or issues labels Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-datetimepicker DatePicker, TimePicker community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-review-incomplete AI agent could not complete all phases (blocker, timeout, error) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) s/pr-needs-author-input PR needs an update from the author

Projects

None yet

8 participants