Skip to content

[net11.0] Merge main to net11#33217

Merged
rmarinho merged 89 commits intonet11.0from
merge-main-net11
Dec 18, 2025
Merged

[net11.0] Merge main to net11#33217
rmarinho merged 89 commits intonet11.0from
merge-main-net11

Conversation

@rmarinho
Copy link
Member

Description of Change

Bring latest from main to net11

dotnet-maestro bot and others added 30 commits November 24, 2025 05:02
…51120.1

On relative base path root
Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 10.0.0-prerelease.25506.2 -> To Version 10.0.0-prerelease.25570.1
* Added size update for Shell Popup Overlay after rotation

# Conflicts:
#	src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt

* Fix resizing on rotation

* - fix publicapi

# Conflicts:
#	src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt

* - apply copilot suggested change

* - Add Tests

* - fix test

* - make backdrop orange

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
Deleted the OnDestroy method and its dispatcher-based disposal logic from ShellFragmentContainer. Cleanup is unnecessary in this context and causes Android.Runtime.JavaProxyThrowable exception
* Fix RTL column mirroring in UICollectionView

Explicitly sets the semantic content attribute on the native UICollectionView to ensure compositional layouts mirror columns correctly in right-to-left (RTL) scenarios. This addresses an issue where the platform view's semantic attribute does not propagate to native children not backed by IView.

* - add UITests

