[release/10.0.1xx-sr10] Integrate .NET MAUI 10.0.101 VS insertion payload - #37746
[release/10.0.1xx-sr10] Integrate .NET MAUI 10.0.101 VS insertion payload#37746kubaflo wants to merge 9 commits into
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 37746Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 37746" |
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
…ies (#37724) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1e7f77e3-4862-4b92-a662-d12b5918bb59
ac04dff to
7e10776
Compare
|
/azp run |
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
There was a problem hiding this comment.
Pull request overview
This PR integrates the staged .NET MAUI 10.0.101 (SR10.1) Visual Studio insertion payload into release/10.0.1xx-sr10, combining several servicing regression backports plus the SkiaSharp 4.150.1 update across Essentials, Controls, Core platform code, Graphics, and build/signing infrastructure.
Changes:
- Updates Android Essentials activity-result plumbing to correctly support child activities, activity recreation, and task-removal cancellation, and wires MediaPicker’s photo picker usage through the correct launching
ComponentActivity. - Refactors iOS safe-area handling to per-edge ancestor arbitration (shared by
MauiViewandMauiScrollView) and ensures safe-area changes invalidate descendants. - Updates SkiaSharp-dependent code paths and dependencies (SkiaSharp/Svg.Skia ecosystem), including Resizetizer/Graphics adjustments and associated test updates.
Reviewed changes
Copilot reviewed 47 out of 50 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/SingleProject/Resizetizer/test/UnitTests/ResizetizeImagesTests.cs | Updates Resizetizer SVG test coverage to include a new “good” SVG and a dedicated invalid SVG. |
| src/SingleProject/Resizetizer/test/UnitTests/images/invalid.svg | Adds intentionally malformed SVG used for error-path tests. |
| src/SingleProject/Resizetizer/src/TizenSplashUpdater.cs | Removes obsolete Skia filter-quality usage during splash generation. |
| src/SingleProject/Resizetizer/src/SkiaSharpTools.cs | Removes obsolete SKPaint.FilterQuality usage in Resizetizer’s paint configuration. |
| src/SingleProject/Resizetizer/src/SkiaSharpAppIconTools.cs | Keeps SKPath.AddCircle with an explicit pragma to support compatibility across SkiaSharp bands. |
| src/SingleProject/Resizetizer/src/ResizetizerPackages.projitems | Adds additional Svg.* assemblies to the Resizetizer packaging set. |
| src/Graphics/tests/Graphics.Tests/ImageAssert.cs | Fixes failure message wording and uses the effective threshold argument value. |
| src/Graphics/src/Graphics.Skia/SKPaintExtensions.cs | Removes copying obsolete text/font-related members from SKPaint copies. |
| src/Graphics/src/Graphics.Skia/SkiaTextLayout.cs | Routes SKPaint overload through the SKFont overload with null font (SkiaSharp 4 text changes). |
| src/Graphics/src/Graphics.Skia/SkiaCanvasStateService.cs | Removes obsolete SKPaint.Typeface initialization; relies on SKFont. |
| src/Graphics/src/Graphics.Skia/SkiaCanvasState.cs | Migrates state tracking from SKPaint text fields to SKFont and updates reset logic accordingly. |
| src/Graphics/src/Graphics.Skia/SkiaCanvas.cs | Migrates path construction to SKPathBuilder, updates text draw calls, and updates bitmap drawing API usage. |
| src/Graphics/src/Graphics.Skia/SKGraphicsExtensions.cs | Migrates SKPath construction to SKPathBuilder for multiple path-conversion helpers. |
| src/Essentials/test/DeviceTests/Tests/ActivityStateManagerRecreation_Tests.Android.cs | Adds Android device tests for activity-result adoption through recreation and task-removal cancellation. |
| src/Essentials/test/DeviceTests/Tests/ActivityStateManager_Tests.cs | Adds unit test coverage for adopting pending activity-result requests across recreated state. |
| src/Essentials/src/Platform/ActivityStateManager.android.cs | Centralizes activity-result request registration/state callbacks through lifecycle listener wiring. |
| src/Essentials/src/Platform/ActivityForResultRequest.android.cs | Reworks activity-result request handling to be per-ComponentActivity, persist owners across recreation, and monitor task removal. |
| src/Essentials/src/MediaPicker/MediaPicker.android.cs | Launches photo picker requests via the correct ComponentActivity instance and improves error messaging. |
| src/Core/tests/DeviceTests/Handlers/Window/WindowHandlerTests.Android.cs | Adds coverage for Material2/Material3 status-bar appearance behavior. |
| src/Core/tests/DeviceTests/Handlers/Button/ButtonHandlerTests.iOS.cs | Adds iOS device tests ensuring native UIButton styling is preserved across handler reuse and unsupported paints. |
| src/Core/src/Platform/iOS/SafeAreaPadding.cs | Adds safe-area helpers, descendant invalidation, and shared parent-blocked-edge resolution logic. |
| src/Core/src/Platform/iOS/MauiView.cs | Implements per-edge safe-area ancestor arbitration with cached blocked edges and shared resolver logic. |
| src/Core/src/Platform/iOS/MauiScrollView.cs | Aligns scroll-view safe-area behavior with per-edge ancestor arbitration (manual + system-inset paths). |
| src/Core/src/Platform/iOS/ButtonExtensions.cs | Preserves native UIButton background styling until MAUI has applied a background; tracks MAUI background application state. |
| src/Core/src/Platform/Android/WindowExtensions.cs | Resolves status-bar icon appearance via theme-derived background color (Material2 primary vs Material3 surface). |
| src/Core/src/Platform/Android/MauiSwipeView.cs | Adjusts SwipeItem measurement so height is AtMost to keep icon/text vertically centered. |
| src/Core/src/Handlers/View/ViewHandler.iOS.cs | Forces safe-area invalidation across descendants when SafeAreaEdges changes. |
| src/Core/src/Handlers/ContentView/ContentViewHandler.Windows.cs | Detaches platform content from existing parents before reparenting to avoid WinUI COM exceptions. |
| src/Core/src/Handlers/Border/BorderHandler.Windows.cs | Same WinUI detachment/reparenting approach for Border content updates. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue37706.cs | Adds Android UI test for root-page OnBackButtonPressed override invocation. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue36749.cs | Adds iOS/MacCatalyst UI test validating native UIButton styling preservation with null Background updates. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue36298.cs | Adds UI test for dynamic ContentPresenter content switching without crash. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35826.cs | Adds Android UI test ensuring MediaPicker returns from child activities and enforces overlap/cancel behavior. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue34563.cs | Adds iOS/MacCatalyst UI test for per-edge safe-area arbitration correctness. |
| src/Controls/tests/TestCases.HostApp/MauiProgram.cs | Registers an issue-specific iOS/MacCatalyst handler for the Button styling regression page. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue37706.cs | Adds HostApp repro page for root-page back handling. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue36749.cs | Adds HostApp repro page and custom handler/native UIButton subclass for the Button styling regression. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue36298.cs | Adds HostApp repro page for Windows ContentPresenter dynamic switching scenario. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue35826.cs | Adds HostApp repro page and child activity for MediaPicker child-activity scenario. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue34563.cs | Adds HostApp repro page for per-edge safe-area arbitration scenario. |
| src/Controls/tests/DeviceTests/Elements/SwipeView/SwipeViewTests.cs | Ensures required handlers are registered for SwipeView + CollectionView device tests. |
| src/Controls/tests/DeviceTests/Elements/SwipeView/SwipeViewTests.Android.cs | Adds Android device test verifying SwipeItem icon/text alignment across different CollectionView item counts. |
| src/Controls/tests/Core.UnitTests/WindowsTests.cs | Adds unit tests for back-navigation consumption detection with/without overrides. |
| src/Controls/src/Core/Window/Window.cs | Changes back-navigation consumption logic to honor custom OnBackButtonPressed overrides. |
| src/Controls/src/Core/Page/Page.cs | Adds cached detection of whether OnBackButtonPressed is overridden outside the framework assembly. |
| eng/Versions.props | Updates System.* package versions and SkiaSharp/Svg.Skia-related versions for the payload. |
| eng/Signing.props | Adds signing entries for new Svg.SceneGraph and Svg.Animation assemblies. |
| eng/NuGetVersions.targets | Ensures new Svg.* packages receive the correct pinned version. |
PureWeen
left a comment
There was a problem hiding this comment.
Adversarial review
❌ Regression — ResolveParentBlockedEdges caches whether an ancestor currently applies each safe-area edge, but a keyboard show/hide only marks _safeAreaInvalidated; it does not invalidate that cache for the parent or descendants. A SoftInput parent and Container child can therefore cache bottom as unblocked while the keyboard is hidden, then both apply bottom inset once it appears (and conversely retain the block after it hides). Invalidate descendant safe-area caches when keyboard state changes, and add a nested SoftInput/Container keyboard-transition regression test.
3/3 reviewers after dispute; independent reviewer consensus. The existing tests cover SafeAreaEdges changes but not this keyboard transition.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d00747b7-96f3-4e7a-8dfb-e3a48db04b2d
|
@PureWeen addressed the latest feedback in 7c52324: keyboard transitions now invalidate descendant safe-area caches, activity-monitor cancellation has single-owner CTS disposal, and the Android theme test now passes the correct light-theme value. The focused iOS View, Android Window, and ActivityStateManager device tests passed. This is ready for re-review — thanks! |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 48 out of 51 changed files in this pull request and generated no new comments.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
src/Graphics/src/Graphics.Skia/SkiaCanvas.cs:879
- SkiaCanvas.DrawImage now hard-codes
SKFilterMode.Nearest, which forces nearest-neighbor sampling for all image draws. That can noticeably degrade scaled image quality (pixelation) and may not match the previous/default behavior. Consider selecting a sampling mode appropriate for general image rendering (e.g., linear/cubic) or making it consistent with the rest of the Skia-based rendering pipeline.
|
I checked the suppressed Skia sampling concern and am not changing this path. Before the SkiaSharp 4 migration, |
CI failure analysis —
|
PureWeen
left a comment
There was a problem hiding this comment.
Adversarial review
No new high-confidence issues found at 7c523245e64fca92f376a76298ed6cfd263cad3e.
Three independent reviewers completed an adversarial consensus review of the PR-scoped changes. Existing exact-head findings were checked and not duplicated.
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!
Summary
Integrates the staged .NET MAUI 10.0.101 VS insertion payload from
inflight/10.0.101intorelease/10.0.1xx-sr10.The staging branch contains seven servicing-regression backports plus the SkiaSharp 4.150.1 update. The component PRs were merged into the staging branch in payload order, with Skia last.
Supersedes #37745, which GitHub automatically closed when its head branch was renamed from
vs/10.0.101toinflight/10.0.101.Included component PRs
ContentPresenterassignmentSwipeItemcontent alignmentSKPath.AddCirclecompatibility fixComponent CI disposition
Release gates
_SkiaSharpNativeAssetsVersion, or record an explicit release-owner waiver.PatchVersionbump, tag, and publication are not included in this payload PR.Relates to #37723.