Skip to content

[release/10.0.1xx-sr6] [Android] Material 3 Fixed BottomNavigationView overflowing in Tabbed page#35074

Merged
PureWeen merged 2 commits intorelease/10.0.1xx-sr6from
backport/pr-35064-to-release/10.0.1xx-sr6
Apr 23, 2026
Merged

[release/10.0.1xx-sr6] [Android] Material 3 Fixed BottomNavigationView overflowing in Tabbed page#35074
PureWeen merged 2 commits intorelease/10.0.1xx-sr6from
backport/pr-35064-to-release/10.0.1xx-sr6

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented Apr 22, 2026

Backport of #35064 to release/10.0.1xx-sr6

/cc @sheiksyedm @NirmalKumarYuvaraj

Output

Before After
image image

@PureWeen
Copy link
Copy Markdown
Member

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

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 2 pipeline(s).

@PureWeen PureWeen added this to the .NET 10 SR6 milestone Apr 22, 2026
@MauiBot
Copy link
Copy Markdown
Collaborator

MauiBot commented Apr 22, 2026

🤖 AI Summary

👋 @github-actions[bot] — new AI review results are available. Please review the latest session below.

📊 Review Sessione27d4c8 · added test snapshot · 2026-04-23 10:19 UTC
🚦 Gate — Test Before & After Fix

Test Verification Report

Date: 2026-04-22 20:22:32 | Platform: ANDROID | Status: ❌ FAILED

Summary

Check Expected Actual Result
Tests WITHOUT fix FAIL FAIL
Tests WITH fix PASS FAIL

❌ Final Verdict

VERIFICATION FAILED

Tests FAILED with fix (should have passed)

  • The fix doesn't resolve the issue
  • Tests may be broken or testing something else

Possible causes:

  1. Wrong fix files specified
  2. Tests don't actually test the fixed behavior
  3. The issue was already fixed in base branch
  4. Build caching - try clean rebuild
  5. Test needs different setup or conditions

Configuration

Platform: android
Test Filter: Issue35063
Base Branch: release/10.0.1xx-sr6
Merge Base: ee171ce

Fix Files

  • src/Controls/src/Core/Platform/Android/TabbedPageManager.cs

Test Results Details

Test Run 1: WITHOUT Fix

Expected: Tests should FAIL (bug is present)
Actual: Tests FAILED ✅

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (without fix)
  Determining projects to restore...
  Restored /home/vsts/work/1/s/src/Core/maps/src/Maps.csproj (in 9.26 sec).
  Restored /home/vsts/work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 147 ms).
  Restored /home/vsts/work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 20 ms).
  Restored /home/vsts/work/1/s/src/Essentials/src/Essentials.csproj (in 40 ms).
  Restored /home/vsts/work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 9.82 sec).
  Restored /home/vsts/work/1/s/src/Core/src/Core.csproj (in 94 ms).
  Restored /home/vsts/work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 48 ms).
  Restored /home/vsts/work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 37 ms).
  Restored /home/vsts/work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 51 ms).
  Restored /home/vsts/work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 46 ms).
  Restored /home/vsts/work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 73 ms).
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  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.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Maps.dll
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Foldable.dll
/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]

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:16:39.69
* 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.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.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.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
  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.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.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:08:25.55
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


Test Run 2: WITH Fix

Expected: Tests should PASS (bug is fixed)
Actual: Tests FAILED ❌

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (with fix)
  Determining projects to restore...
  All projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.60+azdo.13910935
  Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Maps.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.60+azdo.13910935
  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.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60+azdo.13910935
  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:06:48.41
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


Logs

  • Full verification log: /home/vsts/work/1/s/CustomAgentLogsTmp/PRState/35074/PRAgent/gate/verify-tests-fail/verification-log.txt
  • Test output without fix: /home/vsts/work/1/s/CustomAgentLogsTmp/PRState/35074/PRAgent/gate/verify-tests-fail/test-without-fix.log
  • Test output with fix: /home/vsts/work/1/s/CustomAgentLogsTmp/PRState/35074/PRAgent/gate/verify-tests-fail/test-with-fix.log
  • UI test logs: CustomAgentLogsTmp/UITests/

