Skip to content

[Android] Implemented Material3 support for ProgressBar#33926

Merged
jfversluis merged 8 commits intodotnet:inflight/currentfrom
SyedAbdulAzeemSF4852:material3-progressbar
Mar 5, 2026
Merged

[Android] Implemented Material3 support for ProgressBar#33926
jfversluis merged 8 commits intodotnet:inflight/currentfrom
SyedAbdulAzeemSF4852:material3-progressbar

Conversation

@SyedAbdulAzeemSF4852
Copy link
Copy Markdown
Contributor

Description of Change

  • This pull request updates the handling of ProgressBar controls on Android to support Material3 styling when the feature is enabled. It introduces a new handler, updates the registration logic, and extends color update support for Material3 progress bars.

Android ProgressBar Material3 Support:

  • Added a new internal handler ProgressBarHandler2 that uses LinearProgressIndicator from Material3 for progress bars when Material3 is enabled. (src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs)
  • Updated AddControlsHandlers in AppHostBuilderExtensions.cs to register ProgressBarHandler2 instead of the default handler when Material3 is enabled, preserving the original handler otherwise.

ProgressBar Color Customization:

  • Enhanced ProgressBarExtensions.UpdateProgressColor to delegate color updates to a new method for Material3 progress bars (UpdateLinearProgressIndicatorColor) or fall back to the native color update for standard progress bars.
  • Implemented UpdateLinearProgressIndicatorColor for LinearProgressIndicator, supporting theme default fallback and custom color arrays.
  • Added necessary Material3 imports to ProgressBarExtensions.cs.

Material Design Spec - ProgressBar

Issues Fixed

Fixes #33925

Output

Material2 Material3

@dotnet-policy-service dotnet-policy-service bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Feb 6, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review February 6, 2026 13:12
Copilot AI review requested due to automatic review settings February 6, 2026 13:12
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 pull request implements Material3 support for the ProgressBar control on Android when the UseMaterial3 MSBuild property is enabled. The implementation introduces a new internal handler that uses Google's Material3 LinearProgressIndicator component and extends the color customization support to work with both the standard Android ProgressBar and the Material3 variant.

Changes:

  • Adds ProgressBarHandler2 which creates a Material3 LinearProgressIndicator when Material3 is enabled
  • Updates handler registration to conditionally use ProgressBarHandler2 on Android when Material3 is enabled
  • Enhances color update logic to support both standard ProgressBar and Material3 LinearProgressIndicator

Reviewed changes

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

File Description
src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs New handler that creates LinearProgressIndicator with Material3 theming support
src/Core/src/Platform/Android/ProgressBarExtensions.cs Adds type-based delegation in UpdateProgressColor and implements Material3-specific color updates
src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs Conditionally registers ProgressBarHandler2 for Android when Material3 is enabled

@rmarinho
Copy link
Copy Markdown
Member

rmarinho commented Feb 18, 2026

🤖 AI Summary

📊 Expand Full Review
🔍 Pre-Flight — Context & Validation
📝 Review SessionFixed formatting · 43e59e1

Issue: #33925 - Implement Material3 support for Progressbar
PR: #33926 - [Android] Implemented Material3 support for ProgressBar
Author: SyedAbdulAzeemSF4852 (community contributor, partner/syncfusion)
Platforms Affected: Android only
Labels: platform/android, community ✨, area-controls-progressbar, partner/syncfusion, material3
Files Changed: 3 files (2 implementation, 0 test files)

Issue Summary

When the UseMaterial3 MSBuild property is enabled, the ProgressBar control should conform to Material 3 visual design. The current implementation doesn't use Material3-specific styling (correct colors, visual appearance, theme resources via LinearProgressIndicator).

Files Changed

Fix Files:

  • src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs (+12, -1) — registers ProgressBarHandler2 when Material3 is enabled on Android, falls back to ProgressBarHandler otherwise
  • src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs (+16, new) — new internal handler using LinearProgressIndicator from Material3
  • src/Core/src/Platform/Android/ProgressBarExtensions.cs (+34, -0) — updated UpdateProgressColor to delegate to UpdateLinearProgressIndicatorColor for Material3 progress bars

Test Files: None — no tests were added for this change.

PR Discussion Summary

Automated review comments (copilot-pull-request-reviewer):

File:Line Reviewer Says Status
ProgressBarExtensions.cs:17 Missing space in if( → should be if ( ⚠️ UNRESOLVED (outdated thread)
ProgressBarHandler2.Android.cs:16 Tests in ProgressBarHandlerTests.Android.cs cast platform view to Android.Widget.ProgressBar, but Material3 handler returns LinearProgressIndicator — tests will fail with Material3 enabled ⚠️ UNRESOLVED

No other human reviewer comments.

Edge Cases / Concerns

  • Tests: No tests added; existing ProgressBarHandlerTests.Android.cs uses AProgressBar GetNativeProgressBar() which assumes Android.Widget.ProgressBar — fails with Material3 handler
  • The ProgressBarHandler2 is marked internal with a TODO to make it public in .NET 11
  • Style: minor if( vs if ( formatting issue (unresolved automated review thread)
  • SetIndicatorColor([]) passing empty array to reset to theme default is undocumented behavior

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #33926 New ProgressBarHandler2 using LinearProgressIndicator, registered via #if ANDROID + RuntimeFeature.IsMaterial3Enabled check in AppHostBuilderExtensions, with updated ProgressBarExtensions.UpdateProgressColor dispatching on type ⏳ PENDING (Gate) 3 files (+62/-1) Original PR

🚦 Gate — Test Verification
📝 Review SessionFixed formatting · 43e59e1

Result: ❌ FAILED — No Tests Exist
Platform: android (selected — issue is Android-only)
Mode: Full Verification (attempted)

Gate Status

Tests for issue #33925 do NOT exist.

  • No files matching *33925* found in:
    • src/Controls/tests/TestCases.HostApp/Issues/
    • src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/
  • No device tests in src/Core/tests/DeviceTests/Handlers/ProgressBar/ cover the Material3 path
  • The existing ProgressBarHandlerTests.Android.cs is NOT a test for this issue (no Material3 code path coverage)

Automated Reviewer Note

A Copilot automated reviewer flagged that:

"The existing ProgressBarHandlerTests.Android.cs tests expect the platform view to be of type Android.Widget.ProgressBar. However, when Material3 is enabled, ProgressBarHandler2 will return a LinearProgressIndicator instead. Tests will fail or won't adequately test the Material3 code path."

Recommendation

Tests are missing for this PR. The PR author should add tests before this can be merged. The write-tests-agent can help create appropriate tests.


🔧 Fix — Analysis & Comparison
📝 Review SessionFixed formatting · 43e59e1

Skipped — Gate failed (no tests exist). Try-fix requires Gate to pass first.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #33926 New ProgressBarHandler2 using LinearProgressIndicator, registered conditionally via RuntimeFeature.IsMaterial3Enabled ❌ NOT TESTED (Gate failed) 3 files (+62/-1) Original PR

Exhausted: N/A (Gate did not pass)
Selected Fix: N/A


📋 Report — Final Recommendation
📝 Review SessionFixed formatting · 43e59e1

⚠️ Final Recommendation: REQUEST CHANGES

Summary

PR #33926 implements Material3 support for the Android ProgressBar by introducing a new ProgressBarHandler2 that uses LinearProgressIndicator. The implementation follows established patterns correctly, but no tests were added for the new Material3 code path. Gate failed because no tests exist for issue #33925.


Root Cause (Issue #33925)

When UseMaterial3 is enabled, the ProgressBar handler was still creating an Android.Widget.ProgressBar instead of Google.Android.Material.ProgressIndicator.LinearProgressIndicator. This resulted in incorrect Material3 visual appearance (colors, shape, states) since the legacy widget doesn't use Material3 theme resources.


Gate Result

❌ GATE FAILED — No Tests Exist

  • No UI test files (IssueXXXXX.cs) added to TestCases.HostApp or TestCases.Shared.Tests
  • No device tests added to Core.DeviceTests/Handlers/ProgressBar/
  • Existing ProgressBarHandlerTests.Android.cs does NOT cover the Material3 code path

Fix Quality Assessment

Approach (PR's fix):

  • New internal ProgressBarHandler2 extending ProgressBarHandler, overriding CreatePlatformView() to return LinearProgressIndicator(MauiMaterialContextThemeWrapper.Create(Context))
  • Registered via AppHostBuilderExtensions.AddControlsHandlers() under #if ANDROID + RuntimeFeature.IsMaterial3Enabled runtime check
  • ProgressBarExtensions.UpdateProgressColor dispatches via is LinearProgressIndicator type check, calling UpdateLinearProgressIndicatorColor or falling back to the original path

Pattern consistency: ✅ Follows the established RuntimeFeature.IsMaterial3Enabled + MauiMaterialContextThemeWrapper.Create() pattern (matches CheckBox implementation)


Code Review Findings

🔴 Critical Issues

1. No Tests Added

  • No tests for Material3 ProgressBar behavior (correct LinearProgressIndicator creation, color updates, reset to theme default)
  • The automated reviewer correctly flagged that existing ProgressBarHandlerTests.Android.cs uses AProgressBar GetNativeProgressBar() which casts to Android.Widget.ProgressBar — this will fail or silently skip when ProgressBarHandler2 is active
  • Use write-tests-agent to add appropriate device tests

🟡 Suggestions

2. SetIndicatorColor([]) behavior relies on undocumented API behavior

  • Comment says "passing empty array resets to colorPrimary when length == 0" — this is implementation-specific Material3 behavior that may change. Consider using a null/default check against Material3 API documentation rather than relying on this side-effect.

3. Title should use present imperative tense

  • Current: [Android] Implemented Material3 support for ProgressBar
  • Suggested: [Android] ProgressBar: Add Material3 support using LinearProgressIndicator

4. PR Description missing NOTE block

  • The required NOTE block for artifact testing is absent

✅ Looks Good

  • Handler inheritance from ProgressBarHandler is correct — inherits MapProgress and MapProgressColor mapper correctly
  • MauiMaterialContextThemeWrapper.Create(Context) correctly applies Material3 theming
  • internal visibility with TODO for .NET 11 is appropriate for incremental Material3 rollout
  • #if ANDROID guard in AppHostBuilderExtensions.cs is correct
  • Runtime check using RuntimeFeature.IsMaterial3Enabled is the established pattern
  • Color null check correctly resets to theme default

Title & Description Review

Current Title: [Android] Implemented Material3 support for ProgressBar
Suggested Title: [Android] ProgressBar: Add Material3 support using LinearProgressIndicator

Description Assessment: Good structure with "Description of Change" and "Issues Fixed" sections, includes before/after screenshots. Missing the required NOTE block.

Required addition to top of description:

<!-- 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!

Required Changes Before Merge

  1. Add tests (critical) — Add device tests or UI tests for:
    • ProgressBarHandler2 creates LinearProgressIndicator when Material3 is enabled
    • Color update correctly calls SetIndicatorColor
    • Null color resets to theme default
  2. Add NOTE block to PR description
  3. Optional: Update title to use present imperative tense

📋 Expand PR Finalization Review
Title: ✅ Good

Current: [Android] Implemented Material3 support for ProgressBar

Description: ✅ Good

Description needs updates. See details below.

✨ Suggested PR Description

[!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!

Description of Change

  • This pull request updates the handling of ProgressBar controls on Android to support Material3 styling when the feature is enabled. It introduces a new handler, updates the registration logic, and extends color update support for Material3 progress bars.

Android ProgressBar Material3 Support:

  • Added a new internal handler ProgressBarHandler2 that uses LinearProgressIndicator from Material3 for progress bars when Material3 is enabled. (src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs)
    • ProgressBarHandler2 is currently internal and is planned to be made public in .NET 11 (// TODO: Material3 - make it public in .net 11).
  • Updated AddControlsHandlers in AppHostBuilderExtensions.cs to register ProgressBarHandler2 instead of the default handler when Material3 is enabled on Android, preserving the original ProgressBarHandler otherwise.

ProgressBar Color Customization:

  • Enhanced ProgressBarExtensions.UpdateProgressColor to delegate color updates to a new method for Material3 progress bars (UpdateLinearProgressIndicatorColor) or fall back to the native color update for standard progress bars.
  • Implemented UpdateLinearProgressIndicatorColor for LinearProgressIndicator, supporting theme default fallback (via SetIndicatorColor([])) and custom color arrays.
  • Added necessary Material3 imports to ProgressBarExtensions.cs.

Material Design Spec - ProgressBar

Issues Fixed

Fixes #33925

Output

Material2 Material3
Code Review: ✅ Passed

Code Review Findings — PR #33926

🟡 Suggestions


1. No Tests for the Material3 Code Path

File: src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs (line 16)

Problem: The existing ProgressBarHandlerTests.Android.cs does not cover the Material3 code path. There are no tests that verify:

  • ProgressBarHandler2 creates a LinearProgressIndicator
  • Color updates via UpdateLinearProgressIndicatorColor work correctly (both null/default and custom colors)
  • Progress value is correctly applied when using LinearProgressIndicator

Note: LinearProgressIndicator does extend Android.Widget.ProgressBar (via BaseProgressIndicator), so existing test helpers that cast to AProgressBar will not throw. However, they won't exercise the Material3 color path.

Recommendation: Add device tests that enable Material3, instantiate ProgressBar, and verify the platform view is a LinearProgressIndicator and color updates behave correctly.

This issue was flagged in an open (unresolved) review thread by copilot-pull-request-reviewer.


2. Missing Newline at End of File

File: src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs

Problem: The diff shows \ No newline at end of file — the file is missing the standard trailing newline.

Recommendation: Add a newline after the closing } on the last line of the file.


3. Open Review Thread Not Explicitly Resolved

Thread: Code style — missing space in if( vs if (

Status: The thread is marked as outdated (code was changed), and the current diff shows if (platformProgressBar is LinearProgressIndicator materialProgressBar) with a proper space. However, the thread is not explicitly marked as resolved on GitHub.

Recommendation: Author should resolve the thread to confirm the fix was applied intentionally.


✅ Looks Good

  • Handler pattern: ProgressBarHandler2 correctly follows the established Material3 handler pattern in the codebase — subclasses the standard handler, overrides CreatePlatformView(), and uses MauiMaterialContextThemeWrapper.Create(Context) for proper Material3 theming.
  • Registration logic: The conditional handler registration in AppHostBuilderExtensions.cs is correctly scoped inside #if ANDROID, ensuring no impact on other platforms.
  • Color null-handling: UpdateLinearProgressIndicatorColor correctly handles null color by calling SetIndicatorColor([]) (empty array), which tells Material3 to resolve to the theme's colorPrimary. This is the correct pattern per the Material3 API.
  • No API surface changes: ProgressBarHandler2 is internal, so there are no public API changes requiring PublicAPI.Unshipped.txt updates.
  • Non-breaking: On non-Android platforms and when Material3 is disabled, the original ProgressBarHandler is used, preserving existing behavior.
  • Covariant return type: ProgressBarHandler2.CreatePlatformView() returns LinearProgressIndicator, which is a subtype of Android.Widget.ProgressBar (via BaseProgressIndicator<T> : ProgressBar), so the override is type-safe.

@rmarinho rmarinho added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-gate-failed AI could not verify tests catch the bug s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Feb 18, 2026
@SyedAbdulAzeemSF4852
Copy link
Copy Markdown
Contributor Author

Added UI tests and addressed all valid concerns.

@kubaflo kubaflo removed s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-gate-failed AI could not verify tests catch the bug labels Feb 25, 2026
@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
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.

Multi-Model Code Review (Sonnet 4.5 / GPT 5.1)


🔴 Type Incompatibility — LinearProgressIndicator vs Android.Widget.ProgressBar

Severity: Critical | Found by: GPT 5.1

ProgressBarHandler is ViewHandler<IProgress, AndroidProgressBar> where AndroidProgressBar = Android.Widget.ProgressBar. ProgressBarHandler2 subclasses it and overrides CreatePlatformView() to return LinearProgressIndicator.

Problem: LinearProgressIndicator derives from BaseProgressIndicatorandroid.view.View. It does NOT derive from Android.Widget.ProgressBar. This means:

  1. The override return type is not covariant with the base
  2. ViewHandler<IProgress, AndroidProgressBar> expects an Android.Widget.ProgressBar as PlatformView
  3. The is LinearProgressIndicator check in UpdateProgressColor extension is unreachable since the platform view type is AndroidProgressBar

Fix: Either:

  • Change ProgressBarHandler2 to be a standalone ViewHandler<IProgress, LinearProgressIndicator> (not subclassing ProgressBarHandler), OR
  • Use a shared base type (Android.Views.View) and update all extension methods accordingly

🟠 Missing Track/Background Color Support

Severity: High | Found by: Sonnet 4.5

UpdateLinearProgressIndicatorColor only calls SetIndicatorColor(), but does NOT call SetTrackColor(). The test Material3ProgressBar_SetProgressColorAndBackgroundColor_VerifyVisualState sets both colors, but BackgroundColor changes will be applied to the container view rather than the progress track.

Fix: Add SetTrackColor() call to handle the BackgroundColor property correctly for LinearProgressIndicator.


🟡 Indeterminate Mode Hardcoded to False

Severity: Medium | Found by: Sonnet 4.5

CreatePlatformView() sets Indeterminate = false with no mechanism to change it at runtime. While MAUI's IProgress doesn't expose indeterminate mode, this should be documented as an intentional limitation.

@SyedAbdulAzeemSF4852
Copy link
Copy Markdown
Contributor Author

Multi-Model Code Review (Sonnet 4.5 / GPT 5.1)

🔴 Type Incompatibility — LinearProgressIndicator vs Android.Widget.ProgressBar

Severity: Critical | Found by: GPT 5.1

ProgressBarHandler is ViewHandler<IProgress, AndroidProgressBar> where AndroidProgressBar = Android.Widget.ProgressBar. ProgressBarHandler2 subclasses it and overrides CreatePlatformView() to return LinearProgressIndicator.

Problem: LinearProgressIndicator derives from BaseProgressIndicatorandroid.view.View. It does NOT derive from Android.Widget.ProgressBar. This means:

  1. The override return type is not covariant with the base
  2. ViewHandler<IProgress, AndroidProgressBar> expects an Android.Widget.ProgressBar as PlatformView
  3. The is LinearProgressIndicator check in UpdateProgressColor extension is unreachable since the platform view type is AndroidProgressBar

Fix: Either:

  • Change ProgressBarHandler2 to be a standalone ViewHandler<IProgress, LinearProgressIndicator> (not subclassing ProgressBarHandler), OR
  • Use a shared base type (Android.Views.View) and update all extension methods accordingly

🟠 Missing Track/Background Color Support

Severity: High | Found by: Sonnet 4.5

UpdateLinearProgressIndicatorColor only calls SetIndicatorColor(), but does NOT call SetTrackColor(). The test Material3ProgressBar_SetProgressColorAndBackgroundColor_VerifyVisualState sets both colors, but BackgroundColor changes will be applied to the container view rather than the progress track.

Fix: Add SetTrackColor() call to handle the BackgroundColor property correctly for LinearProgressIndicator.

🟡 Indeterminate Mode Hardcoded to False

Severity: Medium | Found by: Sonnet 4.5

CreatePlatformView() sets Indeterminate = false with no mechanism to change it at runtime. While MAUI's IProgress doesn't expose indeterminate mode, this should be documented as an intentional limitation.

@jfversluis ,
Concern 1 — Type Incompatibility: This concern is invalid — LinearProgressIndicator extends BaseProgressIndicator which itself extends android.widget.ProgressBar, making it a proper subtype of Android.Widget.ProgressBar, so the covariant override, the is LinearProgressIndicator runtime check, and the subclassing approach in this PR are all valid.

Concern 2 — Missing Track/Background Color Support: This concern is invalid — UpdateLinearProgressIndicatorColor is only responsible for ProgressColor (from IProgress), while BackgroundColor is a separate IView property handled generically by ViewHandler.ViewMapper, identical to how Material2 behaves, and since IProgress has no TrackColor property, adding SetTrackColor() would require a new API — making this a future enhancement request, not a bug in this PR.

Concern 3 — Indeterminate Mode: This concern is invalid — Indeterminate = false is set in both the existing ProgressBarHandler (Material2) and the new ProgressBarHandler2 (Material3), making this identical pre-existing behavior, not a new limitation introduced by this PR.

jfversluis
jfversluis previously approved these changes Mar 3, 2026
@jfversluis jfversluis added this to the .NET 10 SR5 milestone Mar 3, 2026
@jfversluis jfversluis changed the base branch from main to inflight/current March 3, 2026 14:17
@jfversluis jfversluis changed the base branch from inflight/current to main March 3, 2026 19:28
@jfversluis jfversluis dismissed their stale review March 3, 2026 19:28

The base branch was changed.

@jfversluis jfversluis changed the base branch from main to inflight/current March 3, 2026 19:29
@PureWeen PureWeen modified the milestones: .NET 10 SR5, .NET 10 SR6 Mar 3, 2026
@jfversluis
Copy link
Copy Markdown
Member

Something went wrong here somehow. I will fix it :)

@jfversluis jfversluis force-pushed the material3-progressbar branch from fbeb12c to 274a5e5 Compare March 5, 2026 15:18
@jfversluis jfversluis merged commit 59b92d0 into dotnet:inflight/current Mar 5, 2026
27 of 34 checks passed
PureWeen pushed a commit that referenced this pull request Mar 11, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes #33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
github-actions bot pushed a commit that referenced this pull request Mar 11, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes #33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
@PureWeen PureWeen mentioned this pull request Mar 17, 2026
PureWeen pushed a commit that referenced this pull request Mar 19, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes #33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
github-actions bot pushed a commit that referenced this pull request Mar 20, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes #33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
github-actions bot pushed a commit that referenced this pull request Mar 22, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes #33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
@kubaflo kubaflo added the s/agent-review-incomplete AI agent could not complete all phases (blocker, timeout, error) label Mar 23, 2026
PureWeen added a commit that referenced this pull request Mar 24, 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 66 commits with various improvements,
bug fixes, and enhancements.


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

- [Implement material3 support for
ActivityIndicator](#33479)
  </details>

- [iOS] Fix: ActivityIndicator IsRunning ignores IsVisible when set to
true by @bhavanesh2001 in #28983
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [ActivityIndicator] `IsRunning` ignores `IsVisible` when set to
`true`](#28968)
  </details>

## Button
- [iOS] Button RTL text and image overlap - fix by @kubaflo in
#29041

## Checkbox
- [iOS/MacCatalyst] Fix CheckBox foreground color not resetting when set
to null by @Ahamed-Ali in #34284
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Color of the checkBox control is not properly worked on dynamic
scenarios](#34278)
  </details>

## CollectionView
- [iOS] Fix: CollectionView does not clear selection when SelectedItem
is set to null by @Tamilarasan-Paranthaman in
#30420
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView not being able to remove selected item highlight on
iOS](#30363)
- [[MAUI] Select items traces are
preserved](#26187)
  </details>

- [iOS] CV2 ItemsLayout update by @kubaflo in
#28675
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView CollectionViewHandler2 doesnt change ItemsLayout on
DataTrigger](#28656)
- [iOS CollectionView doesn't respect a change to ItemsLayout when using
Items2.CollectionViewHandler2](#31259)
  </details>

- [iOS][CV2] Fix CollectionView renders large empty space at bottom of
view by @devanathan-vaithiyanathan in
#31215
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [MacCatalyst] CollectionView renders large empty space at
bottom of view](#17799)
- [[iOS/Mac] CollectionView2 EmptyView takes up large horizontal space
even when the content is
small](#33201)
  </details>

- [iOS] Fixed issue where group Header/Footer template was set to all
items when IsGrouped was true for an ObservableCollection by
@Tamilarasan-Paranthaman in #29144
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Group Header/Footer Repeated for All Items When IsGrouped is
True for ObservableCollection in
CollectionView](#29141)
  </details>

- [Android] Fix CollectionView selection crash with HeaderTemplate by
@NirmalKumarYuvaraj in #34275
  <details>
  <summary>🔧 Fixes</summary>

- [[Bug] [Android] System.ArgumentOutOfRangeException: Index was out of
range. Must be non-negative and less than the size of the collection.
Parameter name: index](#34247)
  </details>

## DateTimePicker
- [iOS] Fix TimePicker AM/PM frequently changes when the app is closed
and reopened by @devanathan-vaithiyanathan in
#31066
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] TimePicker AM/PM frequently changes when the app is closed and
reopened](#30837)
- [Maui 10 iOS TimePicker Strange Characters in place of
AM/PM](#33722)
  </details>

- Android TimePicker ignores 24 hour system setting when using Format
Property - fix by @kubaflo in #28797
  <details>
  <summary>🔧 Fixes</summary>

- [Android TimePicker ignores 24 hour system setting when using Format
Property](#28784)
  </details>

## Drawing
- [iOS, Mac, Windows] GraphicsView: Fix Background/BackgroundColor not
updating by @NirmalKumarYuvaraj in
#31254
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac, Windows] GraphicsView does not change the
Background/BackgroundColor](#31239)
  </details>

- [iOS] GraphicsView DrawString - fix by @kubaflo in
#26304
  <details>
  <summary>🔧 Fixes</summary>

- [DrawString not rendering in
iOS.](#24450)
- [GraphicsView DrawString not rendering in
iOS](#8486)
- [DrawString doesn't work on
maccatalyst](#4993)
  </details>

- [Android] - Fix Shadow Rendering For Transparent Fill, Stroke (Lines),
and Text on Shapes by @prakashKannanSf3972 in
#29528
  <details>
  <summary>🔧 Fixes</summary>

- [Ellipse Transparency Not Rendered When Drawing Arc Inside the Ellipse
Using GraphicsView on
Android](#29394)
  </details>

- Revert "[iOS, Mac, Windows] GraphicsView: Fix
Background/BackgroundColor not updating (#31254)" by @Ahamed-Ali via
@Copilot in #34508

## Entry
- [iOS 26] Fix Entry MaxLength not enforced due to new multi-range
delegate by @kubaflo in #32045
  <details>
  <summary>🔧 Fixes</summary>

- [iOS 26 - The MaxLength property value is not respected on an Entry
control.](#32016)
- [.NET MAUI Entry Maximum Length not working on iOS and
macOS](#33316)
  </details>

- [iOS] Fixed Entry with IsPassword toggling loses previously entered
text by @SubhikshaSf4851 in #30572
  <details>
  <summary>🔧 Fixes</summary>

- [Entry with IsPassword toggling loses previously entered text on iOS
when IsPassword is
re-enabled](#30085)
  </details>

## Essentials
- Fix for FilePicker PickMultipleAsync nullable reference type by
@SuthiYuvaraj in #33163
  <details>
  <summary>🔧 Fixes</summary>

- [FilePicker PickMultipleAsync nullable reference
type](#33114)
  </details>

- Replace deprecated NetworkReachability with NWPathMonitor on iOS/macOS
by @jfversluis via @Copilot in #32354
  <details>
  <summary>🔧 Fixes</summary>

- [NetworkReachability is obsolete on iOS/maccatalyst
17.4+](#32312)
- [Use NWPathMonitor on iOS for Essentials
Connectivity](#2574)
  </details>

## Essentials Connectivity
- Update Android Connectivity implementation to use modern APIs by
@jfversluis via @Copilot in #30348
  <details>
  <summary>🔧 Fixes</summary>

- [Update the Android Connectivity implementation to user modern
APIs](#30347)
  </details>

## Flyout
- [iOS] Fixed Flyout icon not updating when root page changes using
InsertPageBefore by @Vignesh-SF3580 in
#29924
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Flyout icon not replaced by back button when root page is
changed using
InsertPageBefore](#29921)
  </details>

## Flyoutpage
- [iOS] Flyout Items Not Displayed in RightToLeft FlowDirection in
Landscape - fix by @kubaflo in #26762
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout Items Not Displayed in RightToLeft FlowDirection on iOS in
Landscape Orientation and Hamburger Icon Positioned
Incorrectly](#26726)
  </details>

## Image
- [Android] Implemented Material3 support for Image by @Dhivya-SF4094 in
#33661
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Image](#33660)
  </details>

## Keyboard
- [iOS] Fix gap at top of view after rotating device while Entry
keyboard is visible by @praveenkumarkarunanithi in
#34328
  <details>
  <summary>🔧 Fixes</summary>

- [Focusing and entering texts on entry control causes a gap at the top
after rotating simulator.](#33407)
  </details>

## Label
- [Android] Support for images inside HTML label by @kubaflo in
#21679
  <details>
  <summary>🔧 Fixes</summary>

- [Label with HTML TextType does not display images on
Android](#21044)
  </details>

- [fix] ContentLabel Moved to a nested class to prevent CS0122 in
external source generators by @SubhikshaSf4851 in
#34514
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] Building Maui App with sample content results CS0122
errors.](#34512)
  </details>

## Layout
- Optimize ordering of children in Flex layout by @symbiogenesis in
#21961

- [Android] Fix control size properties not available during Loaded
event by @Vignesh-SF3580 in #31590
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView on Android does not provide height, width, logical
children once loaded, works fine on
Windows](#14364)
- [Control's Loaded event invokes before calling its measure override
method.](#14160)
  </details>

## Mediapicker
- [iOS/Android] MediaPicker: Fix image orientation when RotateImage=true
by @michalpobuta in #33892
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotosAsync does not preserve image
orientation](#32650)
  </details>

## Modal
- [Windows] Fix modal page keyboard focus not shifting to newly opened
modal by @jfversluis in #34212
  <details>
  <summary>🔧 Fixes</summary>

- [Keyboard focus does not shift to a newly opened modal page: Pressing
enter clicks the button on the page beneath the modal
page](#22938)
  </details>

## Navigation
- [iOS26] Apply view margins in title view by @kubaflo in
#32205
  <details>
  <summary>🔧 Fixes</summary>

- [NavigationPage TitleView iOS
26](#32200)
  </details>

- [iOS] System.NullReferenceException at
NavigationRenderer.SetStatusBarStyle() by @kubaflo in
#29564
  <details>
  <summary>🔧 Fixes</summary>

- [System.NullReferenceException at
NavigationRenderer.SetStatusBarStyle()](#29535)
  </details>

- [iOS 26] Fix back button color not applied for NavigationPage by
@Shalini-Ashokan in #34326
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Color not applied to the Back button text or image on iOS
26](#33966)
  </details>

## Picker
- Fix Picker layout on Mac Catalyst 26+ by @kubaflo in
#33146
  <details>
  <summary>🔧 Fixes</summary>

- [[MacOS 26] Text on picker options are not centered on macOS
26.1](#33229)
  </details>

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

- [Implement Material3 support for
Progressbar](#33925)
  </details>

## RadioButton
- [iOS, Mac] Fix for RadioButton TextColor for plain Content not working
by @HarishwaranVijayakumar in #31940
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton: TextColor for plain Content not working on
iOS](#18011)
  </details>

- [All Platforms] Fix RadioButton warning when ControlTemplate is set
with View content by @kubaflo in
#33839
  <details>
  <summary>🔧 Fixes</summary>

- [Seeking clarification on RadioButton + ControlTemplate + Content
documentation](#33829)
  </details>

- Visual state change for disabled RadioButton by @kubaflo in
#23471
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton disabled UI issue -
iOS](#18668)
  </details>

## SafeArea
- [Android] Fix for TabbedPage BottomNavigation BarBackgroundColor not
extending to system navigation bar by @praveenkumarkarunanithi in
#33428
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TabbedPage BottomNavigation BarBackgroundColor does not
extend to system navigation bar area in Edge-to-Edge
mode](#33344)
  </details>

## ScrollView
- [Android] ScrollView: Fix HorizontalScrollBarVisibility not updating
immediately at runtime by @SubhikshaSf4851 in
#33528
  <details>
  <summary>🔧 Fixes</summary>

- [Runtime Scrollbar visibility not updating correctly on Android and
macOS platforms.](#33400)
  </details>

- Fixed crash when calling ItemsView.ScrollTo on unloaded CollectionView
by @kubaflo in #25444
  <details>
  <summary>🔧 Fixes</summary>

- [App crashes when calling ItemsView.ScrollTo on unloaded
CollectionView](#23014)
  </details>

## Shell
- [Shell] Update logic for iOS large title display in ShellItemRenderer
by @kubaflo in #33246

- [iOS][Shell] Fix navigation lifecycle and back button for More tab (>5
tabs) by @kubaflo in #27932
  <details>
  <summary>🔧 Fixes</summary>

- [OnAppearing and OnNavigatedTo does not work when using extended
Tabbar (tabbar with more than 5 tabs) on
IOS.](#27799)
- [Shell.BackButtonBehavior does not work when using extended Tabbar
(tabbar with more than 5 tabs)on
IOS.](#27800)
- [Shell TabBar More button causes ViewModel command binding
disconnection on back
navigation](#30862)
- [Content page onappearing not firing if tabs are on the more tab on
IOS](#31166)
  </details>

- [iOS 26] Fix tab bar ghosting when navigating from modal to tabbed
Shell content by @SubhikshaSf4851 in
#34254
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Tab bar ghosting issue on iOS 26 (liquid
glass)](#34143)
  </details>

- Fix for Shell tab visibility not updating when navigating back
multiple pages by @BagavathiPerumal in
#34403
  <details>
  <summary>🔧 Fixes</summary>

- [Changing Shell Tab Visibility when navigating back multiple pages
ignores Shell Tab
Visibility](#33351)
  </details>

- [iOS/Mac] Fixed OnBackButtonPressed not firing for Shell Navigation
Bar Button by @Dhivya-SF4094 in
#34401
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] OnBackButtonPressed not firing for Shell Navigation Bar
button](#34190)
  </details>

## Slider
- [iOS] Fix for Slider ThumbImageSource is not centered properly on iOS
26 by @HarishwaranVijayakumar in
#34019
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Slider ThumbImageSource is not centered
properly](#33967)
  </details>

- [Android] Fix improper rendering of ThumbimageSource in Slider by
@NirmalKumarYuvaraj in #34064
  <details>
  <summary>🔧 Fixes</summary>

- [[Slider] MAUI Slider thumb image is big on
android](#13258)
  </details>

## Stepper
- [iOS] Fix Stepper layout overlap in landscape on iOS 26 by
@Vignesh-SF3580 in #34325
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] D10 - Customize cursor position - Rotating simulator makes
the button and label
overlap](#34273)
  </details>

## SwipeView
- [iOS] SwipeView: Honor FontImageSource.Color in SwipeItem icon by
@kubaflo in #27389
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] SwipeView: SwipeItem.IconImageSource.FontImageSource color
value not honored](#27377)
  </details>

## Switch
- [Android] Fix Switch thumb shadow missing when ThumbColor is set by
@Shalini-Ashokan in #33960
  <details>
  <summary>🔧 Fixes</summary>

- [Android Switch Control Thumb
Shadow](#19676)
  </details>

## Toolbar
- [iOS/Mac Catalyst 26] Fix Shell.ForegroundColor not applied to
ToolbarItems by @SyedAbdulAzeemSF4852 in
#34085
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS26] Shell.ForegroundColor is not applied to
ToolbarItems](#34083)
  </details>

- [Android] VoiceOver on Toolbar Item by @kubaflo in
#29596
  <details>
  <summary>🔧 Fixes</summary>

- [VoiceOver on Toolbar
Item](#29573)
- [SemanticProperties do not work on
ToolbarItems](#23623)
  </details>


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

- [Testing] Additional Feature Matrix Test Cases for CollectionView by
@TamilarasanSF4853 in #32432
- [Testing] Feature Matrix UITest Cases for VisualStateManager by
@LogishaSelvarajSF4525 in #34146
- [Testing] Feature Matrix UITest Cases for Clip by @TamilarasanSF4853
in #34121
- [Testing] Feature matrix UITest Cases for Map Control by
@HarishKumarSF4517 in #31656
- [Testing] Feature matrix UITest Cases for Visual Transform Control by
@HarishKumarSF4517 in #32799
- [Testing] Feature Matrix UITest Cases for Shell Pages by
@NafeelaNazhir in #33945
- [Testing] Feature Matrix UITest Cases for Triggers by
@HarishKumarSF4517 in #34152
- [Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control
by @LogishaSelvarajSF4525 in #34283
- Resolve UI test Build Sample failures - Candidate March 16 by
@Ahamed-Ali in #34442
- Fix the failures in the Candidate branch- March 16 by @Ahamed-Ali in
#34453
  <details>
  <summary>🔧 Fixes</summary>

  - [March 16th, Candidate](#34437)
  </details>
- Fixed the iOS 18.5 Candidate failures (March 16,2026) by @Ahamed-Ali
in #34593
  <details>
  <summary>🔧 Fixes</summary>

  - [March 16th, Candidate](#34437)
  </details>

</details>

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

- Fixed candidate test failures caused by PR #33428. by @Ahamed-Ali in
#34515
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] On Android, there's a big space at the top for I, M and N2 &
N3](#34509)
  </details>
- Revert "[iOS] Button RTL text and image overlap - fix (#29041)" in
b0497af

</details>

<details>
<summary>📝 Issue References</summary>

Fixes #2574, Fixes #4993, Fixes #8486, Fixes #13258, Fixes #14160, Fixes
#14364, Fixes #17799, Fixes #18011, Fixes #18668, Fixes #19676, Fixes
#21044, Fixes #22938, Fixes #23014, Fixes #23623, Fixes #24450, Fixes
#26187, Fixes #26726, Fixes #27377, Fixes #27799, Fixes #27800, Fixes
#28656, Fixes #28784, Fixes #28968, Fixes #29141, Fixes #29394, Fixes
#29535, Fixes #29573, Fixes #29921, Fixes #30085, Fixes #30347, Fixes
#30363, Fixes #30837, Fixes #30862, Fixes #31166, Fixes #31239, Fixes
#31259, Fixes #32016, Fixes #32200, Fixes #32312, Fixes #32650, Fixes
#33114, Fixes #33201, Fixes #33229, Fixes #33316, Fixes #33344, Fixes
#33351, Fixes #33400, Fixes #33407, Fixes #33479, Fixes #33660, Fixes
#33722, Fixes #33829, Fixes #33925, Fixes #33966, Fixes #33967, Fixes
#34083, Fixes #34143, Fixes #34190, Fixes #34247, Fixes #34273, Fixes
#34278, Fixes #34437, Fixes #34509, Fixes #34512

</details>

**Full Changelog**:
main...inflight/candidate
KarthikRajaKalaimani pushed a commit to KarthikRajaKalaimani/maui that referenced this pull request Mar 30, 2026
### Description of Change

- This pull request updates the handling of `ProgressBar` controls on
Android to support Material3 styling when the feature is enabled. It
introduces a new handler, updates the registration logic, and extends
color update support for Material3 progress bars.

**Android ProgressBar Material3 Support:**

* Added a new internal handler `ProgressBarHandler2` that uses
`LinearProgressIndicator` from Material3 for progress bars when
Material3 is enabled.
(`src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs`)
* Updated `AddControlsHandlers` in `AppHostBuilderExtensions.cs` to
register `ProgressBarHandler2` instead of the default handler when
Material3 is enabled, preserving the original handler otherwise.

**ProgressBar Color Customization:**

* Enhanced `ProgressBarExtensions.UpdateProgressColor` to delegate color
updates to a new method for Material3 progress bars
(`UpdateLinearProgressIndicatorColor`) or fall back to the native color
update for standard progress bars.
* Implemented `UpdateLinearProgressIndicatorColor` for
`LinearProgressIndicator`, supporting theme default fallback and custom
color arrays.
* Added necessary Material3 imports to `ProgressBarExtensions.cs`.

Material Design Spec -
[ProgressBar](https://m3.material.io/components/progress-indicators/overview)


### Issues Fixed
Fixes dotnet#33925

### Output
| Material2 | Material3 |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/8f3fdd37-f595-4960-86ef-32ea3ab58d43">
| <img
src="https://github.com/user-attachments/assets/9472e959-953f-49a2-ad2a-0fad823f4cb9">
|
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-progressbar ProgressBar community ✨ Community Contribution material3 partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android 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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Material3 support for Progressbar

7 participants