Repository navigation
feat: show progress while hanging up and close the HUD afterwards - #4
Merged
Merged
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Asynchronous hang-up rejection leaves End Call disabled until the timeout instead of allowing an immediate retry.
1 open issue
What changed in this PR
This PR improves Pickup’s hang-up feedback by showing progress while awaiting phone confirmation and closing the call HUD after a locally ended call.
Changes:
- Adds a disabled “Ending…” button with a spinner and a 10-second retry timeout.
- Hides the ended-call HUD for local hang-ups and cancellations while preserving explanations for other outcomes.
- Adds English/German text and updates presentation and UI tests.
| File | Description |
|---|---|
App/Tests/PickupUITests/Cases/CallScenarioUITests.swift |
Expects local hang-up and cancellation to close the HUD. |
App/Tests/PickupAppTests/StatusItemClickTests.swift |
Listed as review context; no diff supplied. |
App/Tests/PickupAppTests/EndedCallPresentationTests.swift |
Tests which call endings retain the HUD. |
App/Sources/Pickup/CallUIModels.swift |
Adds ending progress state and ended-call presentation logic. |
App/Sources/Pickup/CallHUDView.swift |
Displays and disables the progress button. |
App/Sources/Pickup/AppModel.swift |
Tracks hang-up progress and controls HUD dismissal. |
App/Resources/Localizable.xcstrings |
Adds translated progress text and translator guidance. |
Review effort: Balanced
macx
force-pushed
the
feat/hang-up-progress
branch
from
October 23, 2026 10:35
17e8331 to
00d7b03
Compare
The phone confirms a hang-up after one or two seconds; until then the End Call button showed nothing, and afterwards the HUD switched to an ended state with Close. Now the button shows a spinner and "Ending…" and is disabled until the phone confirms (re-enabled if the command fails or nothing happens within 10 s), and a call hung up or cancelled on this Mac closes the HUD right away. Calls ended by the other side, busy, failed or lost still show the ended state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A rejection arrives asynchronously through CallEngine.lastCommandFailure, not through the catch, so the button stayed disabled until the 10 s timeout. The pending state is now cleared on an endCall failure, and each attempt's timeout only clears its own attempt, never a retry (HangUpProgress, with regression tests). Addresses the review comment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tate Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macx
force-pushed
the
feat/hang-up-progress
branch
from
October 23, 2026 10:47
00d7b03 to
12642fa
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Accepting in the banner makes it key; when it closes, the HUD becomes key with End Call focused, so Return can end the call (kept on purpose, like a call placed from Pickup). The test now expects that. Return/Esc are no longer simulated: key events posted to the process do not reach the non-activating panel while Pickup is inactive (real key presses do). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macx
added a commit
that referenced
this pull request
Oct 23, 2026
Release **v0.2.0**, prepared by the prepare-release workflow from main at `cd9119c`. ### Features * focus the call panel from the menu bar; Return ends a focused call ([#2](#2)) ([61068ee](61068ee)) * larger text and higher contrast in the call windows ([#3](#3)) ([701dd2c](701dd2c)) * show progress while hanging up and close the HUD afterwards ([#4](#4)) ([780e8a6](780e8a6)) ### Before merging (squash merge, keep the title) - [x] CI is green on this pull request - [x] Local gate with UI tests on this branch: `scripts/verify.sh` - [x] Hardware smoke test with the phone if Bluetooth code changed - [x] No other pull request was merged into main since this one was prepared (otherwise re-run prepare-release) Merging starts release.yml: tag v0.2.0, build, GitHub Release (pre-release). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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 and why
Hanging up felt unresponsive and then confusing: the phone confirms the hang-up after one or two seconds, during which End Call showed nothing, and afterwards the HUD switched to an "ended"/"cancelled" state with a Close button.
How it was tested
scripts/verify.sh --quickpasses (build, lint, localization, unit tests, security checks)EndedCallPresentationTests; UI scenario tests for hang-up and cancel now expect the HUD to close without an ended state; compiled, not run here)scripts/verify.sh(UI tests) and check the spinner in light/dark and GermanChecklist
App/Resources/Localizable.xcstringswith a German translation and a translator commentOverlaps with #2 (End Call button) and #3 (call window components); whichever merges later needs a small rebase.
🤖 Generated with Claude Code