* Improvements

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
Since TimePicker now supports nullable, the casts need to be nullable to match the TimeChangedEventArgs properties. Otherwise, `timeSpan.Time = null` throws a NullReferenceException.
… Back to a ContentPage with NavigationBar Hidden (#32622)

* [iOS] Fix for Shell Navigation Bar Remaining Visible After Navigating Back to a ContentPage with NavigationBar Hidden

* Added test cases and snapshots for both iOS and Android platforms

* Added snapshot for windows platform
…m change with PresentationMode set to Modal (#32582)

* Fix for Page OnAppearing triggered twice when navigating via ShellItem change with PresentationMode set to Modal

* - generate tests with copilot

* Removed the UI test since unit tests have been added, and also removed duplicate tests in the unit tests

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
#32868)

This PR addresses the UI test image failures that occurred in the
inflight/candidate branch #32841 and
includes updates to improve rendering and test stability across
platforms.

- In ShouldFlyoutTextWrapsInLandscape test case, added the resaved CI
snapshot caused by changes from fix PR -
#15866
- In FlyoutOverlayResizesOnRotation test cases, disable for android
platform, because the Shell FlyoutContent overlaps the navigation bar
due to SafeArea during Landscape Orientation, Related issue:
#32275

**Test cases:**
- ShouldFlyoutTextWrapsInLandscape
- NavigationBarShouldRemainHiddenAfterNavigatingBack
- FlyoutOverlayResizesOnRotation
- VerticalGridCollectionViewLTRToRTLToggleShouldWork
- VerticalGridCollectionViewRTLColumnMirroringShouldWork
…51125.2

On relative base path root
Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit From Version 10.0.0-prerelease.25506.2 -> To Version 10.0.0-prerelease.25575.2
…ces (#32956)

Fixes #27281

The issue was that SolidColorBrush.Equals used '==' to compare Color objects, which compares references instead of values. This caused infinite loops when using DynamicResource with OnPlatform<Color> because OnPlatform creates new Color instances each time, and the equality check would always return false even for identical color values.

Changed to use Equals() which properly compares Color values via Color.Equals().
This pull request updates the following dependencies

[marker]: <> (Begin:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95)
## From https://github.com/dotnet/xharness
- **Subscription**:
[a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95](https://maestro.dot.net/subscriptions?search=a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95)
- **Build**:
[20251125.2](https://dev.azure.com/dnceng/internal/_build/results?buildId=2847614)
([292346](https://maestro.dot.net/channel/8394/github:dotnet:xharness/build/292346))
- **Date Produced**: November 25, 2025 9:55:44 PM UTC
- **Commit**:
[bdf0f92540d68762bb028b8cb859146048f3c356](dotnet/xharness@bdf0f92)
- **Branch**:
[release/10.0](https://github.com/dotnet/xharness/tree/release/10.0)

[DependencyUpdate]: <> (Begin)

- **Dependency Updates**:
  - From [10.0.0-prerelease.25506.2 to 10.0.0-prerelease.25575.2][2]
     - Microsoft.DotNet.XHarness.CLI
     - Microsoft.DotNet.XHarness.TestRunners.Common
     - Microsoft.DotNet.XHarness.TestRunners.Xunit

[2]: dotnet/xharness@5b57221...bdf0f92

[DependencyUpdate]: <> (End)


[marker]: <> (End:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95)
The TS compiler automatically includes the JS files as content, but we want it as embedded files.

Fixes #32683

Update src/TestUtils/src/Microsoft.Maui.IntegrationTests/WindowsTemplateTest.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…nt crash (#31866)

Add null check in ControlsModalWrapper.ViewDidLayoutSubviews to prevent crash

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

Add explanatory comment for defensive null check in ViewDidLayoutSubviews

Co-authored-by: jsuarezruiz <6755973+jsuarezruiz@users.noreply.github.com>
Fixes unsigned underflow in AsBaseStyle() causing VSM setters from base
styles to be incorrectly converted to ImplicitVSM (lower priority).

Changes:
- Check if style <= StyleBasedOn before subtracting to prevent underflow
- Clamp result to StyleBasedOn minimum to maintain proper priority
- Add StyleBasedOn constant (0x0C0) between implicit and local styles
- Preserve specificity during VisualStateGroupList cloning

Fixes #27202
…2828)

Add accessibility identifier to MauiDoneAccessoryView Done button

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

Address code review feedback - extract constant and improve comment

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

Update src/Controls/tests/TestCases.HostApp/Issues/MauiDoneAccessoryButton.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Added a device test

Fixes

Fixed a memory leak

Don't interfere with other gestures
# Conflicts:
#	src/Controls/tests/TestCases.HostApp/Issues/Issue15810.cs
#	src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue15810.cs
#	src/Core/src/Handlers/ContentView/ContentViewHandler.Windows.cs

Updated test
Removed conditional compilation for Android tests related to color assertions.
Introduces the UpdateLargeTitles method to manage large title display modes for navigation bars in ShellItemRenderer. This ensures that the large title preference is updated when the displayed page changes or when the view lays out subviews, aligning with iOS-specific platform configurations.

Added a UITest

Fix large title display mode handling on iOS Shell

Corrects the logic for setting PrefersLargeTitles to only enable large titles when LargeTitleDisplayMode is Always. Updates Issue12156 test to set LargeTitleDisplay on ContentPage instead of Shell. Adds snapshot images for large title display verification on Mac and iOS.
…r scrolling when deploying ManualMaui Demo project on iOS 26.1 (#32822)

Fix optimized

Update src/Controls/src/Core/Handlers/Items2/iOS/TemplatedCell2.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
rmarinho and others added 23 commits December 5, 2025 20:11
* Migrate Xaml.UnitTests from NUnit to xUnit

Complete migration of src/Controls/tests/Xaml.UnitTests from NUnit to xUnit testing framework.

* Improve exception tests and remove unnecessary IDisposable

- Bz43694, Bz44216, Issue2450: Use XamlExceptionAssert to check
  exception line/position and message content
- Maui17222: Replace IDisposable with try/finally for cleanup
…tegory (#32990)

* Initial plan

* Split UITest category group into two runs

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

* Move ScrollView to run separately

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

* Split Label,Layout,Lifecycle,ListView and Shadow,ViewBaseTests,Visual,WebView,Window to run separately

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

* Combine SafeAreaEdges and Shadow, remove Visual category and reassign tests

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

* Combine category groups: Lifecycle+ManualReview+Maps, ViewBaseTests+Window, Cells+DatePicker groups

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
* Add scripts to easily retrieve MAUI PR artifacts

* Add GitHub Action for commenting

* Remove comment from PR template

* Update README.md

* Address comments

* Don't trigger Azure Pipelines on GitHub changes

* Update get-maui-pr.sh
Added version 10.0.20 to the bug report template options.
…2835)

* Initial plan

* Add comprehensive README for Microsoft.Maui.Controls NuGet package

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Update src/Controls/src/NuGet/README.md

* Change title to use product name .NET MAUI instead of .NET MAUI Controls

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Address PR feedback: Update Background property, add XAML enhancements, update Discord/social links

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Update src/Controls/src/NuGet/README.md

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

* Update src/Controls/src/NuGet/README.md

Co-authored-by: Kartheek Penagamuri <kapenaga@microsoft.com>

* Add Mac Catalyst run command and replace code examples with doc links

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Add code snippets alongside doc links and remove ListView reference

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Remove build status badge from README

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* Update src/Controls/src/NuGet/README.md

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>
Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Kartheek Penagamuri <kapenaga@microsoft.com>
* Initial plan

* chore: plan uitest artifact fix

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

* fix: include stage in uitest snapshot artifacts

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>
* Update arcade

* [ci] Force helix sdk version to be the same as release
### Description of Change

This tries to workaround a issue with Microsoft.Windowsappsdk failing
sometimes https://microsoft.visualstudio.com/OS/_workitems/edit/57204991

Fixes #32503
This PR addresses UI test image failures in the main branch and includes
updates to improve rendering and test stability across platforms.

- WebViewShouldNotMirrored: Updated to use a new static web link and
added VerifyInternetConnectivity to ensure internet connection before
running the test.
- HeaderFooterHorizontalViewWorks: Changed the scroll strategy to
Gesture for better reliability.

### Test cases:

- WebViewShouldNotMirrored
- HeaderFooterHorizontalViewWorks
This pull request updates the test order in the
``TwoPaneViewFeatureTests`` class. The TwoPaneView_Pane1Priority test
was occasionally failing in CI due to RTL state carried over from
earlier tests. Setting a clear execution order ensures tests run in the
correct sequence and resolves the flaky behavior.
This pull request improves the reliability and accuracy of UI tests by
addressing test flakiness, enhancing assertions, and refining test
logic. The main focus is on making tests more robust across different
platforms (especially in CI environments) and ensuring UI behavior is
correctly validated.

**Test reliability improvements:**

* Added retry logic for drag-and-drop actions in
`GesturesSenderIsView()` on Mac Catalyst to reduce test flakiness in CI
environments.
* Extended double-tap retry logic in `TapThenDoubleTap()` to both
Android and iOS platforms, not just Android, to handle potential
flakiness.

**Test accuracy and validation enhancements:**

* Improved `ModalPageMarginCorrectAfterKeyboardOpens()` by capturing and
asserting the position of an `Entry` before and after keyboard
appearance/dismissal, ensuring the UI remains visible and returns to its
original state.
* Updated `TextInEditorShouldScroll()` to use a more precise scroll
command (`ScrollStrategy.Gesture` with `withInertia: false`), improving
test consistency.
This pull request updates the `VerifyEditorFocusedEvent` test method to
be asynchronous, improving reliability by adding a short delay after
tapping the editor. This ensures the focus event is properly triggered
before the assertion is made.

**Test reliability improvement:**
* Changed `VerifyEditorFocusedEvent` in `EditorFeatureTests.cs` to be an
`async Task`, and added a `Task.Delay(100)` after tapping the editor to
ensure the focus event has time to trigger before the test assertion.
# Conflicts:
#	eng/Versions.props
#	eng/common/core-templates/job/publish-build-assets.yml
#	eng/common/core-templates/post-build/post-build.yml
#	eng/common/core-templates/steps/install-microbuild.yml
#	eng/pipelines/ci-device-tests.yml
#	eng/pipelines/ci-official.yml
#	eng/pipelines/ci-uitests.yml
#	eng/pipelines/ci.yml
#	eng/pipelines/device-tests.yml
#	eng/pipelines/handlers.yml
#	eng/pipelines/ui-tests.yml
Copilot AI review requested due to automatic review settings December 18, 2025 15:24
@rmarinho rmarinho added this to the .NET 11 Planning milestone Dec 18, 2025
@rmarinho rmarinho added the area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions label Dec 18, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This is a merge PR bringing the latest changes from the main branch into net11.0. The PR includes multiple bug fixes, test improvements, new features, and infrastructure updates spanning iOS, Android, and cross-platform code.

Key changes:

  • Added slider test coverage and iOS-specific slider platform configuration
  • Fixed SwipeView logical children handling to properly maintain SwipeItems in the tree
  • Multiple Shell navigation and lifecycle fixes (modal appearing, tab bar visibility, large titles)
  • Picker selection preservation when items are added/removed from ItemsSource
  • CollectionView Items2 handler improvements (MeasureFirstItem optimization, flow direction, selection state)
  • Build infrastructure updates (pipeline wildcards, EmitCompilerGeneratedFiles optimization, TypeScript compilation)
  • New PR testing scripts (get-maui-pr.sh and get-maui-pr.ps1) for easier PR artifact testing

Reviewed changes

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

Show a summary per file
File Description
src/Controls/tests/DeviceTests/TestCategory.cs Added "Slider" test category constant
src/Controls/tests/DeviceTests/Elements/SwipeView/SwipeViewTests.cs Updated logical children count assertion from 1 to 5 to verify SwipeItems are maintained
src/Controls/tests/DeviceTests/Elements/Slider/*.cs Added new Slider test files (base class and iOS leak test)
src/Controls/tests/DeviceTests/Elements/ContentView/ContentViewTests.iOS.cs Unskipped previously failing test (issue #32368 resolved)
src/Controls/tests/Core.UnitTests/SwipeViewTests.cs Added comprehensive test for SwipeItems logical tree and binding context propagation
src/Controls/tests/Core.UnitTests/SolidColorBrushTests.cs Added test for SolidColorBrush.Equals using value comparison (fixes issue #27281)
src/Controls/tests/Core.UnitTests/ShellModalAppearingTests.cs New comprehensive test suite for Shell modal lifecycle (fixes issue #31584)
src/Controls/tests/Core.UnitTests/PickerTests.cs Enhanced tests for Picker selection preservation during ItemsSource modifications
src/Controls/src/SourceGen/CompiledBindingMarkup.cs Added null value handling for compiled bindings with non-nullable setters
src/Controls/src/NuGet/. Added README.md for NuGet package with comprehensive documentation
src/Controls/src/Core/VisualStateManager.cs Added debug output and specificity preservation for VSM (issue #27202)
src/Controls/src/Core/TimePicker/TimePicker.cs Fixed TimeSelected event to accept nullable TimeSpan parameters
src/Controls/src/Core/TemplateUtilities.cs Enhanced to preserve SwipeItems in logical tree during content changes
src/Controls/src/Core/SolidColorBrush.cs Changed Color comparison to use Equals() instead of == operator
src/Controls/src/Core/Slider/*.cs Added iOS platform-specific slider mapping for UpdateOnTap
src/Controls/src/Core/Shell/ShellSection.cs Fixed modal disappearing logic to prevent incorrect SendDisappearing calls
src/Controls/src/Core/Shapes/*.cs Fixed RoundRectangle measurement to use inner path
src/Controls/src/Core/SetterSpecificity.cs Added StyleBasedOn constant and updated specificity handling for base styles
src/Controls/src/Core/PublicAPI/*.txt Updated API surface for new ViewWillTransitionToSize override
src/Controls/src/Core/Platform/iOS/ControlsModalWrapper.cs Added defensive check for VirtualView disposal during snapshot
src/Controls/src/Core/Platform/GestureManager/*.cs Added SwipeGestureRecognizer direction change handling
src/Controls/src/Core/Platform/AlertManager/AlertManager.Standard.cs Fixed Standard platform alert manager to return subscription instead of throwing
src/Controls/src/Core/Picker/Picker.cs Refactored to preserve SelectedItem when collection changes
src/Controls/src/Core/ImageBrush.cs, GradientStop.cs Simplified GetHashCode to use base implementation
src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs Added Slider.RemapForControls() call
src/Controls/src/Core/Handlers/Items2/*.cs Multiple iOS CollectionView handler improvements (measurement caching, flow direction, selection VSM)
src/Controls/src/Core/Handlers/Items/*.cs Updated VSM selection detection to include Background property
src/Controls/src/Core/Compatibility/Handlers/TabbedPage/*.cs Fixed TabBar visibility on MacCatalyst 18+
src/Controls/src/Core/Compatibility/Handlers/Shell/*.cs Multiple Shell fixes (search bar, title view, flyout, large titles, appearance)
src/Controls/src/Core/Compatibility/Handlers/NavigationPage/*.cs Added iOS 26+ orientation handling for title view
src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj Only emit compiler-generated files in Debug configuration
eng/scripts/. Added get-maui-pr.sh and get-maui-pr.ps1 scripts for PR artifact testing
eng/pipelines/*.yml Updated to use wildcard patterns for net*.0 branches and improved artifact naming
eng/. Version updates and build configuration improvements
Directory.Build.* Added TypeScript compilation settings and EmitCompilerGeneratedFiles workaround
.github/workflows/*.yml Added repository_owner checks and new dogfood-comment workflow
.github/instructions/.md, .github/prompts/.md Removed obsolete documentation files

// since default GetBoundsByFlattening(0.001) returns incorrect results for curves
RectF pathBounds = this.GetPath().GetBoundsByFlattening(1);
// Get the inner path by subtracting the stroke thickness for a rounded rectangle, as the GetPath() method returns the path including the stroke thickness.
// For other shapes, the GetPath() method excludes the stroke thickness"
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

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

Missing closing quotation mark at the end of line 387. The comment should end with a period, not a quotation mark, or if a quotation mark is intended, it should have a matching opening quote.

Suggested change
// For other shapes, the GetPath() method excludes the stroke thickness"
// For other shapes, the GetPath() method excludes the stroke thickness.

Copilot uses AI. Check for mistakes.
}
else
{
pathBounds = this.GetPath().GetBoundsByFlattening(1);
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

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

Inconsistent indentation. This line uses spaces for indentation while surrounding code uses tabs. Should use tabs to match the file's indentation style.

Suggested change
pathBounds = this.GetPath().GetBoundsByFlattening(1);
pathBounds = this.GetPath().GetBoundsByFlattening(1);

Copilot uses AI. Check for mistakes.
@rmarinho rmarinho merged commit b666b60 into net11.0 Dec 18, 2025
67 of 86 checks passed
@rmarinho rmarinho deleted the merge-main-net11 branch December 18, 2025 17:49
@github-actions github-actions bot locked and limited conversation to collaborators Jan 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.