Repository navigation
[inflight/current] Add iPhone Duo support to Controls.Foldable - #39596
Merged
Merged
Conversation
Backport the complete implementation while retaining inflight/current's Compatibility test mappings in the two script conflicts. (cherry picked from commit a561eae) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com> Copilot-Session: 741e14bf-fe5c-4150-857c-40b354de3403
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:07 — with
GitHub Actions
Inactive
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:07 — with
GitHub Actions
Inactive
This comment has been minimized.
This comment has been minimized.
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:08 — with
GitHub Actions
Inactive
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:10 — with
GitHub Actions
Inactive
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:12 — with
GitHub Actions
Inactive
kubaflo
temporarily deployed
to
copilot-pat-pool
October 23, 2026 18:12 — with
GitHub Actions
Inactive
4 tasks
kubaflo
added a commit
that referenced
this pull request
Oct 25, 2026
<!-- 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! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Description of Change <!-- Enter description of the fix in this section --> Backports [#38915](#38915), "Add iPhone Duo support to Controls.Foldable", from squash commit `a561eaec4aacbe962416c64491aa5ffbc6bde9ae` to **`inflight/current`**, as explicitly requested. Preserves the source implementation: view/window-scoped reserved-region geometry, hinge monitoring and lifecycle cleanup, scene activation support, shared layout refresh, state triggers, sample updates, and Foldable unit tests. Original author and source coauthors are preserved. The only cherry-pick conflicts were in `.github/scripts/RunTests.ps1` and `.github/scripts/shared/Detect-TestsInDiff.ps1`. Resolution retains this branch's Compatibility test entries and adds the source Foldable mappings. Formatting is scoped to changed C# files; the formatter's unrelated Android null-conditional event rewrite was not retained. **SDK limitation:** the source's native Duo path is enabled only for iOS target platform version 27.1+ (or an explicit `IosDuoBindingsAvailable` override with compatible bindings). This target branch currently defaults to iOS 26.0, so its default build retains fallback behavior rather than enabling Duo APIs. This PR does not upgrade the branch-wide SDK/workload or remove capability/runtime guards. Publishing actual Duo-enabled artifacts requires a compatible iOS 27.1 SDK build configuration. **Validation run in this backport worktree** using .NET SDK `11.0.100-preview.6.26359.118`, targeting this branch's `net10.0` TFMs, and Xcode 26.6: | Command | Result | | --- | --- | | `dotnet test src/Controls/Foldable/test/Controls.Foldable.UnitTests.csproj --nologo --verbosity minimal` | Passed: 39, failed: 0, skipped: 0; rerun after formatting and normal restore. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios26.0 --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-maccatalyst26.0 --no-restore --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-android36.0 --no-restore --nologo --verbosity minimal` | Passed: 3 Gradle Java 8 obsolescence warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios27.1 -p:TargetFrameworks=net10.0-ios27.1 --nologo --verbosity minimal` | Blocked: NETSDK1140, local SDK supports iOS 26.0/26.5, not 27.1. | | `git diff --cached --check` | Passed. | | `git diff --check` | Passed. | Formatting command (passed; `changed_files` contains staged changed `.cs` paths): ```bash changed_files=() while IFS= read -r file; do changed_files+=("$file"); done < <(git diff --cached --name-only -- '*.cs') dotnet format Microsoft.Maui.sln --no-restore --exclude Templates/src --exclude-diagnostics CA1822 --include "${changed_files[@]}" --verbosity quiet ``` PowerShell syntax check (passed for all three source script files): ```powershell $files=@(".github/scripts/RunTests.ps1", ".github/scripts/shared/Detect-TestsInDiff.ps1", ".github/scripts/shared/Detect-TestsInDiff.Tests.ps1") foreach ($file in $files) { $tokens=$null; $errors=$null [System.Management.Automation.Language.Parser]::ParseFile((Join-Path $PWD $file), [ref]$tokens, [ref]$errors) > $null if ($errors.Count) { $errors | Write-Error; exit 1 } Write-Output "Parsed $file" } ``` Build/test/format subprocesses ran with `GH_TOKEN`, `GITHUB_TOKEN`, and `COPILOT_GITHUB_TOKEN` removed from their environments. A `--no-restore` test attempt after the explicit 27.1 restore probe encountered changed assets; normal restore and the full 39-test rerun above succeeded. **Not run:** native iOS 27.1/Duo compilation or simulator/device runtime validation, sample app build/runtime validation, Windows validation, or pipeline Pester tests. No XCTest or host UI automation was used. Source PR validation is not claimed as a result of this backport. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Backport of [#38915](#38915); no separate issue. <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 741e14bf-fe5c-4150-857c-40b354de3403
kubaflo
added a commit
that referenced
this pull request
Oct 26, 2026
<!-- 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! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Description of Change <!-- Enter description of the fix in this section --> Backports [#38915](#38915), "Add iPhone Duo support to Controls.Foldable", from squash commit `a561eaec4aacbe962416c64491aa5ffbc6bde9ae` to **`inflight/current`**, as explicitly requested. Preserves the source implementation: view/window-scoped reserved-region geometry, hinge monitoring and lifecycle cleanup, scene activation support, shared layout refresh, state triggers, sample updates, and Foldable unit tests. Original author and source coauthors are preserved. The only cherry-pick conflicts were in `.github/scripts/RunTests.ps1` and `.github/scripts/shared/Detect-TestsInDiff.ps1`. Resolution retains this branch's Compatibility test entries and adds the source Foldable mappings. Formatting is scoped to changed C# files; the formatter's unrelated Android null-conditional event rewrite was not retained. **SDK limitation:** the source's native Duo path is enabled only for iOS target platform version 27.1+ (or an explicit `IosDuoBindingsAvailable` override with compatible bindings). This target branch currently defaults to iOS 26.0, so its default build retains fallback behavior rather than enabling Duo APIs. This PR does not upgrade the branch-wide SDK/workload or remove capability/runtime guards. Publishing actual Duo-enabled artifacts requires a compatible iOS 27.1 SDK build configuration. **Validation run in this backport worktree** using .NET SDK `11.0.100-preview.6.26359.118`, targeting this branch's `net10.0` TFMs, and Xcode 26.6: | Command | Result | | --- | --- | | `dotnet test src/Controls/Foldable/test/Controls.Foldable.UnitTests.csproj --nologo --verbosity minimal` | Passed: 39, failed: 0, skipped: 0; rerun after formatting and normal restore. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios26.0 --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-maccatalyst26.0 --no-restore --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-android36.0 --no-restore --nologo --verbosity minimal` | Passed: 3 Gradle Java 8 obsolescence warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios27.1 -p:TargetFrameworks=net10.0-ios27.1 --nologo --verbosity minimal` | Blocked: NETSDK1140, local SDK supports iOS 26.0/26.5, not 27.1. | | `git diff --cached --check` | Passed. | | `git diff --check` | Passed. | Formatting command (passed; `changed_files` contains staged changed `.cs` paths): ```bash changed_files=() while IFS= read -r file; do changed_files+=("$file"); done < <(git diff --cached --name-only -- '*.cs') dotnet format Microsoft.Maui.sln --no-restore --exclude Templates/src --exclude-diagnostics CA1822 --include "${changed_files[@]}" --verbosity quiet ``` PowerShell syntax check (passed for all three source script files): ```powershell $files=@(".github/scripts/RunTests.ps1", ".github/scripts/shared/Detect-TestsInDiff.ps1", ".github/scripts/shared/Detect-TestsInDiff.Tests.ps1") foreach ($file in $files) { $tokens=$null; $errors=$null [System.Management.Automation.Language.Parser]::ParseFile((Join-Path $PWD $file), [ref]$tokens, [ref]$errors) > $null if ($errors.Count) { $errors | Write-Error; exit 1 } Write-Output "Parsed $file" } ``` Build/test/format subprocesses ran with `GH_TOKEN`, `GITHUB_TOKEN`, and `COPILOT_GITHUB_TOKEN` removed from their environments. A `--no-restore` test attempt after the explicit 27.1 restore probe encountered changed assets; normal restore and the full 39-test rerun above succeeded. **Not run:** native iOS 27.1/Duo compilation or simulator/device runtime validation, sample app build/runtime validation, Windows validation, or pipeline Pester tests. No XCTest or host UI automation was used. Source PR validation is not claimed as a result of this backport. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Backport of [#38915](#38915); no separate issue. <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 741e14bf-fe5c-4150-857c-40b354de3403
github-actions Bot
pushed a commit
that referenced
this pull request
Oct 28, 2026
<!-- 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! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Description of Change <!-- Enter description of the fix in this section --> Backports [#38915](#38915), "Add iPhone Duo support to Controls.Foldable", from squash commit `a561eaec4aacbe962416c64491aa5ffbc6bde9ae` to **`inflight/current`**, as explicitly requested. Preserves the source implementation: view/window-scoped reserved-region geometry, hinge monitoring and lifecycle cleanup, scene activation support, shared layout refresh, state triggers, sample updates, and Foldable unit tests. Original author and source coauthors are preserved. The only cherry-pick conflicts were in `.github/scripts/RunTests.ps1` and `.github/scripts/shared/Detect-TestsInDiff.ps1`. Resolution retains this branch's Compatibility test entries and adds the source Foldable mappings. Formatting is scoped to changed C# files; the formatter's unrelated Android null-conditional event rewrite was not retained. **SDK limitation:** the source's native Duo path is enabled only for iOS target platform version 27.1+ (or an explicit `IosDuoBindingsAvailable` override with compatible bindings). This target branch currently defaults to iOS 26.0, so its default build retains fallback behavior rather than enabling Duo APIs. This PR does not upgrade the branch-wide SDK/workload or remove capability/runtime guards. Publishing actual Duo-enabled artifacts requires a compatible iOS 27.1 SDK build configuration. **Validation run in this backport worktree** using .NET SDK `11.0.100-preview.6.26359.118`, targeting this branch's `net10.0` TFMs, and Xcode 26.6: | Command | Result | | --- | --- | | `dotnet test src/Controls/Foldable/test/Controls.Foldable.UnitTests.csproj --nologo --verbosity minimal` | Passed: 39, failed: 0, skipped: 0; rerun after formatting and normal restore. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios26.0 --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-maccatalyst26.0 --no-restore --nologo --verbosity minimal` | Passed: 0 warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-android36.0 --no-restore --nologo --verbosity minimal` | Passed: 3 Gradle Java 8 obsolescence warnings, 0 errors. | | `dotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios27.1 -p:TargetFrameworks=net10.0-ios27.1 --nologo --verbosity minimal` | Blocked: NETSDK1140, local SDK supports iOS 26.0/26.5, not 27.1. | | `git diff --cached --check` | Passed. | | `git diff --check` | Passed. | Formatting command (passed; `changed_files` contains staged changed `.cs` paths): ```bash changed_files=() while IFS= read -r file; do changed_files+=("$file"); done < <(git diff --cached --name-only -- '*.cs') dotnet format Microsoft.Maui.sln --no-restore --exclude Templates/src --exclude-diagnostics CA1822 --include "${changed_files[@]}" --verbosity quiet ``` PowerShell syntax check (passed for all three source script files): ```powershell $files=@(".github/scripts/RunTests.ps1", ".github/scripts/shared/Detect-TestsInDiff.ps1", ".github/scripts/shared/Detect-TestsInDiff.Tests.ps1") foreach ($file in $files) { $tokens=$null; $errors=$null [System.Management.Automation.Language.Parser]::ParseFile((Join-Path $PWD $file), [ref]$tokens, [ref]$errors) > $null if ($errors.Count) { $errors | Write-Error; exit 1 } Write-Output "Parsed $file" } ``` Build/test/format subprocesses ran with `GH_TOKEN`, `GITHUB_TOKEN`, and `COPILOT_GITHUB_TOKEN` removed from their environments. A `--no-restore` test attempt after the explicit 27.1 restore probe encountered changed assets; normal restore and the full 39-test rerun above succeeded. **Not run:** native iOS 27.1/Duo compilation or simulator/device runtime validation, sample app build/runtime validation, Windows validation, or pipeline Pester tests. No XCTest or host UI automation was used. Source PR validation is not claimed as a result of this backport. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Backport of [#38915](#38915); no separate issue. <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 741e14bf-fe5c-4150-857c-40b354de3403
5 tasks done
3 tasks done
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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!
Description of Change
Backports #38915, "Add iPhone Duo support to Controls.Foldable", from squash commit
a561eaec4aacbe962416c64491aa5ffbc6bde9aetoinflight/current, as explicitly requested.Preserves the source implementation: view/window-scoped reserved-region geometry, hinge monitoring and lifecycle cleanup, scene activation support, shared layout refresh, state triggers, sample updates, and Foldable unit tests. Original author and source coauthors are preserved.
The only cherry-pick conflicts were in
.github/scripts/RunTests.ps1and.github/scripts/shared/Detect-TestsInDiff.ps1. Resolution retains this branch's Compatibility test entries and adds the source Foldable mappings. Formatting is scoped to changed C# files; the formatter's unrelated Android null-conditional event rewrite was not retained.SDK limitation: the source's native Duo path is enabled only for iOS target platform version 27.1+ (or an explicit
IosDuoBindingsAvailableoverride with compatible bindings). This target branch currently defaults to iOS 26.0, so its default build retains fallback behavior rather than enabling Duo APIs. This PR does not upgrade the branch-wide SDK/workload or remove capability/runtime guards. Publishing actual Duo-enabled artifacts requires a compatible iOS 27.1 SDK build configuration.Validation run in this backport worktree using .NET SDK
11.0.100-preview.6.26359.118, targeting this branch'snet10.0TFMs, and Xcode 26.6:dotnet test src/Controls/Foldable/test/Controls.Foldable.UnitTests.csproj --nologo --verbosity minimaldotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios26.0 --nologo --verbosity minimaldotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-maccatalyst26.0 --no-restore --nologo --verbosity minimaldotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-android36.0 --no-restore --nologo --verbosity minimaldotnet build src/Controls/Foldable/src/Controls.Foldable.csproj -f net10.0-ios27.1 -p:TargetFrameworks=net10.0-ios27.1 --nologo --verbosity minimalgit diff --cached --checkgit diff --checkFormatting command (passed;
changed_filescontains staged changed.cspaths):PowerShell syntax check (passed for all three source script files):
Build/test/format subprocesses ran with
GH_TOKEN,GITHUB_TOKEN, andCOPILOT_GITHUB_TOKENremoved from their environments. A--no-restoretest attempt after the explicit 27.1 restore probe encountered changed assets; normal restore and the full 39-test rerun above succeeded.Not run: native iOS 27.1/Duo compilation or simulator/device runtime validation, sample app build/runtime validation, Windows validation, or pipeline Pester tests. No XCTest or host UI automation was used. Source PR validation is not claimed as a result of this backport.
Issues Fixed
Backport of #38915; no separate issue.