Skip to content

feat(swift-ios): customize thread swipe actions - #11530

Open
saphid wants to merge 2 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:feat/swiftui-swipe-settings-20260913
Open

feat(swift-ios): customize thread swipe actions#11530
saphid wants to merge 2 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:feat/swiftui-swipe-settings-20260913

Conversation

@saphid

@saphid saphid commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

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-audio version 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.

Before: a left swipe reveals Delete and Settle

After — the default left-swipe buttons include Archive and can be customized.

After: a left swipe reveals Delete, Archive, and Settle

The Settings example demonstrates left and right partial and full swipes.

Settings: preview partial and full swipes in both directions

after-preview-edited.mp4
Settings screenshots: before, after, and the thread example

Before

Before: Settings has no swipe customization

After

After: Swipe Actions appears in Settings

Example thread before a swipe

Swipe Actions shows a readable example of the Home thread row
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.

Choose full-swipe Delete and disable the Settle button

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.

A disabled full swipe does nothing; full-swipe Delete asks for confirmation and Cancel preserves 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.

Light appearance with larger text in the swipe example Larger-text controls and full-swipe picker remain accessible by scrolling

iPad mini: a full swipe completes in the regular-width Settings sheet and leaves its feedback visible.

iPad Settings example after a full swipe

Validation

  • XcodeBuildMCP 2.7.0 simulator test, scheme T3Code, selectors -only-testing:T3CodeTests/HomeThreadSwipeActionTests and -only-testing:T3CodeTests/DailyUXSidebarTests: 58 passed, 0 failed or skipped. Signed simulator build passed.
  • Integrated iPhone and iPad checks: partial/full previews, action selection, None, real Pin/Unpin, Delete confirmation/cancel, saved preferences after restart, and reset. Saved settings and real thread transitions were checked against their authoritative stores. Accessibility inspection exposes the preview’s named “Try full swipe” action.
  • CI on f61fe6a8e30e: Release Smoke, Check, Test, Rust, server tests, and Contract fixtures/native tests passed.
  • Fresh read-only Claude Fable 5 high review of the complete feature at 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 head f61fe6a8e30e differs only by the credited manifest/lockfile pin, so the native evidence still applies. Verification used disposable local environments and simulators.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Implementation: GPT-6 in the Codex harness. Independent feature review: Claude Fable 5 high through the direct Claude CLI.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Sep 13, 2026
@saphid
saphid marked this pull request as ready for review September 13, 2026 05:25
@macroscopeapp

macroscopeapp Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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.

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

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants