Skip to content

[Android] Fix Shell/TabbedPage "More" BottomSheet uses hard-coded M2 colors when Material3 is enabled #35129

Merged
kubaflo merged 3 commits into
dotnet:inflight/currentfrom
HarishwaranVijayakumar:m3-bottomsheet
Apr 25, 2026
Merged

[Android] Fix Shell/TabbedPage "More" BottomSheet uses hard-coded M2 colors when Material3 is enabled #35129
kubaflo merged 3 commits into
dotnet:inflight/currentfrom
HarishwaranVijayakumar:m3-bottomsheet

Conversation

@HarishwaranVijayakumar

Copy link
Copy Markdown
Contributor

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:

  • When Material 3 is enabled (<UseMaterial3>true</UseMaterial3>), the Shell/TabbedPage "More" overflow BottomSheetDialog on Android still uses Material 2 styling — square corners, hard-coded black text, gray icons, and white backgrounds — instead of M3-styled rounded corners, theme-aware colors, and proper ripple effects.

Root Cause of the issue:

  • The CreateMoreBottomSheet() method in both BottomNavigationViewUtils.cs and ShellItemRenderer.cs hard-codes M2 colors for item rows (white background, black text, gray icons) without checking RuntimeFeature.IsMaterial3Enabled.

Description of Change

Material 3 theming improvements:

  • Updated the background drawable for BottomSheet items to use M3 ripple and background colors when Material 3 is enabled by introducing a new CreateItemBackgroundDrawable(Context) method and using it conditionally. (ShellItemRenderer.cs, BottomNavigationViewUtils.cs)
  • Changed icon tint and text color assignments in the BottomSheet to use M3 theme attributes (colorOnSurfaceVariant for icons, colorOnSurface for text) when Material 3 is enabled, falling back to previous hard-coded values otherwise. (ShellItemRenderer.cs, BottomNavigationViewUtils.cs)

Testing enhancements:

  • Added a new sample page (Issue35127) to demonstrate and manually verify the correct theming of the "More" BottomSheet with six tabs. (Issue35127.cs)
  • Introduced a corresponding automated UI test to ensure the BottomSheet uses M3 themed colors when Material 3 is enabled. (Issue35127.cs in test project)

Issues Fixed

Fixes #35127

Tested the behaviour in the following platforms

  • - Windows
  • - Android
  • - iOS
  • - Mac
Before After

kubaflo and others added 3 commits April 23, 2026 09:17
…tnet#34994)

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

## Description

Integrates the standalone `code-review` skill into the `pr-review`
orchestrator so that deep code analysis happens during Pre-Flight and
its findings feed into Try-Fix exploration.

### Changes

**Pre-Flight (Phase 1)** — `.github/pr-review/pr-preflight.md`
- Added Part B (Step 7): Invokes code-review skill as an independent
sub-agent
- Independence-first principle preserved — sub-agent receives only the
PR number, not Part A context
- Outputs both `content.md` (context + code review summary) and
`code-review.md` (full review)

**Try-Fix (Phase 2)** — `.github/skills/pr-review/SKILL.md`
- Try-fix prompt template now includes `code_review_findings` (errors,
warnings, failure modes, blast radius)
- Findings are advisory hints — inform approach, not a mandatory
checklist
- Only root-cause-relevant findings included to avoid distraction

**Report (Phase 3)** — `.github/pr-review/pr-report.md`
- Code Review row added to Phase Status table
- Hard gate: `NEEDS_CHANGES` verdict blocks `APPROVE` regardless of
Gate/Try-Fix
- New "Code Review Impact on Try-Fix" section

**AI Summary** — `.github/scripts/post-ai-summary-comment.ps1`
- Full code-review output shown as separate "🔬 Code Review — Deep
Analysis" collapsible section
- Gracefully skipped if `code-review.md` does not exist

### Design decisions
- The `code-review` skill itself is NOT modified — stays standalone and
independently invokable
- The `try-fix` skill is NOT modified — already accepts hints
- Code review runs as a sub-agent to prevent anchoring bias
(independence-first)
- Report hard gate prevents approving PRs with unresolved code review
errors

---------

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

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35129

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35129"

@dotnet-policy-service dotnet-policy-service Bot added the community ✨ Community Contribution label Apr 24, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hey there @@HarishwaranVijayakumar! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed.

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Apr 24, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review April 24, 2026 13:47
Copilot AI review requested due to automatic review settings April 24, 2026 13:47

Copilot AI left a comment

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.

Pull request overview

Updates Android “More” overflow BottomSheet (Shell/TabbedPage) to respect Material 3 theming when UseMaterial3=true, and adds a UI test + snapshot baseline intended to validate the updated visuals.

Changes:

  • Add Material3-aware background ripple + themed icon/text colors for “More” BottomSheet rows (with M2 fallback).
  • Introduce a new HostApp issue page (6 tabs) to surface the overflow BottomSheet.
  • Add an Android UI screenshot test and baseline image for the expected Material3 styling.

Reviewed changes

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

Show a summary per file
File Description
src/Controls/src/Core/Platform/Android/BottomNavigationViewUtils.cs Adds a Material3-aware item background drawable overload and uses theme attributes for icon/text styling in the “More” BottomSheet.
src/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellItemRenderer.cs Updates Shell compatibility renderer to use Material3 theme attributes for “More” BottomSheet row visuals when enabled.
src/Controls/tests/TestCases.HostApp/Issues/Issue35127.cs Adds a Shell page with 6 tabs to force the “More” overflow UI for manual/automated validation.
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35127.cs Adds an Android UI screenshot test that opens “More” and captures the BottomSheet styling.
src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/MoreBottomSheetUsesM3ThemedColors.png Adds the screenshot baseline for the new test.

public Issue35127(TestDevice device) : base(device) { }

[Test]
[Category(UITestCategories.Shell)]

Copilot AI Apr 24, 2026

Copy link

Choose a reason for hiding this comment

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

This test is categorized as Shell, but the Android Material3 UI test pipeline stage runs only tests with TestCategory=Material3. As written, this test (and the added snapshot) will not execute in the Material3 run, so it won’t validate the intended behavior. Consider switching the test’s [Category] to UITestCategories.Material3 (and keep it as the only category).