🔍 Pre-Flight — Context & Validation

Issue: #35063 - [Android] Material3 - TabbedPage bottom tabs overflowing the contents
PR: #35074 - [release/10.0.1xx-sr6] [Android] Material 3 Fixed BottomNavigationView overflowing in Tabbed page (Backport of #35064)
Platforms Affected: Android only
Files Changed: 1 implementation, 3 test (2 .cs + 1 snapshot PNG)

Key Findings

  • Backport PR targeting release/10.0.1xx-sr6 milestone (.NET 10 SR6)
  • One-line fix in TabbedPageManager.SetTabLayout(): uses m3_bottom_nav_min_height resource when Material3 is enabled, design_bottom_navigation_height otherwise
  • Material3's bottom nav bar has a different height than M2; using M2 dimension with M3 causes content to be obscured below the tab bar
  • Pattern is consistent with existing RuntimeFeature.IsMaterial3Enabled usage throughout the Android platform code (13+ other usages)
  • Test uses UITestCategories.Material3, screenshot-based test with snapshot in android-notch-36/ directory
  • Gate FAILED: tests failed WITH fix applied — likely a snapshot mismatch (screenshot test with a new baseline image that doesn't match the actual render)

Code Review Summary

Verdict: LGTM
Confidence: high
Errors: 0 | Warnings: 0 | Suggestions: 1

Key code review findings:

  • 💡 TabbedPageManager.cs:271 — Minor readability: could separate resource ID selection into a variable to avoid repeated _context.Context.Resources.GetDimensionPixelSize(...) in ternary (functional correctness not affected)

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35074 Use m3_bottom_nav_min_height dimension when IsMaterial3Enabled, fallback to design_bottom_navigation_height ❌ FAILED (Gate) TabbedPageManager.cs Screenshot test failing — snapshot mismatch likely

🔬 Code Review — Deep Analysis

Code Review — PR #35074

Independent Assessment

What this changes: In TabbedPageManager.SetTabLayout(), the bottom content margin for bottom-tab placement previously always used design_bottom_navigation_height (the legacy Material2 resource). The change conditionally selects m3_bottom_nav_min_height when RuntimeFeature.IsMaterial3Enabled is true, falling back to the original value otherwise. A HostApp reproducer (Issue35063) and a Material3-categorized screenshot test are also added.

Inferred motivation: Material3's bottom navigation bar has a different height than the M2 design_bottom_navigation_height. Using the M2 dimension under M3 results in an incorrect bottom margin that doesn't fully clear the nav bar, causing content to be obscured/overflow underneath it.


Reconciliation with PR Narrative

Author claims: Backport of #35064. Fixes TabbedPage bottom tabs overflowing content when Material3 is enabled on Android. Switches to m3_bottom_nav_min_height for M3, keeps design_bottom_navigation_height for legacy.

Agreement: The code exactly matches the description. The before/after screenshots in the PR confirm the visual regression. No disagreement.


Findings

💡 Suggestion — Readability: duplicate _context.Context.Resources in ternary

TabbedPageManager.cs:271

The ternary is structured as:

SetContentBottomMargin(RuntimeFeature.IsMaterial3Enabled
    ? _context.Context.Resources.GetDimensionPixelSize(Resource.Dimension.m3_bottom_nav_min_height)
    : _context.Context.Resources.GetDimensionPixelSize(Resource.Dimension.design_bottom_navigation_height));

Since only one branch executes at runtime, this is not a JNI double-access bug. However, the shared _context.Context.Resources.GetDimensionPixelSize(...) call structure reads more clearly if the resource ID selection is separated:

var dimensionId = RuntimeFeature.IsMaterial3Enabled
    ? Resource.Dimension.m3_bottom_nav_min_height
    : Resource.Dimension.design_bottom_navigation_height;
SetContentBottomMargin(_context.Context.Resources.GetDimensionPixelSize(dimensionId));

This is a minor readability note. The current code is functionally correct and consistent with how the codebase handles one-time ternary Android resource lookups.


Devil's Advocate

  • "Is m3_bottom_nav_min_height always available?" — The resource is present in the Material3 library version used by the project.
  • "Could this regress non-M3 paths?" — No. The else branch preserves the original design_bottom_navigation_height, and the pre-existing if (_tabplacementId == id) return; guard is still in place to prevent redundant re-application.
  • "Is the snapshot in the right directory?" — Yes. All Material3 Android snapshots live in android-notch-36/, not android/. The new baseline follows that convention exactly.
  • "Does the test verify the right thing?"VerifyScreenshot() after WaitForElement("Label35063_1") catches visual overflow because the full-screen comparison will reflect whether the bottom nav bar occludes content. This is appropriate for a regression screenshot test.
  • "Is #if ANDROID wrapping the whole test file acceptable?" — Yes. This pattern is used widely for Android-only issues, and PlatformAffected.Android on the HostApp page is consistent.

CI Status

All required checks — maui-pr, maui-pr-devicetests, maui-pr-uitests — are passing. ✅


Verdict: LGTM

Confidence: high

The one-line fix is minimal, correct, and follows the established RuntimeFeature.IsMaterial3Enabled branching pattern used throughout the Android platform code. The test is appropriately scoped to Android, categorized under Material3, and backed by a correctly-placed snapshot baseline. CI is fully green. The only note is a minor readability suggestion on the ternary expression.


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35074 Use m3_bottom_nav_min_height dimension when M3 enabled ❌ FAILED (Gate) TabbedPageManager.cs Snapshot in wrong dir (android-notch-36/ vs android/)
1 try-fix (claude-opus-4.6) Dynamic BottomNavigationView height via IOnLayoutChangeListener; position-based test assertions ✅ PASS TabbedPageManager.cs, Issue35063.cs (both) Theme-agnostic; eliminates snapshot dir issue
2 try-fix (claude-sonnet-4.6) Force-measure BottomNavigationView (Measure(UNSPECIFIED)) to get intrinsic height; geometry test ✅ PASS TabbedPageManager.cs, Issue35063.cs (both) No explicit M3 branch; view self-reports height
3 try-fix (gpt-5.3-codex) Use BottomNavigationView.MinimumHeight (theme-driven) with fallback; position-based test ✅ PASS TabbedPageManager.cs, Issue35063.cs (both) Pure theme query, no explicit M3 check
4 try-fix (gpt-5.4) OnGlobalLayoutListener on root view; updates margin from actual navigationlayout_bottomtabs height ✅ PASS TabbedPageManager.cs, Issue35063.cs (both) Post-layout callback approach
5 try-fix (cross-poll / claude-opus-4.6) CoordinatorLayout XML inset/dodge: remove SetContentBottomMargin() entirely; layout auto-handles it ✅ PASS navigationlayout.axml, TabbedPageManager.cs (-15 lines), Issue35063.cs (both) Most elegant — no code logic needed

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 Yes CoordinatorLayout inset/dodge → ran as Attempt 5, PASSED
claude-sonnet-4.6 2 Yes Same CoordinatorLayout approach → covered by Attempt 5
gpt-5.3-codex 2 Yes Same CoordinatorLayout approach → covered by Attempt 5
gpt-5.4 2 Yes Same CoordinatorLayout approach → covered by Attempt 5
claude-sonnet-4.6 3 Yes WindowInsets propagation (minor variant of existing approaches)
gpt-5.3-codex 3 Yes OnApplyWindowInsetsListener (minor variant of Attempt 4)
gpt-5.4 3 Yes Subclass BottomNavigationView + OnSizeChanged (minor variant of Attempt 1)
claude-opus-4.6 3 No NO NEW IDEAS

Exhausted: Yes — round 3 suggestions are minor variations of already-passing approaches
Selected Fix: Candidate 5 (CoordinatorLayout XML inset/dodge) — Removes all manual margin logic by declaring CoordinatorLayout's built-in dependency between bottomtabs and content views. Most elegant, most robust, eliminates the fix entirely at the code level. Future-proof against any M2/M3/Mnext height changes. Also requires fixing the test to use position assertions (removes VerifyScreenshot dependency).


📋 Report — Final Recommendation

⚠️ Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Issue #35063 — Android Material3 TabbedPage bottom tab overflow
Code Review LGTM (high) 0 errors, 0 warnings, 1 suggestion
Gate ❌ FAILED android — screenshot baseline missing from android/ dir
Try-Fix ✅ COMPLETE 5 attempts, 5 passing (Candidate 5 selected as best)
Report ✅ COMPLETE

Code Review Impact on Try-Fix

Code review returned LGTM with high confidence — no errors or warnings to address. The single 💡 suggestion (readability: split the ternary's Resources.GetDimensionPixelSize() call into a variable) was informational only and did not influence fix approaches. Since code review found no issues, the try-fix models explored purely alternative strategies to address the gate failure (wrong snapshot directory) rather than any code correctness concern.

Summary

The PR's code fix is logically correct — using m3_bottom_nav_min_height instead of design_bottom_navigation_height for Material3 is the right dimension. However, the gate failed because the screenshot test baseline was committed to android-notch-36/ but the test environment (non-notch Android) looks in android/. The test sees "Baseline snapshot not yet created: .../snapshots/android/Material3_TabbedPage_BottomTabsOverflowingContents.png" and fails.

Try-Fix exploration found 5 independent passing fixes, all better than the PR's approach:

  • The best alternative (Candidate 5) uses CoordinatorLayout's built-in layout_insetEdge/layout_dodgeInsetEdges XML mechanism to eliminate SetContentBottomMargin() entirely — the layout system automatically keeps content above the bottom nav bar regardless of M2/M3/future height. This is more elegant, more robust, and removes ~15 lines of code.

  • All passing candidates also changed the test from VerifyScreenshot() to geometry/position-based assertions, which is more resilient and avoids snapshot directory mismatches.

Root Cause

  1. Bug: TabbedPageManager.SetTabLayout() always used design_bottom_navigation_height (M2 resource) for bottom content margin, which is smaller than M3's actual nav bar height (m3_bottom_nav_min_height), causing the nav bar to overlap page content.
  2. Test failure: The new screenshot baseline was added to android-notch-36/ but the CI/gate test environment uses the android/ baseline directory. The test fails with "Baseline snapshot not yet created" rather than a visual mismatch.

Fix Quality

PR's fix: Logically correct but fragile — it hardcodes a resource name tied to a specific Material Design version. Future theme changes could break this again. The test also has a snapshot placement bug (wrong directory). This is actionable feedback: the snapshot needs to go in android/ too, OR the test should be converted to geometry assertions.

Best alternative (Candidate 5): CoordinatorLayout XML inset mechanism removes all margin logic. The content area automatically avoids the bottom nav bar based on its actual rendered size. Position-based test assertions are used instead of screenshot comparison, eliminating the snapshot directory issue entirely.

Recommendation for PR author:

  1. Either add the snapshot baseline to android/ as well (so the screenshot test passes in both device profiles), OR convert the test to position-based assertions (more robust, recommended)
  2. Consider the CoordinatorLayout approach as a more future-proof alternative to the ternary dimension lookup

🧪 UI Tests — Category Detection & Results

Build #1391775 | ✅ passed | 319/319 passed (100%)

🎯 Detected categories: Material3 — ran 1 of 143 matrix cells (skipped 142)

Results by Platform

Platform Passed Total
✅ Material3 Android (API 36) 319 319

@kubaflo kubaflo enabled auto-merge (squash) April 23, 2026 11:08
@PureWeen PureWeen disabled auto-merge April 23, 2026 13:57
@PureWeen PureWeen merged commit e4bd44d into release/10.0.1xx-sr6 Apr 23, 2026
159 of 167 checks passed
@PureWeen PureWeen deleted the backport/pr-35064-to-release/10.0.1xx-sr6 branch April 23, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-tabbedpage TabbedPage material3 partner/syncfusion Issues / PR's with Syncfusion collaboration 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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants