Repository navigation
feat(ios): simplify the home card to a session switch and a keyboard test box - #257
Merged
Merged
Conversation
…test box
The Dictate tab's status card becomes a session card: "Session on" or
"Session off" with the switch that opens and closes the listening window
(Open Settings when the microphone was refused), and one line about it
("Ends after 15 idle minutes."). The phase headlines (Listening…,
Transcribing…, Pasted, Copied) go; the keyboard shows those where the
user is typing, and only a failure shows here.
"Try it here" is a box to try the Blurt keyboard without leaving the
app. It names its input context, so iOS reopens it on the keyboard last
used in it: after the first switch with the globe key, the Blurt
keyboard. The keyboard inserts at the cursor. The dotted voice element
and the "Dictate here, to the clipboard" link go.
After the keyboard brings the app forward from another app to start a
session, a banner points at iOS's "◀ App" back link. A press that finds
the session off now reads "The session is off. Turn it on to dictate."
rather than "Audio capture failed: Blurt isn't listening…".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
he-james
force-pushed
the
jhe/ios-try-it
branch
from
October 20, 2026 19:57
27acb7f to
e895b5b
Compare
Using the Blurt keyboard shouldn't need a trip to the switch. When the app comes to the front with nothing to ask (an API key saved, consent given, the microphone already allowed), it opens a session by itself, so the keyboard works in place for the session's length; it never puts up a sheet or a permission prompt unasked. A session already open or opening isn't opened twice, so the keyboard's blurt://start and the app coming forward can both ask at once. Also tightens the session card: the card's padding, and the session row sitting close to its line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
QA on the simulator, checked against the Blurt keyboard's own reading of the App Group, found the card saying "Session off" while the window was open, and the user's off undone on the next return to the app. - The card redraws when a session opens. `ListeningWindow.isOpen` read the source's flag first, which isn't observable, so a view that last saw the window closed never read `until` and never redrew; the card stayed "off" over a live microphone (after Allow, and after coming back to the app). `until` is read first now. - Off with the switch stays off, across launches, until the switch or the keyboard's mic asks for a session (`SessionAutoStart`, in BlurtiOSCore, tested). The window ending on its own doesn't count as off. - "The session is off. Turn it on to dictate." goes once a session is on, rather than sitting under "Session on" until the next dictation. - A drag down the Dictate page puts away the keyboard "Try it here" brings up, as on Words and Setup; before, only switching tabs did. - The ◀ hint is reset on leaving the app from either tab; from Words it stayed, and showed on the next ordinary open with no back link to point at. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With a session on whenever Blurt is opened, hands-free on by default started a recording whenever a Blurt keyboard came up afterwards — tapping "Try it here" included — with no tap on the mic. Off by default, the mic records only between the user's taps; the Settings toggle still turns it on. 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 & why
The Dictate tab's status card becomes a simpler session card, plus a way to try the keyboard without leaving the app.
blurt://startand the app coming forward can both ask at once.SessionAutoStart).textInputContextIdentifier), so iOS reopens it on the last keyboard used there. After the first switch with the globe key, that's the Blurt keyboard. iOS has no public API for an app to pick a third-party keyboard outright.iPhone only.
How it was tested
scripts/ios-check.sh: 148 tests (the session status tests are rewritten;SessionAutoStartand the session-off error are new), BlurtiOSCore 97.2%, analyze, periphery (clean build) and the probe build all pass.design-sync.sh --checkand swiftlint--strictare clean.QA fixes
A simulator pass that checked the card against the Blurt keyboard's own reading of the App Group found these. Each is fixed and re-checked:
ListeningWindow.isOpenread the source's unobservable flag first, sountilwent untracked and the card never redrew;untilis read first now.Re-checked with a throwaway XCUITest (setup, consent, relaunch, off then reopen, the box, a hop from Messages warm and cold, the hint, the error), each card state matched against the keyboard's mic label, plus
scripts/ios-keyboard-flows.sh --voice aon the light and dark faces (panel, full, slim bar): all pass.scripts/check.shpasses (or CI will, if I'm not on a Mac)🤖 Generated with Claude Code