Files
buzz/mobile/test
Tom Brow d839d3731a fix(mobile): swipe left to reply so swipe-back keeps rightward drags (#9127)
Swipe-to-reply used a rightward drag, the same direction as iOS
swipe-back. A rightward drag that started on a message armed a reply
instead of going back, and the reply recognizer claimed horizontal drags
in either direction once they started on a bubble.

Now a message slides **left** to reveal Reply on its trailing side, and
the reply recognizer only wins the gesture arena for leftward drags.
Rightward drags that start on a message are left to back navigation. The
threshold, haptic, rubber-band resistance and thread destination are
unchanged. On bubbles that reach the row's trailing edge (your own
messages), the Reply feedback is kept on screen beneath the bubble, so
the slide uncovers it.

### Demo

Before (main): a rightward drag that starts on a message arms Reply and
slides the bubble, instead of being left to back navigation.


https://github.com/user-attachments/assets/f149cd11-c326-466c-a17b-3e4698708af8

After (this PR): a rightward drag on a bubble does nothing, a leftward
swipe reveals Reply and opens the thread, and edge swipe-back returns to
the channel.


https://github.com/user-attachments/assets/539a5682-1032-452e-a57b-6f27abfe2d64

### Validation

- Focused existing validation: the swipe-reply widget tests were
mirrored to the new direction for channel and thread rows, own and
incoming messages. They now also check that a rightward drag starting on
a bubble reaches an outer horizontal drag handler (a stand-in for
swipe-back) without moving the row or opening a reply. The Bestie DM
test's reply drag was flipped too.
- The full mobile suite (`just mobile-check` and `just mobile-test`)
passes.
- Automated simulator run (iPhone 17 Pro, debug build): swiped left on
outgoing and incoming bubbles (feedback shows on the trailing side,
thread opens), edge swipe-back from a thread and channel, and a
rightward drag starting on a bubble (no reply). The demo above was
recorded on a synthetic private channel (own messages only;
incoming-message rows were covered in the earlier run and by the widget
tests). Human testing is waived under the owner's standing exception.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Tom Brow <tomb@squareup.com>
Co-authored-by: Tom Brow <tomb@squareup.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 15:40:22 -08:00
..