Skip to content

[release/10.0.1xx-sr10] Integrate .NET MAUI 10.0.101 VS insertion payload - #37746

Open
kubaflo wants to merge 9 commits into
release/10.0.1xx-sr10from
inflight/10.0.101
Open

[release/10.0.1xx-sr10] Integrate .NET MAUI 10.0.101 VS insertion payload#37746
kubaflo wants to merge 9 commits into
release/10.0.1xx-sr10from
inflight/10.0.101

Conversation

@kubaflo

@kubaflo kubaflo commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Summary

Integrates the staged .NET MAUI 10.0.101 VS insertion payload from inflight/10.0.101 into release/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.101 to inflight/10.0.101.

Included component PRs

Component CI disposition

Release gates

  • Confirm a matching SkiaSharp 4.150.1 native-assets/PDB build for _SkiaSharpNativeAssetsVersion, or record an explicit release-owner waiver.
  • Require aggregate-PR CI and explicit disposition of any failures before merge.
  • Require independent human maintainer approval on the current head.
  • The final PatchVersion bump, tag, and publication are not included in this payload PR.

Relates to #37723.

Copilot AI lite review requested due to automatic review settings August 22, 2026 14:44
@kubaflo
kubaflo temporarily deployed to copilot-pat-pool August 22, 2026 14:44 — with GitHub Actions Inactive
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

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

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

Or

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

@kubaflo
kubaflo temporarily deployed to copilot-pat-pool August 22, 2026 14:44 — with GitHub Actions Inactive
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
There may be pipelines that require an authorized user to comment /azp run to run.

kubaflo and others added 8 commits August 22, 2026 16:47
…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
@kubaflo
kubaflo force-pushed the inflight/10.0.101 branch from ac04dff to 7e10776 Compare August 22, 2026 14:47
@github-actions github-actions Bot added area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions platform/android platform/ios platform/macos macOS / Mac Catalyst platform/windows labels Aug 22, 2026
@kubaflo

kubaflo commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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 MauiView and MauiScrollView) 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.

Comment thread src/Essentials/src/Platform/ActivityForResultRequest.android.cs

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Adversarial review

RegressionResolveParentBlockedEdges 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.

Comment thread src/Core/src/Platform/iOS/SafeAreaPadding.cs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d00747b7-96f3-4e7a-8dfb-e3a48db04b2d
Copilot AI review requested due to automatic review settings August 22, 2026 17:19
@kubaflo

kubaflo commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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.

@kubaflo

kubaflo commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

I checked the suppressed Skia sampling concern and am not changing this path. Before the SkiaSharp 4 migration, GetImagePaint created a fresh SKPaint without setting FilterQuality, so its legacy value was SKFilterQuality.None. The removed DrawBitmap(bitmap, src, dest, paint) overload translated that paint value through GetLegacyFilterQualitySampling; SkiaSharp maps None exactly to SKFilterMode.Nearest with SKMipmapMode.None. The explicit SKSamplingOptions therefore preserves the previous rendering behavior. Switching this migration to linear or cubic would introduce a separate image-quality behavior change rather than fix a regression.

@kubaflo

kubaflo commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

CI failure analysis — 7c523245e6

The core maui-pr build is green. The completed current-head set is 186 passed, 10 failed, 1 canceled, 1 skipped; Build Analysis and the maui-pr-uitests / maui-pr-devicetests aggregate failures are derivative.

Blocking or payload-correlated

  • Android PhotoPicker regression coverage is not passing. OverlappingPhotoPickerRequestsAreRejected and PickPhotosAsyncShouldReturnFromChildActivity fail in both the regular Android and CoreCLR jobs, in both test runs. Both time out in Issue35826.OpenChildActivityAndRequirePhotoPicker at line 112 while waiting for the child activity, so the tests never reach the picker-completion assertion. This may be setup/harness failure, but it leaves [release/10.0.1xx-sr10] Fix MediaPicker completion from child activities #37724 unvalidated and needs a clean rerun or a test/setup fix. Android job · CoreCLR job
  • The MacCatalyst button regression test fails its product assertion. Issue36749.NativeStyledButtonPreservesInitialAndClearsDetachedBackground expected the in-app result PASS but received FAIL. This directly exercises [release/10.0.1xx-sr10] Preserve custom iOS button styling #37726 and is a merge blocker until explained or fixed. macOS Border/Button job
  • Windows device tests show a repeatable aggregate-branch regression. Packaged and unpackaged runs both fail the same ContentViewTests, TemplatedViewTests, WindowHandlerTests, and PageHandlerTests assertions (Expected: 1, Actual: 2, plus unexpected Path content). The same set reproduced in all three aggregate runs (1563614, 1563619, and current 1563687), while the SR10 base build 1558433 passed its Windows device leg. These failures are adjacent to the Windows content-handler payload in [release/10.0.1xx-sr10] Fix dynamic ContentPresenter assignment #37725 and should not be waived without triage. current Windows Helix job

Baseline or harness noise

  • The Android API 36 SafeArea failures substantially reproduce on the SR10 base build 1558646, including SafeAreaNoWhiteSpaceAfterKeyboardDismissAndEdgeToggle, SafeAreaPerEdgeValidation, and LayoutShouldBeCorrectOnFirstNavigation; treat that job as existing suite instability rather than evidence against the iOS safe-area backport.
  • Android jobs report missing AVDs and repeated ADB-key provisioning failures. The Border and CollectionView suites then show unrelated layout/stale-element failures.
  • The macOS CollectionView job exceeded its 180-minute limit; the same cancellation pattern is present on the SR10 base.
  • The unpackaged Windows WebView timeout occurred only once; it is separate from the duplicated content/page/window failures above.

Recommendation: do not merge this head yet. Get a clean signal for the two PhotoPicker tests, resolve the MacCatalyst Issue36749 failure, and triage the repeatable Windows content/page/window failures. The remaining SafeArea, CollectionView, AVD/ADB, and timeout noise can be handled through normal rerun/known-failure disposition.

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions platform/android platform/ios platform/macos macOS / Mac Catalyst platform/windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants