0d0940e6b7
/ crosscheck (push) Successful in 2s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
80 lines
4.1 KiB
Markdown
80 lines
4.1 KiB
Markdown
---
|
||
type: plan
|
||
status: draft
|
||
updated: 2026-10-15
|
||
---
|
||
# Dash and app: what comes next
|
||
|
||
Ideas collected on 2026-10-15, before building anything. Each needs a short discussion first;
|
||
specifics are open where marked. Where the app stands now: `lib/README.md` (the shell with its
|
||
swipe-in menu, the Dash, the seven-role palette, `hudFont`), and contracts `signals.json` for
|
||
what the Orin publishes.
|
||
|
||
## 1. Orin status in a top banner, like a phone's
|
||
|
||
A thin strip across the top of the app (the Dash's own top line included) showing the Orin
|
||
the way a phone's status bar shows the phone: its network links and its power.
|
||
|
||
- **Already on the bus, no Orin work needed:** `net_wifi_up` and `net_wifi_ssid`,
|
||
`net_wifi_signal_dbm`; `net_lte_state`, `net_lte_tech`, `net_lte_signal_pct`; `net_tablet_up`;
|
||
`ups_battery_pct`, `ups_state` (charging / discharging / idle), `ups_battery_v`; `can_up`,
|
||
`can_bus_state`; `elm_connected`; temperatures (`orin_tj_temp_c`). GNSS: `gnss_fix`,
|
||
`gnss_satellites` (which undercounts: gpsd drops GPS from its sky view, see below).
|
||
- **To discuss:** which of these earn a place in the strip, and in what form (icons with
|
||
palette roles, a number, or both); what tapping the strip does (the menu's link header
|
||
already goes to Settings).
|
||
- Note for the satellite count: the receiver's own GGA count (e.g. 9) is right where gpsd's
|
||
SKY (e.g. 5) is not; svc-core `gnss` would take it from there.
|
||
|
||
## 2. Dash layouts, and whether navigation is in them
|
||
|
||
Revamp the Dash's layout(s), and decide whether navigation (svc-nav: Valhalla routing, a
|
||
MapLibre map, turn-by-turn on `yukart/nav/guidance`) lives on the Dash, beside it, or not at
|
||
all. Inputs to the decision:
|
||
|
||
- Screen room: the tablet is 1340 × 800 dp in landscape; the boxed pattern already fills it.
|
||
- Several layouts are possible (a driving one, a navigating one), chosen in the menu or by
|
||
state (a route active).
|
||
- New signals worth placing since the first Dash: `vehicle_speed_kph` (CAN), `coolant_temp_c`
|
||
(CAN), `steering_angle_deg`, `main_beam`, `front_fogs`, `front_wiper`, `imu_yaw_rate_dps`.
|
||
|
||
## 3. Media controls for the Android player
|
||
|
||
A play/pause/next strip for whatever plays on the tablet. Google Maps' built-in media controls
|
||
stopped working with Symphonium (the music app in use).
|
||
|
||
- Android's way in: `MediaSessionManager.getActiveSessions()` with a
|
||
`NotificationListenerService` the user grants once in settings. That reaches any app that
|
||
publishes a media session (Symphonium should: check what it exposes). Needs a small Kotlin
|
||
part in the app's Android side (the app already has one: `net.dart`'s method channel).
|
||
- To discuss: where it sits (the Dash, the top banner, a menu page), and how much (track
|
||
title, artwork, seek).
|
||
|
||
## 4. Long shot: a floating window
|
||
|
||
The app as a small, movable overlay over other apps (Maps, the music player), showing a few
|
||
chosen readouts.
|
||
|
||
- Android's way: `SYSTEM_ALERT_WINDOW` ("display over other apps", granted in settings) plus a
|
||
foreground service drawing the overlay; Flutter can render into it with a second engine.
|
||
Picture-in-picture is the lighter alternative, but PiP windows are not interactive.
|
||
- "Customisable (kind of)": which readouts it shows, chosen from the same widgets the Dash
|
||
uses (the boxed pattern is already sized from its box, which suits a small window).
|
||
|
||
## 5. Dark/bright: automatic or fixed, the Android way
|
||
|
||
Today the variant is a switch (the Dash's top-right button, and Settings). Wanted:
|
||
|
||
- **Auto or fixed**, chosen in Settings. Auto could follow Android's own dark mode
|
||
(`MediaQuery.platformBrightness`, which follows the system schedule or sunset), or the
|
||
tablet's ambient light sensor directly (smart-serow switched its theme from a light reading).
|
||
- **Fully Android:** when fixed, the switch should feel like a system control.
|
||
- **Linked with the Dash's quick button:** the dark/bright button at the Dash's top right stays
|
||
the quick way to switch, and follows the same choice (auto or fixed) as Settings. It may move
|
||
into the top banner (item 1) with the Orin's indicators.
|
||
|
||
## Order
|
||
|
||
Not decided. 1 and 5 share the banner and are small; 2 decides the shape of everything else;
|
||
3 and 4 need Android-side work and permissions.
|