Monitor Part 2 of 5 - Simplify Monitor Controls UI - #91
Merged
punk-kaos merged 2 commits intoSep 7, 2026
Conversation
The card took the lower half of the screen while stopped and said the same thing twice: a header band held the word STOPPED and a full width button below it held the word Start. The strip spans the width under the waterfall as its control bar, two rows tall. A colored dot and a state word sit on the left, and a switch replaces the Start button, because the engine is the only thing on this screen that can be switched: transmit is not a mode, since messages go out per frame, and the rig connects when the engine starts, so both appear as state rather than as controls. The dot and the word read Transmitting while a send is on the air, fed by the transmit state the queue already publishes. The second row carries power, transmit offset and time drift on one line, with the audio device picker, sync to next decode, and drift reset behind an overflow menu. Frequency became a compact text button that opens a single choice dialog. No exposed dropdown remains on this screen, so the filter on restore bug that emptied the frequency list after a tab switch is gone by construction rather than suppressed. The release version moved into a new About category in Settings, the SNR tile is gone, and the strings and the status text style that nothing references any more went with them. The audio picker is AudioDevices.showPicker, added beside the list and selection that landed with the extraction.
Contributor
|
I found one UI-state edge case in Right now it returns early when the label/color haven’t changed, but the power switch sync happens after that return. That means the switch can stay visually ON while the engine is actually OFF — for example, if the user turns it on, gets the mic permission prompt, then denies permission. The denial handler calls I’d keep the label/dot repaint optimization, but move the |
… Denying the microphone permission leaves the engine state where it was, so the label and dot are already right and the repaint skip returns early, but the switch itself moved on the tap that opened the permission dialog and was never put back, showing on next to an engine that is off. The label and dot keep the skip, since the per-tick paint cost is what the skip exists for; the switch write is a no-op when the value is unchanged. Verified on the emulator with the microphone permission revoked: flipping the switch and denying the prompt returns the switch to off.
Contributor
Author
|
@punk-kaos ♻️ |
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.
Parts
What
Why
I specifically left out selectFrequency being part of the service because the code is tied closely with part 3 and it makes more sense to combine into that, IMO.
Test
./gradlew :app:testDebugUnitTest./gradlew :app:assembleDebugon the Fire HD 10 and Pixel 7 profile emulators: the switch starts and stops the engine with the dot and state word tracking it, the overflow shows its three actions, the audio picker and frequency dialog both open and select, the strip fits phone landscape next to the nav rail, and withrig_type=qmx_serialthe band profile still filters the preset list.Screenshots
Tablet
Before
After
Phone
Before
After