Repository navigation
Restore the voice toolbar feature - #108
Merged
Merged
Conversation
Rambler hid Gboard's collapsed voice toolbar because PixelBoard forced enable_rambler_al_toolbar on. With it off, stock Gboard already shows a minimize key in the Rambler header, collapses the keyboard into the floating voice toolbar, and hands the live Rambler session between the header and the toolbar. - Force enable_rambler_al_toolbar off while Rambler is selected - Keep the Rambler close key and move Gboard's minimize key into the header end extra key slot next to the finish key, matching stock voice typing (18.5.3 only; other versions keep stock placement) - Remove the minimize key on Rambler header teardown and keep it visible when the header hides non-Rambler slots - Add policy, runtime and patch source tests Closes Akshayykadam#98 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gboard builds every Rambler bar key through flb.F(), which labels it "Close Rambler". With the AL toolbar off, TalkBack read the minimize key and the floating toolbar's keyboard key as "Close Rambler" too, next to the real close key. Build both keys through F()'s own builder and give them Gboard's existing localized labels: "Minimize keyboard" (the label stock voice typing uses) and "Back to keyboard". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AnhDuck
marked this pull request as ready for review
October 27, 2026 07:54
Owner
|
Thanks a lot for the high-quality contribution, @AnhDuck! LGTM! Merging now. |
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.
Brings back Gboard's floating voice toolbar for Rambler dictation. While dictating, a new ⏬ button next to ✓ shrinks the keyboard into a small floating bar. Dictation keeps going, and ⌨ brings the full keyboard back.
Closes #98
What changed
enable_rambler_al_toolbar) on, which swaps in Google's newer Rambler bar, and that bar has no minimize button. PixelBoard now forces the flag off while Rambler is selected, which brings back the older bar and its floating toolbar.There's no new setting.
Before and after
Tablet (Xiaomi Pad 7). Tap an image to open it full size.
Phone (Galaxy S24+, after):
Full-quality phone video (MP4)
Testing
./gradlew testpasses (349 tests), including new tests for the flag, the minimize key bookkeeping and the patch wiring. I checked the patched code itself by building the APK and decoding it.Not covered
Risk
Easy to undo: reverting this PR brings back today's Rambler bar. It only changes the Rambler bar while Rambler is the selected voice typing engine.
Technical details
enable_rambler_al_toolbar(mra.nin 18.5.3) picks between Google's AL toolbar (flv: ✕ and ✓ only, not draggable) and the classic Rambler widget (flw: draggable, docks at the bottom). When it's false,fllhands the live Rambler session between the keyboard header and the widget, and the header'sflz.D()returns the minimize key (avn(7)→msg.m(), enter the Rambler widget) instead of the close key. PixelBoard had the flag inAGENTIC_FEATURE_FLAGS, so it was forced on.GboardRambler1803StockPolicynow returnsfalsefor it while Rambler is selected and leaves it alone otherwise.GboardRamblerMinimizeKeyPatch(18.5.3 targets only; it does nothing if any target is missing):flz.D(): add Gboard's minimize key tokey_pos_header_end_extra_key(mub.a), the slot stock voice typing uses for Minimize, then return the stock close key (E(u())) for the close slot.flb.I(...)(header teardown): remove the key from the end slot (mue.a).flz.W(...): Rambler hides the other header slots, so show the end slot again afterwards.flz.D()andflw.D()(the floating widget's ⌨ key):F(icon, action)isC(icon, action)+ label "Close Rambler" (0x7f14004a) +a(). Both keys are now built withC()and labelled withmtm.h():0x7f14167c"Minimize keyboard" (stock voice typing's Minimize label) and0x7f1401ab"Back to keyboard".GboardRamblerMinimizeKeyRuntimelooks up the slot id by name and remembers whether it placed the key, so teardown only removes what it added.RuntimeCallIdentries. No new settings, strings or resources; the labels are Gboard's own strings.Written with Claude Opus 5.5. Reviewed by GPT-6.1 Sol (high reasoning) over 2 rounds: round 1 found the screen reader labels, and round 2 found no issues. Tested on a Samsung Galaxy S24+ (Snapdragon 8 Gen 3) and a Xiaomi Pad 7.
🤖 Generated with Claude Code