Files
app-flutter/docs/impl/plans/DASH-NEXT.md
T
mikkeli 78a6564f0a
/ crosscheck (push) Successful in 1s
CI / Analyze & Test (push) Successful in 19s
CI / Debug APK (push) Successful in 1m5s
Dark/bright: Auto (Android's dark theme), Dark or Bright, kept across restarts
Settings has a segmented Auto / Dark / Bright. Auto follows platformBrightness, so
Android's schedule too. The Dash's quick button holds the other variant; a long press
is auto again. The mode is kept with shared_preferences.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 22:14:29 +09:00

86 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
**Done (2026-10-15):** Settings has Auto / Dark / Bright (a segmented control, kept across
restarts). Auto follows Android's dark theme (`platformBrightness`, so its schedule too). The
Dash's button holds the other variant, and a long press returns it to auto. Not done: the
ambient light sensor as an auto source, and moving the button into the banner (item 1).
What was asked:
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.