[Testing] Feature Matrix UITest Cases for Shell Tabbed Page#33159
[Testing] Feature Matrix UITest Cases for Shell Tabbed Page#33159kubaflo merged 9 commits intodotnet:inflight/currentfrom
Conversation
|
/rebase |
b1144d2 to
cb83be1
Compare
There was a problem hiding this comment.
Pull request overview
This PR introduces a comprehensive Shell Feature Matrix test suite to validate Shell and Shell Tabbed Page functionality in .NET MAUI. It adds interactive test pages and automated UI tests to verify various Shell properties including TabBar colors, visibility, enabled states, and flow direction across different platforms.
Key Changes
- Created a Shell Feature Matrix test infrastructure with a main landing page and tabbed control page containing 12 tabs
- Implemented 20 automated UI tests validating Shell properties like TabBarBackgroundColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarDisabledColor, TabBarIsVisible, IsVisible, IsEnabled, and FlowDirection
- Added a view model and options page to enable dynamic testing of Shell properties through data binding
Reviewed changes
Copilot reviewed 9 out of 46 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| ShellTabbedPageFeatureTests.cs | Automated UI test cases for Shell Tabbed Page features with platform-specific conditional compilation |
| ShellViewModel.cs | View model implementing INotifyPropertyChanged for Shell property bindings |
| ShellTabbedOptionsPage.xaml.cs | Code-behind for options page enabling property configuration through UI interactions |
| ShellTabbedOptionsPage.xaml | XAML layout for options page with controls to modify Shell properties |
| ShellTabbedControlPage.xaml.cs | Code-behind for main Shell page with navigation and data binding setup |
| ShellTabbedControlPage.xaml | Shell definition with 12 tabs demonstrating various Shell features |
| ShellFeaturePage.xaml.cs | Entry point navigation page for Shell Feature Matrix |
| ShellFeaturePage.xaml | Landing page with button to launch Shell Tabbed tests |
| CorePageView.cs | Registration of Shell Feature Matrix in the test gallery |
...trols/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml.cs
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml
Outdated
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml
Outdated
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml
Outdated
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml
Show resolved
Hide resolved
src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellTabbedPageFeatureTests.cs
Outdated
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedOptionsPage.xaml
Outdated
Show resolved
Hide resolved
...Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedOptionsPage.xaml
Outdated
Show resolved
Hide resolved
🤖 AI Summary📊 Expand Full Review🔍 Pre-Flight — Context & Validation📝 Review Session — addressed copilot suggestions ·
|
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| N/A | N/A | Test infrastructure only | N/A | 46 files | No fixes proposed |
🚦 Gate — Test Verification
📝 Review Session — addressed copilot suggestions · 76155b9
Result: ✅ PASSED
Platform: Android
Mode: Test suite run (test-only PR — no fix to revert/restore)
Test Execution Summary
- Build: ✅ SUCCESS
- Total tests run: 16
- Passed: 16
- Failed: 0
Shell Tabbed Page Tests (All Passed)
- ✅ VerifyShell_NavigatingTabs
- ✅ VerifyShell_TabBarUnselectedColor
- ✅ VerifyShell_TabBarForegroundColorAndUnSelectedColor
- ✅ VerifyShell_TabBarForegroundColorAndTitleColor
- ✅ VerifyShell_TabBarTitleColorAndUnSelectedColor
- ✅ VerifyShell_TabBarTitleColor
- ✅ VerifyShell_CurrentItemTitleBinding
- ✅ VerifyShell_IsVisible
- ✅ VerifyShell_TabBarDisabledColor
- ✅ VerifyShell_TabBarIsEnabled
- ✅ VerifyShell_TabBarForegroundColor
- ✅ VerifyShell_TabBarBackgroundColor
- ✅ VerifyShell_TabBarBackgroundColorAndForegroundColor
- ✅ VerifyShell_TabBarBackgroundColorAndTitleColor
- ✅ VerifyShell_TabBarBackgroundColorAndUnSelectedColor
- ✅ VerifyShell_TabBarBackgroundColorSetToNull
Gate Notes
Since this is a test-only PR (no bug fix), the standard "FAIL without fix / PASS with fix" verification does not apply. The tests were run directly to verify they compile and execute correctly on Android. All tests passed successfully.
Gate Status: ✅ PASSED
🔧 Fix — Analysis & Comparison
📝 Review Session — addressed copilot suggestions · 76155b9
Phase 3 Status: NOT APPLICABLE
Reason: This is a test infrastructure PR, not a bug fix PR.
This PR adds:
- New test pages for Shell Feature Matrix
- Automated UI tests (20 tests)
- Test infrastructure (view models, options pages)
- Screenshot baselines
There is NO implementation fix to explore or compare.
Phase 3 (try-fix exploration) is designed for PRs that propose bug fixes. Since this PR only adds test coverage and doesn't fix any bugs, try-fix exploration is not applicable.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| N/A | N/A | Test infrastructure only | N/A | 46 files | No fixes proposed |
Exhausted: N/A (not applicable for test-only PRs)
Selected Fix: N/A (no fix to select)
📋 Report — Final Recommendation
📝 Review Session — addressed copilot suggestions · 76155b9
✅ Final Recommendation: APPROVE
Summary
This PR introduces a comprehensive Shell Feature Matrix test suite adding 20 automated UI tests and interactive test infrastructure for validating Shell Tabbed Page properties. The latest commit (76155b9) addressed event handler lifecycle management from the previous code review. All 16 applicable Android tests pass.
Key Metrics:
- ✅ Build: SUCCESS
- ✅ Tests: 16/16 passed (Android)
- ✅ All automated code review feedback resolved
- ✅ Event handler cleanup added in latest commit
PR #33159 Finalization Review
Title: ✅ Good
Current: [Testing] Feature Matrix UITest Cases for Shell Tabbed Page
The [Testing] prefix clearly signals test infrastructure. Accurate and descriptive.
Description: ✅ Good — Add NOTE block only
Quality assessment:
- Structure: ✅ Clear sections with implementation details
- Technical depth: ✅ Describes new pages, ViewModel, and XAML layouts
- Accuracy: ✅ Matches actual implementation
- Issue links: ✅ 6 linked issues
- Missing: ❌ Required NOTE block at the top
Action: Prepend NOTE block. Existing description content is good and should be preserved.
Suggested addition at top of description:
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you!Code Review: ✅ Passed (Minor Suggestions Only)
🟡 Suggestion 1: Obsolete API Usage
File: ShellFeaturePage.xaml.cs:22
// Current (obsolete)
Application.Current.MainPage = new ShellTabbedControlPage();
// Preferred (modern API)
this.Window.Page = new ShellTabbedControlPage();Note: This pattern is used in other FeatureMatrix files (FlyoutControlPage.xaml.cs), so it's pre-existing across the test infrastructure. For consistency with the existing FeatureMatrix codebase, this is acceptable as-is, but new code should prefer Window.Page.
🟡 Suggestion 2: ViewModel Reset on Navigation
File: ShellTabbedControlPage.xaml.cs:27-30
private async void NavigateToOptionsPage_Clicked(object sender, EventArgs e)
{
BindingContext = _viewModel = new ShellViewModel(); // Creates NEW ViewModel
await Navigation.PushAsync(new ShellTabbedOptionsPage(_viewModel));
}This resets all Shell property bindings each time Options is opened. May be intentional for clean test state, but worth a comment. Not blocking.
🟡 Observation: Tests Guarded on All Platforms
Three tests are guarded with TEST_FAILS_ON_* for ALL platforms:
VerifyShell_TabBarIsVisible(Order 18) - All platformsVerifyShell_TabBarBackgroundColorWithMoreTabs(Order 19) - All platformsVerifyShell_TabBarUnSelectedColorWithMoreTabs(Order 20) - All platforms
These are effectively dormant until the referenced issues are fixed. This is intentional test-first design (not a bug) — these tests define expected behavior and will activate when issues #32992, #33158, #6740 are resolved.
✅ What's Done Well
- Event handler lifecycle - Now properly extracted to named method and unsubscribed in
OnDisappearing()(fixed in latest commit) - Comprehensive property coverage - Tests all major Shell TabBar properties
- Platform guards with issue links -
#if TEST_FAILS_ON_*includes issue links for tracking - MVVM pattern - Clean ViewModel with proper
INotifyPropertyChanged - AutomationId coverage - All interactive elements have AutomationIds
- Category attribute - All tests use
[Category(UITestCategories.Shell)] - All prior review feedback resolved - All 8 automated review threads are resolved
Gate Results
Platform: Android
Tests: 16/16 passed ✅
Build: SUCCESS ✅
Why APPROVE
- Gate passed - All applicable tests pass on Android
- Code quality improved - Latest commit addressed event handler lifecycle
- Well-structured test infrastructure - Follows MAUI test patterns
- Complete coverage - 9 Shell properties tested across 20 test cases
- Platform guards with tracking - Tests failing on known-broken platforms have issue links
- No critical issues - Only minor suggestions (obsolete API + ViewModel reset note)
Only blocking change needed: None. NOTE block should be added to description before merge.
📋 Expand PR Finalization Review
Title: ✅ Good
Current: [Testing] Feature Matrix UITest Cases for Shell Tabbed Page
Description: ✅ Good
Description needs updates. See details below.
✨ Suggested PR Description
[!NOTE]
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates.
The tests validate the Shell Tabbed Page, including properties such as TabBarBackgroundColor, TabBarDisabledColor,
TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection
Shell Feature Matrix Integration:
- Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible.
Shell Feature Matrix Main Page:
- Introduced
ShellFeaturePageandShellFeatureMainPage, providing a landing page with a button to launch the Shell Tabbed feature matrix.
Shell Tabbed Feature Matrix Implementation:
-
Added a detailed
ShellTabbedControlPagewith a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. -
Implemented code-behind for
ShellTabbedControlPageto handle navigation, tab switching, and data binding through aShellViewModel, supporting dynamic updates and interactions within the tabbed shell. -
Added
ShellTabbedOptionsPageallowing interactive configuration of all testable properties before applying them to the Shell. -
Added
ShellViewModelimplementingINotifyPropertyChangedto drive data bindings for all Shell tab bar properties.
Issues Identified (tracked, not fixed)
- [iOS, Windows] Shell.TabBarBackgroundColor not reset to Null #32992
- [Android, iOS] FlowDirection RTL is not updated dynamically on Shell TabBar #32993
- Shell.TabBarIsVisible is not updated dynamically at runtime #32994
- [iOS] TabBarDisabledColor is not applied when the TabBar is in a disabled state #32995
- [Windows] Shell Tab IsEnabled Not Working #32996
- [Catalyst] TabBarBackgroundColor, TabBarUnselectedColor, and IsEnabled Not Working as Expected in Shell #33158
Code Review: ✅ Passed
Code Review: PR #33159
Code Review Findings
🟡 Medium Issues
1. Obsolete Application.Current.MainPage usage
- File:
src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellFeaturePage.xaml.cs - Line:
Application.Current.MainPage = new ShellTabbedControlPage(); - Problem:
Application.MainPage/Application.Current.MainPageis marked[Obsolete]in .NET MAUI. Using it directly also discards the existing navigation stack (theNavigationPagecontainingShellFeatureMainPage) — there is no mechanism to navigate back from the Shell to the original app page. - Recommendation: Use
this.Navigation.PushModalAsync(new ShellTabbedControlPage())or push via the existingNavigationPagestack. If the Shell must replace the entire page (as many Shell feature matrix tests do), consider documenting why and ensuring it matches the pattern used in other Feature Matrix tests. Check how other Feature Matrix entries (e.g.,GridControlPage) handle navigation to aShell.
2. Missing iOS snapshot files for tests that run on iOS
- Affected tests (run on iOS per their
#ifguards):VerifyShell_TabBarTitleColor(TEST_FAILS_ON_CATALYST— runs on Android, iOS, Windows)VerifyShell_TabBarUnselectedColor(same)VerifyShell_TabBarForegroundColorAndUnSelectedColor(same)VerifyShell_TabBarForegroundColorAndTitleColor(same)VerifyShell_TabBarTitleColorAndUnSelectedColor(same)VerifyShell_IsVisible(no guard — runs on all platforms including iOS)VerifyShell_TabBarForegroundColor(same as first group)VerifyShell_TabBarBackgroundColor(same as first group)VerifyShell_TabBarBackgroundColorAndForegroundColor(same)VerifyShell_TabBarBackgroundColorAndTitleColor(same)VerifyShell_TabBarBackgroundColorAndUnSelectedColor(same)
- Problem: The PR includes snapshot baseline images for Android (
TestCases.Android.Tests/snapshots/android/), Mac (TestCases.Mac.Tests/snapshots/mac/), and Windows (TestCases.WinUI.Tests/snapshots/windows/), but no iOS snapshots (TestCases.iOS.Tests/snapshots/ios/). Tests that callVerifyScreenshot()and run on iOS will fail on first CI run because there are no baseline images. - Recommendation: Add iOS snapshot baselines, or confirm that iOS snapshots are generated automatically on first run and not required to be checked in. If iOS baselines are auto-generated, this is acceptable.
🔵 Minor Issues
3. Missing newline at end of files
- Files affected:
ShellFeaturePage.xaml(has\ No newline at end of file)ShellFeaturePage.xaml.cs(has\ No newline at end of file)ShellTabbedControlPage.xaml.cs(has\ No newline at end of file)
- Problem: Missing newlines at end of file violate POSIX standards and can cause minor issues with some tooling.
- Recommendation: Add a trailing newline to each file.
4. Tab2 <Tab> element missing AutomationId
- File:
src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml - Problem:
Tab2(the groceries tab) has noAutomationIdattribute on the<Tab>element, while all other tabs (Tab1, Tab3–Tab7) haveAutomationIdset. This makes it impossible to tap Tab2 directly via Appium if a test needs to. - Code:
<Tab Title="Tab2" Icon="groceries.png"> <!-- missing AutomationId="Tab2" -->
- Recommendation: Add
AutomationId="Tab2"to the Tab2 element for consistency and testability.
5. ShellTabbedControlPage exposes internal ShellContent items as public properties
- File:
src/Controls/tests/TestCases.HostApp/FeatureMatrix/Shell/ShellTabbed/ShellTabbedControlPage.xaml.cs - Code:
public ShellContent VegetablesItem => vegetablesItem; public ShellContent FruitsItem => fruitsItem; public ShellContent Tab1Item => tab1Item; // ...etc
- Problem: These public properties expose internal XAML named elements but are not used anywhere in the code-behind or tests (tests access elements via
AutomationId). This is unnecessary public API on a test-only class. - Recommendation: Remove unused public property accessors, or make them
internalif they are needed. If the Options page navigation uses them, they should be passed directly rather than exposed as public shell content properties.
✅ Looks Good
- Test structure is correct:
ShellTabbedPageFeatureTestscorrectly inherits from_GalleryUITest(the appropriate base for Feature Matrix tests) instead of_IssuesUITest. TEST_FAILS_ON_*guards with issue links: All failing-platform tests are properly guarded and reference GitHub issue links explaining why they fail. This is the correct pattern for documenting known issues.ShellViewModelimplementsINotifyPropertyChangedcorrectly: Standard pattern withCallerMemberNameand equality checks before raising events.- Event handler cleanup:
ShellTabbedControlPage.OnDisappearingcorrectly unsubscribes theNavigatedevent handler, preventing memory leaks. ShellTabbedOptionsPagepattern: Correctly receives the sharedShellViewModelfrom the parent Shell page, applies mutations to it, and usesNavigation.PopAsync()on Apply — this cleanly updates the Shell's bound properties.- Screenshot baseline images included: Android, Mac, and Windows baseline snapshots are provided for all applicable screenshot tests.
- Category attribute: All tests use
[Category(UITestCategories.Shell)]— correct single-category pattern.
76155b9 to
abfdec0
Compare
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
>[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - #32992 - #32993 - #32994 - #32995 - #32996 - #33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
>[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - #32992 - #32993 - #32994 - #32995 - #32996 - #33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
>[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - #32992 - #32993 - #32994 - #32995 - #32996 - #33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
>[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - #32992 - #32993 - #32994 - #32995 - #32996 - #33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
…3159) >[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - dotnet#32992 - dotnet#32993 - dotnet#32994 - dotnet#32995 - dotnet#32996 - dotnet#33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
>[!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! This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates. The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor, TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection **Shell Feature Matrix Integration:** - Added a new entry for "Shell Feature Matrix" to the list of available feature matrix pages in the test app, making Shell-related tests easily accessible. **Shell Feature Matrix Main Page:** - Introduced `ShellFeaturePage` and `ShellFeatureMainPage`, providing a landing page with a button to launch the Shell Tabbed feature matrix. [[1]](diffhunk://#diff-429088ce96d697ab4ebcb64f4f34eab95990318df0e699a206770e487cc5f99cR1-R16) [[2]](diffhunk://#diff-d9fe6832827db8c2b917b1667eb42de532a901608d7f118f002848d9a7fc5018R1-R24) **Shell Tabbed Feature Matrix Implementation:** - Added a detailed `ShellTabbedControlPage` with a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings. - Implemented code-behind for `ShellTabbedControlPage` to handle navigation, tab switching, and data binding through a `ShellViewModel`, supporting dynamic updates and interactions within the tabbed shell. #### Issues Identified - #32992 - #32993 - #32994 - #32995 - #32996 - #33158 https://github.com/user-attachments/assets/818e6319-0f9e-4d1e-84fd-649d724c63e1
## What's Coming .NET MAUI inflight/candidate introduces significant improvements across all platforms with focus on quality, performance, and developer experience. This release includes 46 commits with various improvements, bug fixes, and enhancements. ## Button - [Android] Implemented material3 support for Button by @Dhivya-SF4094 in #33173 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Button](#33172) </details> ## CollectionView - [Android] Fix RemainingItemsThresholdReachedCommand not firing when CollectionView has Header and Footer both defined by @SuthiYuvaraj in #29618 <details> <summary>🔧 Fixes</summary> - [Android : RemainingItemsThresholdReachedCommand not firing when CollectionVew has Header and Footer both defined](#29588) </details> - [iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts by @Shalini-Ashokan in #33853 <details> <summary>🔧 Fixes</summary> - [[iOS/MacCatalyst] CollectionView ScrollTo does not work with horizontal Layout](#33852) </details> - [iOS & Mac] Fixed IndicatorView Size doesnt update dynamically by @SubhikshaSf4851 in #31129 <details> <summary>🔧 Fixes</summary> - [[iOS, Catalyst] IndicatorView.IndicatorSize does not update dynamically at runtime](#31064) </details> - [Android] Fix for CollectionView Scrolled event is triggered on the initial app load. by @BagavathiPerumal in #33558 <details> <summary>🔧 Fixes</summary> - [[Android] CollectionView Scrolled event is triggered on the initial app load.](#33333) </details> - [iOS, Android] Fix for CollectionView IsEnabled=false allows touch interactions by @praveenkumarkarunanithi in #31403 <details> <summary>🔧 Fixes</summary> - [More issues with CollectionView IsEnabled, InputTransparent, Opacity via Styles and code behind](#19771) </details> - [iOS] Fix VerticalOffset Update When Modifying CollectionView.ItemsSource While Scrolled by @devanathan-vaithiyanathan in #34153 <details> <summary>🔧 Fixes</summary> - [[iOS]VerticalOffset Not Reset to Zero After Clearing ItemSource in CollectionView](#26798) </details> ## DateTimePicker - [Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamically by @HarishwaranVijayakumar in #33687 <details> <summary>🔧 Fixes</summary> - [[regression/8.0.3] [Android] DatePicker control minimum date issue](#19256) - [[Android] DatePicker does not update MinimumDate / MaximumDate in the Popup when set in the viewmodel after first opening](#33583) </details> ## Drawing - Android drawable perf by @albyrock87 in #31567 ## Editor - [Android] Implemented material3 support for Editor by @SyedAbdulAzeemSF4852 in #33478 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Editor](#33476) </details> ## Entry - [iOS, Mac] Fix for CursorPosition not updating when typing into Entry control by @SyedAbdulAzeemSF4852 in #30505 <details> <summary>🔧 Fixes</summary> - [Entry control CursorPosition does not update on TextChanged event [iOS Maui 8.0.7] ](#20911) - [CursorPosition not calculated correctly on behaviors events for iOS devices](#32483) </details> ## Flyoutpage - [Android, Windows] Fix for FlyoutPage toolbar button not updating on orientation change by @praveenkumarkarunanithi in #31962 <details> <summary>🔧 Fixes</summary> - [Flyout page in Android does not show flyout button (burger) consistently](#24468) </details> - Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on iOS by @praveenkumarkarunanithi in #29265 <details> <summary>🔧 Fixes</summary> - [[iOS] CollectionView not rendering first item correctly in FlyoutPage.Flyout](#29170) </details> ## Image - [Android] Fix excessive memory usage for stream and resource-based image loading by @Shalini-Ashokan in #33590 <details> <summary>🔧 Fixes</summary> - [[Android] Unexpected high Bitmap.ByteCount when loading image via ImageSource.FromResource() or ImageSource.FromStream() in .NET MAUI](#33239) </details> - [Android] Fix for Resize method returns an image that has already been disposed by @SyedAbdulAzeemSF4852 in #29964 <details> <summary>🔧 Fixes</summary> - [In GraphicsView, the Resize method returns an image that has already been disposed](#29961) - [IIMage.Resize bugged behaviour](#31103) </details> ## Label - Fixed Label Span font property inheritance when applied via Style by @SubhikshaSf4851 in #34110 <details> <summary>🔧 Fixes</summary> - [`Span` does not inherit text styling from `Label` if that styling is applied using `Style` ](#21326) </details> - [Android] Implemented material3 support for Label by @SyedAbdulAzeemSF4852 in #33599 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Label](#33598) </details> ## Map - [Android] Fix Circle Stroke color is incorrectly updated as Fill color. by @NirmalKumarYuvaraj in #33643 <details> <summary>🔧 Fixes</summary> - [[Android] Circle Stroke color is incorrectly updated as Fill color.](#33642) </details> ## Mediapicker - [iOS] Fix: invoke MediaPicker completion handler after DismissViewController by @yuriikyry4enko in #34250 <details> <summary>🔧 Fixes</summary> - [[iOS] Media Picker UIImagePickerController closing issue](#21996) </details> ## Navigation - Fix ContentPage memory leak on Android when using NavigationPage modally (fixes #33918) by @brunck in #34117 <details> <summary>🔧 Fixes</summary> - [[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage) is retained after PopModalAsync()](#33918) </details> ## Picker - [Android] Implement material3 support for TimePicker by @HarishwaranVijayakumar in #33646 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for TimePicker](#33645) </details> - [Android] Implemented Material3 support for Picker by @SyedAbdulAzeemSF4852 in #33668 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Picker](#33665) </details> ## RadioButton - [Android] Implemented material3 support for RadioButton by @SyedAbdulAzeemSF4852 in #33468 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for RadioButton](#33467) </details> ## Setup - Clarify MA003 error message by @jeremy-visionaid in #34067 <details> <summary>🔧 Fixes</summary> - [MA003 false positive with 9.0.21](#26599) </details> ## Shell - [Android] Fix TabBar FlowDirection not updating dynamically by @SubhikshaSf4851 in #33091 <details> <summary>🔧 Fixes</summary> - [[Android, iOS] FlowDirection RTL is not updated dynamically on Shell TabBar](#32993) </details> - [Android] Fix page not disposed on Shell replace navigation by @Vignesh-SF3580 in #33426 <details> <summary>🔧 Fixes</summary> - [[Android] [Shell] replace navigation leaks current page](#25134) </details> - [Android] Fixed Shell flyout does not disable scrolling when FlyoutVerticalScrollMode is set to Disabled by @NanthiniMahalingam in #32734 <details> <summary>🔧 Fixes</summary> - [[Android] Shell.FlyoutVerticalScrollMode="Disabled" does not disable scrolling](#32477) </details> ## Single Project - Fix: Throw a clear error when an SVG lacks dimensions instead of a NullReferenceException by @Shalini-Ashokan in #33194 <details> <summary>🔧 Fixes</summary> - [MAUI Fails To Convert Valid SVG Files Into PNG Files (Object reference not set to an instance of an object)](#32460) </details> ## SwipeView - [iOS] Fix SwipeView stays open on iOS after updating content by @devanathan-vaithiyanathan in #31248 <details> <summary>🔧 Fixes</summary> - [[iOS] - Swipeview with collectionview issue](#19541) </details> ## TabbedPage - [Windows] Fixed IsEnabled Property not works on Tabs by @NirmalKumarYuvaraj in #26728 <details> <summary>🔧 Fixes</summary> - [ShellContent IsEnabledProperty does not work](#5161) - [[Windows] Shell Tab IsEnabled Not Working](#32996) </details> - [Android] Fix NavigationBar overlapping StatusBar when NavigationBar visibility changes by @Vignesh-SF3580 in #33359 <details> <summary>🔧 Fixes</summary> - [[Android] NavigationBar overlaps with StatusBar when mixing HasNavigationBar=true/false in TabbedPage on Android 15 (API 35)](#33340) </details> ## Templates - Fix for unable to open task using keyboard navigation on windows platform by @SuthiYuvaraj in #33647 <details> <summary>🔧 Fixes</summary> - [Unable to open task using keyboard: A11y_.NET maui_User can get all the insights of Dashboard_Keyboard](#30787) </details> ## TitleView - Fix for NavigationPage.TitleView does not expand with host window in iPadOS 26+ by @SuthiYuvaraj in #33088 ## Toolbar - [iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+ by @Shalini-Ashokan in #34036 <details> <summary>🔧 Fixes</summary> - [[iOS 26] ToolbarItem color with custom BarTextColor not working](#33970) </details> - [Android] Fix for ToolbarItem retaining the icon from the previous page on Android when using NavigationPage. by @BagavathiPerumal in #32311 <details> <summary>🔧 Fixes</summary> - [Toolbaritem keeps the icon of the previous page on Android, using NavigationPage (not shell)](#31727) </details> ## WebView - [Android] Fix WebView in a grid expands beyond it's cell by @devanathan-vaithiyanathan in #32145 <details> <summary>🔧 Fixes</summary> - [Android - WebView in a grid expands beyond it's cell](#32030) </details> ## Xaml - ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @HarishwaranVijayakumar in #30880 <details> <summary>🔧 Fixes</summary> - [Binding context in ContentPresenter](#23797) </details> <details> <summary>🔧 Infrastructure (1)</summary> - [Revert] ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @Ahamed-Ali in #34332 </details> <details> <summary>🧪 Testing (6)</summary> - [Testing] Feature Matrix UITest Cases for Shell Flyout Page by @NafeelaNazhir in #32525 - [Testing] Feature Matrix UITest Cases for Brushes by @LogishaSelvarajSF4525 in #31833 - [Testing] Feature Matrix UITest Cases for BindableLayout by @LogishaSelvarajSF4525 in #33108 - [Android] Add UI tests for Material 3 CheckBox by @HarishwaranVijayakumar in #34126 <details> <summary>🔧 Fixes</summary> - [[Android] Add UI tests for Material 3 CheckBox](#34125) </details> - [Testing] Feature Matrix UITest Cases for Shell Tabbed Page by @NafeelaNazhir in #33159 - [Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate - 1 by @TamilarasanSF4853 in #34334 </details> <details> <summary>📦 Other (2)</summary> - Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 by @PaulAndersonS in #34178 - Fix crash when closing Windows based app when using TitleBar by @MFinkBK in #34032 <details> <summary>🔧 Fixes</summary> - [Unhandled exception "Value does not fall within the expected range" when closing Windows app](#32194) </details> </details> **Full Changelog**: main...inflight/candidate
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!
This pull request introduces a new "Shell Feature Matrix" to the test application, providing a comprehensive set of test cases for Shell and Shell Tabbed scenarios in .NET MAUI. It adds new pages, XAML layouts, and view models to allow interactive testing of Shell features, including tab navigation, dynamic properties, and content updates.
The tests validate the Shell Tabbed Page , including properties such as TabBarBackgroundColor, TabBarDisabledColor,
TabBarForegroundColor, TabBarTitleColor, TabBarUnselectedColor, TabBarIsVisible, IsVisible, IsEnabled and FlowDirection
Shell Feature Matrix Integration:
Shell Feature Matrix Main Page:
ShellFeaturePageandShellFeatureMainPage, providing a landing page with a button to launch the Shell Tabbed feature matrix. [1] [2]Shell Tabbed Feature Matrix Implementation:
Added a detailed
ShellTabbedControlPagewith a XAML layout containing twelve tabs, each with unique content, navigation buttons, and data bindings for various Shell properties and tab states. This enables thorough testing of tabbed navigation, tab visibility, and property bindings.Implemented code-behind for
ShellTabbedControlPageto handle navigation, tab switching, and data binding through aShellViewModel, supporting dynamic updates and interactions within the tabbed shell.Issues Identified
Screen.Recording.2025-12-15.at.5.13.19.PM.mov