Repository navigation
The Android runner looks like the rest of the fleet - #5
Merged
Merged
Conversation
A design pass proposed giving every job state a pill icon, and the icons are drawn and sitting in icons.tsx: one circle per state, differing only inside, so a column of them reads down cleanly. They are not wired up. ui.tsx already carried the opposite rule with a better argument behind it — device states are read across a whole shelf at a glance, job status is read one row at a time — and a pill that is already a coloured word does not get more legible for gaining a picture. Reverting the lookup and leaving the drawings behind the comment, so the next person to want them finds both the icons and the reason they were not used. Device pills keep their icons, unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A phone on the shelf and the collector in a browser are one product, and until now the Android runner was a title, two bare EditTexts, two buttons and a status line on a default AppCompat background. This gives it the dashboard's screen. The palette, theme and most shape drawables landed in 4ee7ab8 by accident — a commit about waiting jobs swept up work in progress. This is the half that makes them do anything: - activity_main is rebuilt as the dashboard's vocabulary at phone scale: a status hero over the mark's own pulse, the collector and device id as rows in a card rather than boxed inputs, three telemetry tiles, a job card that appears only when there is a job to name, and 48dp controls. - PulseTraceView draws the mark's trace left to right while the agent is in contact, and rests as a complete flat drawing when it is not. It honours ANIMATOR_DURATION_SCALE, so a device set to no animations gets none. - MainActivity binds the service's new phase and telemetry flows. The battery and thermal tiles read locally before the first beacon, because deciding whether to enrol a phone on 8% is a pre-start question, and read from the beacon afterwards, so they show what the collector was actually sent. - The launcher icon becomes adaptive: flat ink background, the phone and pulse inside the 66dp safe circle so no mask clips it, and a monochrome layer for themed icons. The status-bar icon becomes a stroke on the 24 grid; filled, it collapsed into a grey lozenge at notification size. No verdict badge on a finished job: the engines post their own final rows and this process never sees the outcome, so a green pill here would be a guess. The status TextView keeps its id and its text, so the Maestro flows that read the agent's state off this screen keep working. Verified by build only. assembleDebug links every layout and drawable reference, but three emulators wedged under this machine's load and the screen has not been looked at on a device. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 5, 2026
Merged
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.
The Android agent was a text field, a button and a log. It now has the status
screen the rest of the fleet already had: device identity, the job it is
running, a live pulse trace, and the beacon's battery and thermal state read
at a glance rather than parsed out of a log line.
It also gets a launcher icon. The adaptive layers (background, foreground,
monochrome) were already in
drawable/; what was missing was the pre-API-26fallback, so a phone on Android 7 through 25 showed the default silhouette.
mipmap/ic_launcher.xmlis that fallback, drawn from the same mark as thecollector's favicon and the repository's
docs/img/mark.svg.One unrelated commit rides along: the dashboard's job pills went back to words
alone, without the glyph, because the glyph and the word said the same thing
in half the width and the word survives a narrow column.
Verified
./gradlew :app:testDebugUnitTest -Pfleet.skipNativepasses, which is whatCI runs.
npm testincollector/passes end to end, covering the dashboard change.🤖 Generated with Claude Code