feat(swift-ios): customize thread swipe actions - #11530
Open
saphid wants to merge 2 commits into
Open
Conversation
…ingdotgg#11426) (cherry picked from commit 18d8cbf)
saphid
marked this pull request as ready for review
September 13, 2026 05:25
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a new settings workflow and persisted configuration that changes production thread swipe behavior, including full-swipe actions and new defaults for both directions. Because the defaults and gesture side effects affect existing user paths, the change warrants human review. You can add or adjust custom eligibility rules. Learn more. |
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.
What Changed
Adds Settings → Swipe Actions to choose the buttons and full-swipe action independently for physical left and right swipes, including None. The interactive example uses the real Home thread row and lets users try a swipe without changing their threads.
Choices are Settle/Reopen, Pin/Unpin, Archive/Restore, and Delete. They adapt to each thread; an unavailable selected full-swipe action never falls through to another button. Delete asks for confirmation. Preferences persist on the device, with a reset for both directions.
Why
Thread swipes previously had a fixed trailing action list. Users can now put frequent actions on either side. Defaults are Settle/Archive/Delete on the left, with full-swipe Settle, and Pin on the right, with full-swipe Pin.
The separate prerequisite commit backports the exact two-line dependency pin already merged in #11426. Release Smoke otherwise fails because fresh resolution selects an
expo-audioversion that does not match its patch. No SwiftUI source changed in that backport.UI Changes
Actual iPhone 16 Pro simulator recordings on iOS 26.5, dark appearance, with the same disposable local thread fixtures. Relative timestamps naturally advance between captures. GIFs preserve the gestures and settled results; idle automation waits are trimmed, with no speed-up.
Before — fixed left-swipe buttons.
After — the default left-swipe buttons include Archive and can be customized.
The Settings example demonstrates left and right partial and full swipes.
after-preview-edited.mp4
Settings screenshots: before, after, and the thread example
Before
After
Example thread before a swipe
Choosing actions, disabling full swipe, and cancelling Delete
Choosing Delete as the full-swipe action moves it to the outside edge. Turning Settle off updates the preview.
After restarting the app, this fixture has left = Delete with full-swipe Delete, and right = Archive with full swipe set to None. A right full swipe only reveals Archive; a left full swipe asks for deletion confirmation. Cancel keeps the thread.
after-confirmation.mp4
Light appearance, larger text, and iPad layout
iPhone, accessibility-medium text size: the example and controls remain readable; the form scrolls to the full-swipe picker and reset.
iPad mini: a full swipe completes in the regular-width Settings sheet and leaves its feedback visible.
Validation
simulator test, schemeT3Code, selectors-only-testing:T3CodeTests/HomeThreadSwipeActionTestsand-only-testing:T3CodeTests/DailyUXSidebarTests: 58 passed, 0 failed or skipped. Signed simulator build passed.f61fe6a8e30e: Release Smoke, Check, Test, Rust, server tests, and Contract fixtures/native tests passed.7b7c147c4b8c: no actionable findings, process exit 0. Re-review of the exact upstream dependency backport was attempted but hit the session quota (exit 1).Base media:
93ca26695eb1. Native candidate media:7b7c147c4b8c. The final headf61fe6a8e30ediffers only by the credited manifest/lockfile pin, so the native evidence still applies. Verification used disposable local environments and simulators.Checklist
Implementation: GPT-6 in the Codex harness. Independent feature review: Claude Fable 5 high through the direct Claude CLI.