Suggested change
[Category(UITestCategories.Shell)]
[Category(UITestCategories.Material3)]

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +6
public class Issue35127 : Shell
{
public Issue35127()

Copilot AI Apr 24, 2026

Copy link

Choose a reason for hiding this comment

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

Most Shell-based issue pages in the HostApp derive from TestShell (see TestShell.cs) to keep Shell setup consistent for UI automation. Using raw Shell here makes the test page more verbose and less aligned with existing patterns; consider inheriting from TestShell and moving the tab construction into Init().

Suggested change
public class Issue35127 : Shell
{
public Issue35127()
public class Issue35127 : TestShell
{
protected override void Init()

Copilot uses AI. Check for mistakes.
@MauiBot

MauiBot commented Apr 24, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

👋 @HarishwaranVijayakumar — new AI review results are available. Please review the latest session below.

📊 Review Session87e6859 · Modify test · 2026-04-24 23:08 UTC
🚦 Gate — Test Before & After Fix

Gate Result: ❌ FAILED

Platform: ANDROID · Base: main · Merge base: 388b82f1

Test Without Fix (expect FAIL) With Fix (expect PASS)
🖥️ Issue35127 Issue35127 ✅ FAIL — 747s ❌ FAIL — 1370s
🔴 Without fix — 🖥️ Issue35127: FAIL ✅ · 747s
  Determining projects to restore...
  Restored /home/vsts/work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 6.36 sec).
  Restored /home/vsts/work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 6.3 sec).
  Restored /home/vsts/work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 150 ms).
  Restored /home/vsts/work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 9 ms).
  Restored /home/vsts/work/1/s/src/Essentials/src/Essentials.csproj (in 18 ms).
  Restored /home/vsts/work/1/s/src/Core/src/Core.csproj (in 44 ms).
  Restored /home/vsts/work/1/s/src/Core/maps/src/Maps.csproj (in 24 ms).
  Restored /home/vsts/work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 1.18 sec).
  Restored /home/vsts/work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 47 ms).
  Restored /home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 980 ms).
  1 of 11 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0-android36.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-android36.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Xaml.dll
  Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Maps.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-android36.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.TestCases.HostApp -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Controls.TestCases.HostApp.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Foldable.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Maps.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:07:04.06
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
  Determining projects to restore...
  Restored /home/vsts/work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 1.27 sec).
  Restored /home/vsts/work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 11 ms).
  Restored /home/vsts/work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 6.05 sec).
  Restored /home/vsts/work/1/s/src/Controls/tests/TestCases.Android.Tests/Controls.TestCases.Android.Tests.csproj (in 7.71 sec).
  Restored /home/vsts/work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 2 ms).
  Restored /home/vsts/work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 4 ms).
  Restored /home/vsts/work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 363 ms).
  Restored /home/vsts/work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 2.72 sec).
  5 of 13 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  Controls.CustomAttributes -> /home/vsts/work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.20]   Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.63]   Discovered:  Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
   NUnit3TestExecutor discovered 2 of 2 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 04/24/2026 21:47:05 FixtureSetup for Bugzilla35127UITests(Android)
>>>>> 04/24/2026 21:47:09 Issue35127Test Start
>>>>> 04/24/2026 21:47:11 Issue35127Test Stop
  Passed Issue35127Test [2 s]
>>>>> 04/24/2026 21:47:14 FixtureSetup for Issue35127(Android)
>>>>> 04/24/2026 21:47:19 MoreBottomSheetUsesM3ThemedColors Start
>>>>> 04/24/2026 21:47:26 MoreBottomSheetUsesM3ThemedColors Stop
>>>>> 04/24/2026 21:47:27 Log types: logcat, bugreport, server
  Failed MoreBottomSheetUsesM3ThemedColors [8 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/MoreBottomSheetUsesM3ThemedColors.png
Ensure new snapshot is correct:    /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/MoreBottomSheetUsesM3ThemedColors.png
  and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow

  Stack Trace:
     at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
   at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 84
   at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
   at Microsoft.Maui.TestCases.Tests.Issues.Issue35127.MoreBottomSheetUsesM3ThemedColors() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35127.cs:line 28
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

NUnit Adapter 4.5.0.0: Test execution complete

Test Run Failed.
Total tests: 2
     Passed: 1
     Failed: 1
 Total time: 2.1684 Minutes

🟢 With fix — 🖥️ Issue35127: FAIL ❌ · 1370s

(truncated to last 15,000 chars)

in.Android.Tasks.FastDeploy.InstallPackage(Boolean installed) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Xamarin.Android.Tasks.FastDeploy.RunInstall() [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]

Build FAILED.

/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010: Mono.AndroidTools.InstallFailedException: Unexpected install output: cmd: Failure calling service package: Broken pipe (32) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:  [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Mono.AndroidTools.AndroidDevice.<>c__DisplayClass105_0.<InstallPackage>b__0(Task`1 t) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010: --- End of stack trace from previous location --- [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010: --- End of stack trace from previous location --- [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at AndroidDeviceExtensions.PushAndInstallPackageAsync(AndroidDevice device, PushAndInstallCommand command, CancellationToken token) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at AndroidDeviceExtensions.PushAndInstallPackageAsync(AndroidDevice device, PushAndInstallCommand command, CancellationToken token) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Xamarin.Android.Tasks.FastDeploy.InstallPackage(Boolean installed) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Xamarin.Android.Tasks.FastDeploy.InstallPackage(Boolean installed) [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
/home/vsts/work/1/s/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.Debugging.targets(333,5): error ADB0010:    at Xamarin.Android.Tasks.FastDeploy.RunInstall() [/home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-android]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:11:13.59
* daemon not running; starting now at tcp:5037
* daemon started successfully
  Determining projects to restore...
  All projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0-android36.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-android36.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Xaml.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-android36.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Maps.dll
  Controls.TestCases.HostApp -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Controls.TestCases.HostApp.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Maps.dll
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Foldable.dll
  Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Maps.dll
  Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:08:57.29
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
  Determining projects to restore...
  All projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.CustomAttributes -> /home/vsts/work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.13932953
  Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12]   Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.34]   Discovered:  Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
   NUnit3TestExecutor discovered 2 of 2 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 04/24/2026 22:09:58 FixtureSetup for Bugzilla35127UITests(Android)
>>>>> 04/24/2026 22:10:01 Issue35127Test Start
>>>>> 04/24/2026 22:10:04 Issue35127Test Stop
  Passed Issue35127Test [2 s]
>>>>> 04/24/2026 22:10:06 FixtureSetup for Issue35127(Android)
>>>>> 04/24/2026 22:10:12 MoreBottomSheetUsesM3ThemedColors Start
>>>>> 04/24/2026 22:10:19 MoreBottomSheetUsesM3ThemedColors Stop
>>>>> 04/24/2026 22:10:19 Log types: logcat, bugreport, server
  Failed MoreBottomSheetUsesM3ThemedColors [7 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Baseline snapshot not yet created: /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/snapshots/android/MoreBottomSheetUsesM3ThemedColors.png
Ensure new snapshot is correct:    /home/vsts/work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/android/MoreBottomSheetUsesM3ThemedColors.png
  and if it is, push a change to add it to the 'snapshots' directory.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow

  Stack Trace:
     at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
   at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 84
   at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
   at Microsoft.Maui.TestCases.Tests.Issues.Issue35127.MoreBottomSheetUsesM3ThemedColors() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35127.cs:line 28
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

NUnit Adapter 4.5.0.0: Test execution complete

Test Run Failed.
Total tests: 2
     Passed: 1
     Failed: 1
 Total time: 38.9117 Seconds

⚠️ Issues found
  • Issue35127 FAILED with fix (should pass)
    • Device tests: 1 of 2 failed
📁 Fix files reverted (2 files)
  • src/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellItemRenderer.cs
  • src/Controls/src/Core/Platform/Android/BottomNavigationViewUtils.cs

🧪 UI Tests — Category Detection

Detected UI test categories: Shell


🔍 Pre-Flight — Context & Validation

Issue: #35127 - [Android] Shell/TabbedPage "More" BottomSheet uses hard-coded M2 colors when Material3 is enabled
PR: #35129 - [Android] Fix Shell/TabbedPage "More" BottomSheet uses hard-coded M2 colors when Material3 is enabled
Platforms Affected: Android
Files Changed: 2 implementation, 3 test (1 host app page, 1 shared test, 1 snapshot)

Key Findings

  • The PR fixes two parallel code paths (BottomNavigationViewUtils.cs and ShellItemRenderer.cs) that both independently build the "More" overflow BottomSheetDialog
  • Fix adds RuntimeFeature.IsMaterial3Enabled checks to use M3 theme attributes (colorOnSurface, colorOnSurfaceVariant) for text color, icon tint, and ripple background
  • New internal overload CreateItemBackgroundDrawable(Context) added in BottomNavigationViewUtils to handle M3 background drawable
  • Gate FAILED: Test did not pass with the fix. The test is categorized as Shell but the Material3 pipeline only runs tests with Category=Material3. This means the test never ran under M3 conditions (with UseMaterial3=true)
  • Copilot inline review already flagged the wrong category issue: [Category(UITestCategories.Shell)] should be [Category(UITestCategories.Material3)]
  • VerifyScreenshot() is called without retryTimeout on an animated bottom sheet — potential flakiness

Code Review Summary

Verdict: LGTM
Confidence: medium
Errors: 0 | Warnings: 2 | Suggestions: 2

Key code review findings:

  • ⚠️ Issue35127.cs (Shared Tests, line 15): [Category(UITestCategories.Shell)] should be [Category(UITestCategories.Material3)] — test won't run in M3 pipeline as-is (explains Gate failure)
  • ⚠️ Issue35127.cs (Shared Tests, line 28): VerifyScreenshot() called without retryTimeout on animated Material bottom sheet — use VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(2))
  • 💡 ShellItemRenderer.cs line 193: Redundant external IsMaterial3Enabled check before calling BottomNavigationViewUtils.CreateItemBackgroundDrawable(Context) which already guards internally
  • 💡 Icon tinting mechanism diverges between the two code paths (pre-existing, not introduced by PR)

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35129 Check RuntimeFeature.IsMaterial3Enabled in both BottomNavigationViewUtils and ShellItemRenderer, use M3 theme attrs for colors ❌ FAILED (Gate) BottomNavigationViewUtils.cs, ShellItemRenderer.cs Fix looks correct; test category bug likely caused gate failure

🔬 Code Review — Deep Analysis

Code Review — PR #35129

Independent Assessment

What this changes: Two parallel code paths that render the Shell/TabbedPage "More" overflow BottomSheetDialog on Android — BottomNavigationViewUtils.CreateMoreBottomSheet and ShellItemRenderer.CreateMoreBottomSheet (the compat renderer) — are updated to use Material3 theme attributes (colorOnSurface, colorOnSurfaceVariant, colorOnSurface at 10% alpha for ripple) when RuntimeFeature.IsMaterial3Enabled is true, falling back to the existing hard-coded M2 values otherwise. A new internal overload CreateItemBackgroundDrawable(Context) is introduced in BottomNavigationViewUtils to encapsulate the conditional background drawable logic.

Inferred motivation: When M3 is enabled, the More bottom sheet was rendering with hard-coded legacy colors (white background, black text, gray tinted icons) instead of honoring the active M3 theme palette — visually inconsistent with the rest of the M3 Shell chrome.


Reconciliation with PR Narrative

Author claims: The root cause is the CreateMoreBottomSheet methods hard-coding M2 colors without checking RuntimeFeature.IsMaterial3Enabled. Fix is to branch on that flag and use M3 Resource.Attribute.* theme colors.

Agreement/disagreement: The diagnosis and fix match perfectly. One observation worth surfacing: the two code paths use subtly different tinting mechanisms (detailed below), but this pre-dates the PR.


Findings

⚠️ Warning — VerifyScreenshot() called without retryTimeout on animated UI

Issue35127.cs (Shared Tests, line 28) calls VerifyScreenshot() immediately after App.WaitForElement("Tab5"). Material bottom sheet dialogs have an entry slide/expand animation. On a slower CI device or first-frame conditions, the screenshot could capture the sheet mid-animation and produce a flaky baseline mismatch.

Review rule 13: "Use VerifyScreenshot(retryTimeout:) instead of Task.Delay. VerifyScreenshot has built-in retry logic. Use retryTimeout: TimeSpan.FromSeconds(2) for animations."

Recommended fix:

VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(2));

⚠️ Warning — Missing snapshot baseline for the android (M2) device configuration

The snapshot MoreBottomSheetUsesM3ThemedColors.png is only provided for android-notch-36/ but not for android/. The test method is categorized as UITestCategories.Shell — a broad category that CI may run on both device configurations. If the test runs in the non-M3 (android/) CI configuration, VerifyScreenshot() will fail with a missing baseline.

Mitigation evidence: Every existing Material3 snapshot is exclusively in android-notch-36/. This strongly suggests the android-notch-36 run is the M3-enabled configuration.

Recommendation: Switch [Category(UITestCategories.Shell)] to [Category(UITestCategories.Material3)] to ensure the test only runs in the M3 pipeline configuration (API 36 with UseMaterial3=true).

💡 Suggestion — Icon tinting mechanism differs between the two code paths

In BottomNavigationViewUtils.CreateMoreBottomSheet, M3 icon tint is applied via image.ImageTintList (before load). In ShellItemRenderer.CreateMoreBottomSheet, it's applied via result.Value.SetTint(color) (inside async callback, mutating drawable directly). Predates this PR — no action required now, but worth aligning in a follow-up.

💡 Suggestion — Minor redundant M3 check in ShellItemRenderer

ShellItemRenderer.cs checks RuntimeFeature.IsMaterial3Enabled externally before calling BottomNavigationViewUtils.CreateItemBackgroundDrawable(Context), which already contains the same guard internally. Redundant but harmless.


Devil's Advocate

"Is the RuntimeFeature.IsMaterial3Enabled check the right gate?" Yes — this is the standard pattern used throughout the codebase.

"Could GetThemeAttrColor return 0 (transparent) if M3 theme doesn't define the attribute?" Consistent with existing patterns in ShellPageContainer, ShellRenderer. Acceptable.

"Does the snapshot test actually verify M3 behavior?" Only if CI builds the host app with UseMaterial3=true. The android-notch-36 config appears to be the M3-enabled build (all Material3 snapshots live there).


Verdict: LGTM

Confidence: medium

Summary: The fix is logically correct and consistent with how M3 theming is applied throughout the Shell Android code. The two warnings are about test robustness: missing retryTimeout on animated UI, and the test category should be Material3 not Shell to ensure it only runs in the M3 pipeline configuration. The PR is mergeable with these test fixes.


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35129 Check RuntimeFeature.IsMaterial3Enabled in both BottomNavigationViewUtils and ShellItemRenderer; use M3 theme attrs ❌ FAILED (Gate) BottomNavigationViewUtils.cs, ShellItemRenderer.cs Production fix correct; test category bug caused gate failure
1 try-fix Re-apply production fix + Category Shell→Material3 + retryTimeout(2s) + convert HostApp to TestShell ✅ PASS 4 files Most complete; adds TestShell convention
2 try-fix Re-apply production fix + Category Shell→Material3 + retryTimeout(2s) (no TestShell) + android-profile snapshot ✅ PASS 4 files Minimal; reveals android-profile snapshot needed
3 try-fix Theme-attribute-first approach: extracted shared M3 color helpers, category+retryTimeout fixed ✅ PASS 4 files Alternative production code style
4 try-fix Dual categories [Shell, Material3] ❌ FAIL MAUI0002 analyzer blocks dual categories

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 No "NO NEW IDEAS — three passing attempts cover solution space"

Exhausted: Yes
Selected Fix: Attempt 2 (Minimal category + retryTimeout + android-profile snapshot) — simplest passing fix that requires the fewest HostApp changes while directly addressing the gate failure root cause. The production fix is already correct in the PR; the test needs Category=Material3, retryTimeout, and an android-profile snapshot added.


📋 Report — Final Recommendation

⚠️ Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Issue #35127, Android-only, 2 impl files + 3 test files
Code Review LGTM (medium) 0 errors, 2 warnings
Gate ❌ FAILED android — test did not pass with fix applied
Try-Fix ✅ COMPLETE 4 attempts, 3 passing
Report ✅ COMPLETE

Code Review Impact on Try-Fix

Code review identified two test-level warnings: (1) wrong test category (Shell vs Material3) and (2) missing retryTimeout on animated UI. These findings were passed as hints to Try-Fix models. All three passing attempts (1–3) directly addressed both warnings. Attempt 4's dual-category idea was blocked by the MAUI0002 analyzer (single category enforced). Code review verdict LGTM meant no hard gate — recommendation is driven by Gate failure and specific test fixes needed.

Summary

The production code fix is correct — using RuntimeFeature.IsMaterial3Enabled to apply M3 theme attributes (colorOnSurface, colorOnSurfaceVariant, ripple color) in both BottomNavigationViewUtils.cs and ShellItemRenderer.cs is the right approach and consistent with existing M3 patterns in the codebase.

The Gate failed because the UI test has two bugs:

  1. [Category(UITestCategories.Shell)] — the Material3 CI pipeline only runs tests with Category=Material3, so this test never ran under M3 conditions
  2. VerifyScreenshot() without retryTimeout — the animated Material bottom sheet risks animation race conditions during screenshot capture
  3. The snapshot MoreBottomSheetUsesM3ThemedColors.png was only added to android-notch-36/ but not android/ — the emulator profile that CI actually uses

Root Cause

The test was written for the Shell category pipeline, but this is an M3-specific visual test. The Material3 Android test pipeline (API 36, UseMaterial3=true) exclusively picks up Category=Material3 tests. As a result, the test ran in the standard Shell pipeline (without M3 enabled), where the BottomSheet still uses M2 colors — causing both the "without fix" and "with fix" runs to fail identically, which explains the gate failure.

Fix Quality

Production code: ✅ Correct. The M3 branching pattern is consistent with ShellRenderer, ShellPageContainer, ShellToolbarTracker, and other M3-aware files. The CreateItemBackgroundDrawable(Context) overload cleanly encapsulates M3 ripple logic.

Test code: ❌ Needs fixes:

  1. Change [Category(UITestCategories.Shell)][Category(UITestCategories.Material3)]
  2. Change VerifyScreenshot()VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(2))
  3. Add the android-profile snapshot (copy from android-notch-36/MoreBottomSheetUsesM3ThemedColors.png or generate fresh)

Optional improvement (not blocking): Convert Issue35127 : Shell in HostApp to Issue35127 : TestShell per MAUI convention (as noted by Copilot inline review), and move tab construction to Init().


@MauiBot MauiBot added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Apr 24, 2026
@kubaflo kubaflo changed the base branch from main to inflight/current April 25, 2026 09:29
@kubaflo kubaflo merged commit 7134cae into dotnet:inflight/current Apr 25, 2026
37 checks passed
@github-actions github-actions Bot added this to the .NET 10 SR7 milestone Apr 25, 2026
PureWeen pushed a commit that referenced this pull request Apr 28, 2026
…colors when Material3 is enabled (#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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 #35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
PureWeen pushed a commit that referenced this pull request Apr 29, 2026
…colors when Material3 is enabled (#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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 #35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
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 May 6, 2026
…colors when Material3 is enabled (#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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 #35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
@kubaflo kubaflo added the s/agent-gate-failed AI could not verify tests catch the bug label May 20, 2026
github-actions Bot pushed a commit that referenced this pull request May 25, 2026
…colors when Material3 is enabled (#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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 #35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
devanathan-vaithiyanathan pushed a commit to devanathan-vaithiyanathan/maui that referenced this pull request Jun 1, 2026
…colors when Material3 is enabled (dotnet#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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#35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
@PureWeen PureWeen mentioned this pull request Jun 2, 2026
PureWeen added a commit that referenced this pull request Jun 2, 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 85 commits with various improvements,
bug fixes, and enhancements.


## Button
- [Android, iOS] Button: Fix VisualState properties not restored when
leaving custom state by @BagavathiPerumal in
#33346
  <details>
  <summary>🔧 Fixes</summary>

- [Button VisualStates do not
work](#19690)
  </details>

## CollectionView
- Fix CollectionView grid spacing updates for first row and column by
@KarthikRajaKalaimani in #34527
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] I2_Vertical grid for horizontal Item Spacing and Vertical Item
Spacing - horizontally updating the spacing only applies to the second
column](#34257)
  </details>

- CarouselView: Fix cascading PositionChanged/CurrentItemChanged events
on collection update by @praveenkumarkarunanithi in
#31275
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] CurrentItemChangedEventArgs and PositionChangedEventArgs
Not Working Properly in
CarouselView](#29529)
  </details>

- [Windows] Fixed ItemSpacing doesn't work in Carousel View by
@SubhikshaSf4851 in #30014
  <details>
  <summary>🔧 Fixes</summary>

- [ItemSpacing on CarouselView is not applied on
Windows.](#29772)
  </details>

- Fix CollectionView not scrolling to top on iOS status bar tap by
@jfversluis in #34687
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] UICollectionView ScrollToTop does not
work](#19866)
  </details>

- [iOS] Fixed CollectionView Scroll Jitter for TextType HTML Labels by
@SubhikshaSf4851 in #34383
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView scrolling is jittery when ItemTemplate contains Label
with TextType="Html" in .NET
10](#33065)
  </details>

- Fix CollectionView Header is not visible when ItemsSource is not set
and an EmptyView is set in iOS, Mac platform by @KarthikRajaKalaimani in
#34989
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Header is not visible when ItemsSource is not set and
EmptyView is set in iOS, Mac
platform](#34897)
  </details>

- [Android] Fix CollectionView EmptyView not displayed correctly by
@KarthikRajaKalaimani in #34956
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CollectionView - EmptyView not displayed
correctly](#34861)
  </details>

- [iOS] Fix CollectionView ScrollOffset not resetting when ItemsSource
changes by @SyedAbdulAzeemSF4852 in
#34488
  <details>
  <summary>🔧 Fixes</summary>

- [[IOS] CollectionView ScrollOffset does not reset when the ItemSource
is changed in iOS.](#26366)
- [Re-enable Issue7993 test on iOS/Catalyst - CollectionView scroll
position not reset when updating
ItemsSource](#33500)
  </details>

- [Revert] [iOS] Fixed CollectionView Scroll Jitter for TextType HTML
Labels by @SubhikshaSf4851 in #35341

## Core Lifecycle
- [Android] Fix NRE in ContainerView when Android Context is null during
lifecycle transition by @rmarinho in
#34901
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] NullReferenceException in NavigationRootManager.Connect
when mapping Window
content](#34900)
  </details>

## DateTimePicker
- [Android] Fix for TimePicker Dialog doesn't update the layout when
rotating the device with dialog open by @HarishwaranVijayakumar in
#31910
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TimePicker Dialog doesn't update the layout when rotating
the device with dialog
open](#31658)
  </details>

- [Android, iOS] Fixed TimePicker FlowDirection Not Applied Across
Platforms by @Dhivya-SF4094 in #30369
  <details>
  <summary>🔧 Fixes</summary>

- [TimePicker FlowDirection Not Working on All
Platforms](#30192)
  </details>

- [Windows] Fixed TimePicker CharacterSpacing issue by @SubhikshaSf4851
in #30533
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] TimePicker CharacterSpacing Property Not Working on
Windows](#30199)
  </details>

- [MacCatalyst] Fix DatePicker Opened/Closed events not being raised by
@SubhikshaSf4851 in #34970
  <details>
  <summary>🔧 Fixes</summary>

- [[MacCatalyst] DatePicker Opened and Closed events are not raised on
Mac platform](#34848)
  </details>

## Dialogalert
- [Android] Fix AlertDialog, ActionSheet, and Prompt render with
Material 2 styles when Material 3 is enabled by @HarishwaranVijayakumar
in #35121
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] AlertDialog, ActionSheet, and Prompt render with Material 2
styles when Material 3 is
enabled](#35119)
  </details>

## Docs
- docs: Add UITesting-Guide, ReleasePlanning, and ReleaseProcess to
docs/README.md index by @PureWeen in
#35195

- docs: Fix hardcoded path and add library overview in Essentials.AI
README by @PureWeen in #35194

- docs: Update branch reference from net10.0 to net11.0 in
DEVELOPMENT.md by @PureWeen in #35193

## Drawing
- Fix Path Rendering Issue Inside StackLayout When Margin Is Set by
@Shalini-Ashokan in #28071
  <details>
  <summary>🔧 Fixes</summary>

- [Path does not render if it has
Margin](#13801)
  </details>

- Fixed FlowDirection property not working on Drawable control and
GraphicsView by @Dhivya-SF4094 in
#34557
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, Windows, iOS, macOS] FlowDirection property not working on
BoxView Control](#34402)
  </details>

- [iOS & Mac] Fix image tile misalignment in GraphicsView ImagePaint by
@SubhikshaSf4851 in #34935
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Image resized with ResizeMode.Fit is not rendered correctly in
GraphicsView](#34755)
  </details>

- Fix Shadow does not honour Styles by @KarthikRajaKalaimani in
#35081
  <details>
  <summary>🔧 Fixes</summary>

- [Shadow does not honour
Styles](#19560)
  </details>

## Entry
- [iOS/macCatalyst] Fix Entry and Editor BackgroundColor reset when set
to null by @Shalini-Ashokan in #34741
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Maccatalyst] Entry & Editor BackgroundColor not reset to
Null](#34611)
  </details>

- [Windows] Fix password Entry crash when setting text on empty field by
@praveenkumarkarunanithi in #33891
  <details>
  <summary>🔧 Fixes</summary>

- [[WinUI] Password Obfuscation causes unhandled
crash](#33334)
  </details>

## Essentials
- [Essentials] Use mean sea level altitude on Android API 34+ by
@KitKeen in #35097
  <details>
  <summary>🔧 Fixes</summary>

- [Add support for MslAltitudeMeters in Essentials Geolocation on
Android](#27554)
  </details>

## Flyout
- Fixed Flyout Not Displayed on Android When FlyoutWidth Is Set Only for
Desktop via OnIdiom by @NanthiniMahalingam in
#29028
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] FlyoutWidth with OnIdiom shows no
flyout](#13243)
  </details>

- Revert "[Windows] Fix Flyout/Locked mode header collapse regression
causing UI test failures on candidate branch" by @kubaflo in
#35339

- Revert "Revert "[Windows] Fix Flyout/Locked mode header collapse
regression causing UI test failures on candidate branch"" by @kubaflo in
#35342

## Flyoutpage
- Fix [Android] Title of FlyOutPage is not updating anymore after
showing a NonFlyOutPage by @KarthikRajaKalaimani in
#34839
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Title of FlyOutPage is not updating anymore after showing a
NonFlyOutPage](#33615)
  </details>

## Label
- [iOS] Fix span Tap gesture on wrapped Label lines in iOS 26+ by
@SubhikshaSf4851 in #34640
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS]Span TapGestureRecognizer does not work on the second line of
the span, if the span is wrapped to the next
line](#34504)
  </details>

## Layout
- Fixed Stacklayout is not rendered when clip is applied and StackLayout
placed child to the Border control in iOS/ Mac platform by
@KarthikRajaKalaimani in #33330
  <details>
  <summary>🔧 Fixes</summary>

- [[Mac/iOS] StackLayout fails to render content while applying Clip,
and the layout is placed inside a Border with Background in .NET
MAUI](#33241)
  </details>

## Map
- Fix Changing Location on a Pin does nothing by @NirmalKumarYuvaraj in
#30201
  <details>
  <summary>🔧 Fixes</summary>

- [[Maps] [Regression from Xamarin.Forms.Maps] Changing Location on a
Pin does nothing](#12916)
  </details>

## Mediapicker
- [iOS] Fix HEIC images picked via PickPhotosAsync not displayed by
@HarishwaranVijayakumar in #34954
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [Regression] HEIC images picked via PickPhotosAsync not
displayed](#34953)
  </details>

- [Android] Fix MediaPicker.PickPhotosAsync UnauthorizedAccessException
on API 28 and below by @HarishwaranVijayakumar in
#34981
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotos fails to modify image, tries to load original
source, fails to load source on Android
9.0](#34889)
  </details>

## Pages
- [iOS] Fix ContentPage with ToolbarItem Clicked event leaks when
presented as modal page by @devanathan-vaithiyanathan in
#35009
  <details>
  <summary>🔧 Fixes</summary>

- [ContentPage with ToolbarItem Clicked event leaks when presented as
modal page](#34892)
  </details>

## Platform
- [Android] Fix OnBackButtonPressed not invoked for Shell by
@Dhivya-SF4094 in #35150
  <details>
  <summary>🔧 Fixes</summary>

- [On Screen Back Button Does Not Fire OnBackButtonPressed in
Android](#9095)
  </details>

## RadioButton
- Fix RadioButtonGroup not working with ContentView by @Dhivya-SF4094 in
#34781
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButtonGroup not working with
ContentView](#34759)
  </details>

- [Windows] Fix for RadioButton BorderColor and BorderWidth not updated
at runtime by @SyedAbdulAzeemSF4852 in
#28335
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton Border color not working for focused visual
state](#15806)
  </details>

- [iOS] Fix RadioButton BackgroundColor bleeding outside CornerRadius by
@SyedAbdulAzeemSF4852 in #34844
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] RadioButton BackgroundColor bleeds outside
CornerRadius](#34842)
  </details>

## SafeArea
- [iOS] Fix stale bottom safe area after changing SafeAreaEdges with
keyboard open by @praveenkumarkarunanithi in
#35083
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] ContentPage bottom has white space after changing SafeAreaEdges
while keyboard is open](#34846)
  </details>

## ScrollView
- [Windows] Fix Preserve ScrollView offsets when Orientation changes to
Neither by @SubhikshaSf4851 in #34827
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] ScrollView offsets do not preserve when Orientation changes
to Neither](#34671)
  </details>

## Searchbar
- [iOS] Fix SearchBar unexpected left margin in iPad windowed mode on 26
Version by @SubhikshaSf4851 in #34704
  <details>
  <summary>🔧 Fixes</summary>

- [in iPad windowed mode SearchBar adds left margin equivaltent to
SafeAreaInsets when placed inside
grid](#34551)
  </details>

## Shell
- [Windows] Fix for Shell.FlyoutBehavior="Flyout" forces the title
height space above the tab bar even if the page title is empty by
@BagavathiPerumal in #30382
  <details>
  <summary>🔧 Fixes</summary>

- [(Windows) Shell.FlyoutBehavior="Flyout" forces the title height space
above the tab bar even if the page title is
empty](#30254)
  </details>

- Fix Shell flyout items scrolling behind FlyoutHeader on iOS by @Qythyx
in #34936
  <details>
  <summary>🔧 Fixes</summary>

- [Shell flyout items scroll behind FlyoutHeader on
iOS](#34925)
  </details>

- [iOS, Mac] Fix Shell.CurrentState.Location stale in OnNavigated after
GoToAsync by @Vignesh-SF3580 in
#34880
  <details>
  <summary>🔧 Fixes</summary>

- [Shell.OnNavigated not called for route
navigation](#34662)
  </details>

- [iOS26]Fix
BackButtonBehavior_IsEnabled_False_BackButtonDoesNotNavigate UITest
fails by @devanathan-vaithiyanathan in
#34890
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] BackButtonBehavior_IsEnabled_False_BackButtonDoesNotNavigate
test fails with
TimeoutException](#34771)
  </details>

- [iOS] Fix Shell page memory leak when using TitleView with x:Name by
@Shalini-Ashokan in #35082
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Title view memory
leak](#34975)
  </details>

- [Material 3] Fix Material 2 color flash in AppBar when switching tabs
for the first time by @Dhivya-SF4094 in
#35117
  <details>
  <summary>🔧 Fixes</summary>

- [Material 3: AppBar briefly displays Material 2 colors when switching
tabs for the first time](#35116)
  </details>

- [Android] Fix Shell/TabbedPage "More" BottomSheet uses hard-coded M2
colors when Material3 is enabled by @HarishwaranVijayakumar in
#35129
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell/TabbedPage "More" BottomSheet uses hard-coded M2
colors when Material3 is
enabled](#35127)
  </details>

- [Android] Shell: Fix top-tab unselected text visibility in Material 3
light theme by @SyedAbdulAzeemSF4852 in
#35128
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell top-tab unselected text appears too faint in Material
3 light theme](#35125)
  </details>

- Fix Shell.Items.Clear() memory leak by disconnecting child handlers on
removal (#34898) by @Shalini-Ashokan in
#35031
  <details>
  <summary>🔧 Fixes</summary>

- [Shell.Items.Clear() does not disconnect handlers
correctly](#34898)
  </details>

- [iOS&Mac] Fix Shell SearchHandler Query update on Initial load by
@SubhikshaSf4851 in #35008
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS&Mac] Shell SearchHandler Query not shown in search bar on
initial load](#35005)
  </details>

## SwipeView
- [iOS,MacCatalyst] Fix for SwipeView.Open() throwing an
ArgumentException on the second programmatic call by @BagavathiPerumal
in #34982
  <details>
  <summary>🔧 Fixes</summary>

- [[net 11.0][iOS,MacCatalyst] SwipeView.Open() throws ArgumentException
on second programmatic
call](#34917)
  </details>

- [Android/iOS] Fix SwipeItem visibility change causing double command
execution in Execute mode by @praveenkumarkarunanithi in
#35087
  <details>
  <summary>🔧 Fixes</summary>

- [Changing visibility on an SwipeItem causes multiple items to be
executed](#7580)
  </details>

## Switch
- [iOS] Fix Switch ThumbColor reset on iOS 26+ theme changes. by
@Shalini-Ashokan in #33953
  <details>
  <summary>🔧 Fixes</summary>

- [Switch ThumbColor not Initialized Using VisualStateManager on iOS
Device](#33783)
- [I9-On macOS 26.2, the "Animate scroll" button is white by default on
iOS and Maccatalyst
platforms.](#33767)
  </details>

## TabbedPage
- [Windows] TabbedPage: Refresh layout when NavigationView size changes
by @BagavathiPerumal in #26217
  <details>
  <summary>🔧 Fixes</summary>

- [TabbedPage - ScrollView not allowing scrolling when it
should](#26103)
- [TabbedPage App on resize hides page bottom
content](#11402)
- [Grid overflows child ContentPage of parent TabbedPage on initial load
and when resizing on
Windows](#20028)
  </details>

- [Android] Material 3 Fixed BottomNavigationView overflowing in Tabbed
page by @NirmalKumarYuvaraj in #35064
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Material3 - TabbedPage bottom tabs overflowing the
contents](#35063)
  </details>

- [Windows] Fix for Multiple Tabs Being Selected in WinUI TabbedPage by
@SyedAbdulAzeemSF4852 in #33312
  <details>
  <summary>🔧 Fixes</summary>

- [WinUI TabbedPage can have multiple tabs
selected](#31799)
  </details>

## Theming
- [iOS] Fix StaticResource Hot Reload crash on iOS by @StephaneDelcroix
in #35020
  <details>
  <summary>🔧 Fixes</summary>

- [The maui app quit and no errors in error list after editing
ResourceDictionary XAML file on iOS Simulator with MAUI SR6
10.0.60](#35018)
  </details>

## Toolbar
- [Windows] Fix for CS1061 build error caused by missing
HasMenuBarContent property in MauiToolbar by @BagavathiPerumal in
#35040

## Tooling
- Fix VisualStateGroups duplicate name crash with implicit styles
(#34716) by @StephaneDelcroix in
#34719
  <details>
  <summary>🔧 Fixes</summary>

- [SourceGen: VisualStateManager.VisualStateGroups causes 'Names must be
unique' at startup](#34716)
  </details>

## WebView
- Refactor the HybridWebView and properly support complex parameters by
@mattleibow in #32491

- [Android] Fix WebView scrolling inside ScrollView by @Shalini-Ashokan
in #33133
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] WebView's content does not scroll when placed inside a
ScrollView](#32971)
  </details>


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

- [Windows] Fix Narrator announcing ContentView children twice when
Description is set by @praveenkumarkarunanithi in
#33979
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] SemanticProperties.Description announced twice when set on
focusable container cell (Label
inside)](#33373)
  </details>

</details>

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

- [Testing] SafeArea Feature Matrix Test Cases for ContentPage by
@TamilarasanSF4853 in #34877
- [Windows] Fix CollectionView ScrollTo related test cases failed in CI
by @HarishwaranVijayakumar in #34907
  <details>
  <summary>🔧 Fixes</summary>

- [[Testing][Windows]CollectionView ScrollTo related test cases failed
in CI](#34772)
  </details>
- [Testing] Fixed Build error on inflight/ candidate PR 35234 by
@HarishKumarSF4517 in #35241
- Fix CI for
ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen
test failure in May 4th Candidate by @devanathan-vaithiyanathan in
#35307
- [Windows] Fix Flyout/Locked mode header collapse regression causing UI
test failures on candidate branch by @BagavathiPerumal in
#35312
- [iOS/macCatalyst] [Candidate Fix] Editor shadow and theme regression
caused by BackgroundColor reset on initial handler connection by
@Shalini-Ashokan in #35343
- [Testing] Fixed UI test image failure in PR 35234 - [30/03/2026]
Candidate - 1 by @HarishKumarSF4517 in
#35325
- [iOS] Fix ShellFeatureMatrix test failures on candidate branch by
@Vignesh-SF3580 in #35346
- [Windows] Fix Issue29529VerifyPreviousPositionOnInsert test failure on
candidate branch by @praveenkumarkarunanithi in
#35398
- [Android] [Candidate Fix] Shell: Fix handler disconnect timing to
preserve WebView navigation and memory leak fix by @Shalini-Ashokan in
#35417
- [Testing]Revert 'Fix Preserve ScrollView offsets when Orientation
changes to Neither' by @TamilarasanSF4853 in
#35412
- [Windows] Fix VerifyAllIndicatorDotsShowShadowsWhenIndicatorSize test
failure on candidate branch by @praveenkumarkarunanithi in
#35458
- [Testing] Fixed test failure in PR 35234 - [05/08/2026] Candidate by
@TamilarasanSF4853 in #35362
- [Testing] Fixed test failure in PR 35234 - [05/04/2026] Candidate - 3
by @TamilarasanSF4853 in #35639

</details>

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

- [UIKit] Avoid useless measure invalidation propagation cycles by
@albyrock87 in #33459
- BindableObject property access micro-optimizations by @albyrock87 in
#33584
- Extract filename from DisplayName and add extension if missing by
@mattleibow in #35050
- [core] Add keyed-DI screenshot extensibility for 3rd-party platform
backends by @Redth in #35096
  <details>
  <summary>🔧 Fixes</summary>

- [`ViewExtensions.CaptureAsync(IView)` and `IPlatformScreenshot` need
extensibility for third-party platform
backends](#34266)
  </details>
- Fix MainThread throwing on custom platform backends by @Redth in
#35070
  <details>
  <summary>🔧 Fixes</summary>

- [`MainThread.BeginInvokeOnMainThread` throws on custom platform
backends - Common UI-thread marshaling pattern crashes; `Dispatcher`
works but isn't the documented/recommended
path](#34101)
  </details>
- Tests: Add 11 missing UnitConverters unit tests by @PureWeen in
#35191

</details>

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

Fixes #7580, Fixes #9095, Fixes #11402, Fixes #12916, Fixes #13243,
Fixes #13801, Fixes #15806, Fixes #19560, Fixes #19690, Fixes #19866,
Fixes #20028, Fixes #26103, Fixes #26366, Fixes #27554, Fixes #29529,
Fixes #29772, Fixes #30192, Fixes #30199, Fixes #30254, Fixes #31658,
Fixes #31799, Fixes #32971, Fixes #33065, Fixes #33241, Fixes #33334,
Fixes #33373, Fixes #33500, Fixes #33615, Fixes #33767, Fixes #33783,
Fixes #34101, Fixes #34257, Fixes #34266, Fixes #34402, Fixes #34504,
Fixes #34551, Fixes #34611, Fixes #34662, Fixes #34671, Fixes #34716,
Fixes #34755, Fixes #34759, Fixes #34771, Fixes #34772, Fixes #34842,
Fixes #34846, Fixes #34848, Fixes #34861, Fixes #34889, Fixes #34892,
Fixes #34897, Fixes #34898, Fixes #34900, Fixes #34917, Fixes #34925,
Fixes #34953, Fixes #34975, Fixes #35005, Fixes #35018, Fixes #35063,
Fixes #35116, Fixes #35119, Fixes #35125, Fixes #35127

</details>

**Full Changelog**:
main...inflight/candidate
@PureWeen PureWeen modified the milestones: .NET 10 SR7, .NET 10 SR8 Jun 11, 2026
Shalini-Ashokan pushed a commit to Shalini-Ashokan/maui that referenced this pull request Jun 15, 2026
…colors when Material3 is enabled (dotnet#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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#35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
Dhivya-SF4094 pushed a commit to Dhivya-SF4094/maui that referenced this pull request Jun 15, 2026
…colors when Material3 is enabled (dotnet#35129)

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

- When Material 3 is enabled (`<UseMaterial3>true</UseMaterial3>`), the
Shell/TabbedPage "More" overflow `BottomSheetDialog` on Android still
uses Material 2 styling — square corners, hard-coded black text, gray
icons, and white backgrounds — instead of M3-styled rounded corners,
theme-aware colors, and proper ripple effects.

### Root Cause of the issue:

- The `CreateMoreBottomSheet()` method in both
`BottomNavigationViewUtils.cs` and `ShellItemRenderer.cs` hard-codes M2
colors for item rows (white background, black text, gray icons) without
checking `RuntimeFeature.IsMaterial3Enabled`.


### Description of Change

<!-- Enter description of the fix in this section -->
**Material 3 theming improvements:**

* Updated the background drawable for BottomSheet items to use M3 ripple
and background colors when Material 3 is enabled by introducing a new
`CreateItemBackgroundDrawable(Context)` method and using it
conditionally. (`ShellItemRenderer.cs`, `BottomNavigationViewUtils.cs`)
* Changed icon tint and text color assignments in the BottomSheet to use
M3 theme attributes (`colorOnSurfaceVariant` for icons, `colorOnSurface`
for text) when Material 3 is enabled, falling back to previous
hard-coded values otherwise. (`ShellItemRenderer.cs`,
`BottomNavigationViewUtils.cs`)

**Testing enhancements:**

* Added a new sample page (`Issue35127`) to demonstrate and manually
verify the correct theming of the "More" BottomSheet with six tabs.
(`Issue35127.cs`)
* Introduced a corresponding automated UI test to ensure the BottomSheet
uses M3 themed colors when Material 3 is enabled. (`Issue35127.cs` in
test project)

### 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#35127

### Tested the behaviour in the following platforms

- [ ] - Windows 
- [x] - Android
- [ ] - iOS
- [ ] - Mac

| Before | After |
|----------|----------|
| <img
src="https://github.com/user-attachments/assets/7aee800f-c08d-479b-90db-204ffaee3af9">|
<img
src="https://github.com/user-attachments/assets/6699f69d-7fc7-4afb-b8af-6ef031a3fc72">
|


<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Android] Shell/TabbedPage "More" BottomSheet uses hard-coded M2 colors when Material3 is enabled

6 participants