Files
app-flutter/docs/impl/plans/DASH-NEXT.md
T
2026-10-15 21:32:03 +09:00

4.1 KiB
Raw Blame History

type, status, updated
type status updated
plan draft 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.