Commit Graph
635 Commits
Author SHA1 Message Date
James Rich e981e8e4df feat(remote-shell): size the PTY from the viewport, make output selectable
OPEN and RESIZE carried a hardcoded 80x24, so the remote shell wrapped to
a width the phone does not have. The viewport is now measured in monospace
cells and the session waits for that measurement, so OPEN carries the real
size - 'stty size' on a medium_phone emulator reports 29 54.

Output sits in a SelectionContainer, so a command's output can be copied
out instead of retyped.
2026-08-24 14:51:59 -05:00
James Rich 5a8028172c feat(remote-shell): show session state, inline the caret, add control keys
Three gaps the rig made obvious:

- The ViewModel tracked a full session lifecycle that nothing rendered, so
  a refused or stalled session was indistinguishable from a working one -
  both are a blank screen. A status bar now reports anything that is not
  OPEN and offers Reconnect.
- Pending input was its own list row, putting the caret under the prompt
  rather than after it, which reads as a hung terminal.
- No way to send Ctrl-C, Tab, Esc or arrows. A key bar sends them, and
  typeControlSequence() bypasses the keystroke debounce so an interrupt is
  not queued behind a 500 ms batch window.

The input sink moved into its own composable with hoisted callbacks.

Verified against meshtasticd: 'uname -s' echoes exactly and returns Linux;
Ctrl-C interrupts and returns a fresh prompt.
2026-08-24 14:42:53 -05:00
James Rich 122a627d76 feat(remote-shell): plain terminal UI, turn-taking, and a correct input sink
Three things stood between the April branch and a working session:

- The CRT theatrics are gone - scanlines, phosphor presets, flicker, and
  the AGSL curvature shader, which rendered the block cursor as a skewed
  amber quad in the corner. The terminal is now monospace text on the app
  theme.
- Turn-taking ('talking stick', RemoteShell.flags) landed on the firmware
  side after this branch was written. DMShellModule marks every session
  turn-managed and withholds output until the peer grants a turn, so a
  client that never grants sees an open session and no prompt, and the
  device re-sends RTS every 250 ms until its TX queue fills. We now grant
  on every frame we originate and answer any request immediately.
- The invisible input sink passed a constant "" as its value, so Compose
  re-delivered characters we had already consumed: 'whoami' reached the
  PTY as 'wwhwhowhoa'. It now tracks what it consumed and forwards the
  delta, mapping a shrinking field to backspaces.

Verified against meshtasticd: session opens, 'whoami' echoes exactly and
returns 'root'.
2026-08-24 14:28:39 -05:00
James Rich df70f6b207 fix(remote-shell): re-integrate the April branch with current APIs
- license header year: the tree standardised on 2026, not 2025-2026
- spotless: ktlint's blank-line-between-when-conditions is new since
- MeshDataHandlerImpl: drop shouldBroadcast, removed with the AIDL
  service rework (#5586); nothing broadcasts on this path any more
- RemoteShellViewModel: DataPacket.nodeNumToDefaultId and
  DataPacket.PKC_CHANNEL_INDEX both moved to NodeAddress
2026-08-24 14:04:07 -05:00
James Rich 4d75e88cec Merge origin/main into remote-shell-revival
Conflicts, all re-integration of the April branch into the current tree:
- MeshDataHandlerImpl/Test: keep main's constructor (ServiceScope, session
  context, geofence/beacon collaborators) and re-add remoteShellHandler.
- Capabilities.kt: re-add supportsRemoteShell, still gated to UNRELEASED.
- strings.xml: main re-sorted the file; re-insert remote_shell and
  phosphor_colour in their sorted positions.
- NodesNavigation/AdministrationSection: union both sides.
2026-08-24 12:35:09 -05:00
James Rich 1ab4da0fa6 feat(messaging): per-contact drafts and a quieter composer (#6851) 2026-08-24 10:43:59 -05:00
James Rich ef18af3610 feat(messaging): swipe to reply, double-tap reactions, day separators (#6850) 2026-08-24 15:01:47 +00:00
James Rich e549d24ea3 fix(messaging): clear and suppress notifications for the conversation on screen (#6849) 2026-08-24 15:01:46 +00:00
James RichandClaude Fable 5 9665eafe41 fix(metrics): eliminate the Vico canvas restore underflow crash (#6847)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 10:49:41 +00:00
James RichandClaude Fable 5 3027f544f0 fix(navigation): never let the active backstack empty under NavDisplay (#6844)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 10:46:47 +00:00
James RichandClaude Fable 5 60002de56d chore(detekt): scan flavor, iosMain and jvmAndroidMain sources (#6836)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 23:24:19 +00:00
James RichandClaude Sonnet 5 99075c5dbe feat(hardware): fetch the maintenance UF2 manifest from the API, digest-pinned (#6803)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:58:51 +00:00
James Rich a276cda62c fix(firmware): show the erase wait and upload retries during Legacy DFU (#6812) 2026-08-21 15:15:57 +00:00
James RichandClaude Fable 5 a0e18bf1fb feat(privacy): shield sensitive UI content from non-tool accessibility services (#6794)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 17:34:02 +00:00
James Rich 8d1df38783 fix(dfu): back off correctly when Android throttles BLE scan-starts (#6784) 2026-08-19 19:39:17 -05:00
James RichandClaude Opus 5 93b6988b43 refactor(car)!: remove the Android Auto integration from all build variants (#6779)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 00:14:29 +00:00
James RichandClaude Fable 5 4d9cf8ec18 fix: derive temperature unit from locale temperature preference, not distance system (#6775)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:42:36 +00:00
James Rich 93ccff56fa fix(firmware): bump OTAFIX bootloader pin to 2.3-BP1.5 (#6778) 2026-08-19 23:20:58 +00:00
James RichandClaude Fable 5 9620984a68 feat(tak): add TAK Mesh Channel setting for outbound TAK traffic (#6770)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:04:45 +00:00
James Rich faa2e9041d fix(firmware): point OTAFIX bootloader self-update at meshtastic's own fork (#6769) 2026-08-19 13:50:43 +00:00
James RichandClaude Opus 5 656f481c68 fix(connections): gate manual + recent TCP connects on ACCESS_LOCAL_NETWORK (#6766)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 23:29:46 +00:00
James Rich a394f82cad fix(tak): duplicate ATAK contacts on v1 GeoChat + surface v1-fallback notice (#6759) 2026-08-18 15:23:22 +00:00
James RichandClaude Sonnet 5 b70f57b963 fix(connections): open the region picker directly from the region card (#6743)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 18:21:17 +00:00
James BeechingandClaude Sonnet 5 c8d9795885 feat(node): label SNR quality on the Node Details signal row (#6703)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 17:43:07 +00:00
James Rich 3796787cdf fix(database): raise default cache limit and warn before eviction (#6742) 2026-08-17 17:37:51 +00:00
James RichandClaude Opus 5 19bb682c9c feat(firmware): add nRF52/RP2040 factory erase and OTAFIX bootloader upgrade over USB (#6526)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 16:43:07 +00:00
James RichandClaude Sonnet 5 65a1f5ce4d fix(takserver): route TAK self-test through the real v1/v2 dispatch path (#6746)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 16:10:57 +00:00
James RichandClaude Sonnet 5 7bc6722510 fix(node): confirm before clearing a node's position track (#6745)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 16:00:53 +00:00
James Rich a3bdf265b0 refactor(firmware): dedupe the Android/JVM download byte-copy loop (#6737) 2026-08-16 10:53:29 +00:00
James Rich f28fbfa153 fix(firmware): add fallback painter to device hardware image (#6733) 2026-08-16 09:08:36 +00:00
Jeremiah K 41414f832f fix(discovery): restore radio state after interrupted scans (#6717) 2026-08-15 23:49:38 +00:00
Jeremiah K e9d09a3380 fix(lifecycle): harden packet admission and transport ownership (#6716) 2026-08-15 21:44:17 +00:00
James Rich 517b96380b feat(settings): add About screen with hardware carousel and rename license screen to Acknowledgements (#6721) 2026-08-15 19:48:13 +00:00
James Rich e8af75e09b feat(icons): add Material icons for custom SF Symbols and fix soil telemetry icons (#6722) 2026-08-15 19:40:10 +00:00
James RichandClaude Opus 5 06aee11169 feat(lora): honor a pinned-preset intent advertised for UNSET (#6711)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 18:55:04 +00:00
James RichandClaude Opus 5 7ba54a8214 fix(lora): keep a deliberately pinned preset at fresh setup (#6710)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 18:55:03 +00:00
James RichandClaude Opus 5 1f0d40bad1 feat(demo): make Demo Mode reachable and populated in release builds (#6691)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 00:15:58 +00:00
James RichandClaude Opus 5 fd3cce355d fix(connections): hide the replay demo entry when its capture asset is absent (#6692)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 23:23:38 +00:00
James RichandClaude Opus 5 7114dd3d5b refactor(compose): adopt keyed SideEffect and drop redundant config write-back effects (#6684)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:53:04 +00:00
James RichandClaude Opus 5 fa6a21e997 fix(test): stop leaked coroutine scopes poisoning tests (#6683)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:45:33 +00:00
James RichandClaude Opus 5 72f2d39e9d chore(compose): follow-ups from the Compose 1.12 bump (#6678)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:35:30 +00:00
cf0f7a42a7 fix(lora): validate 2.4 GHz bandwidth options (#6529)
Co-authored-by: James Rich <james.a.rich@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:15:08 +00:00
James RichandClaude Opus 5 e330442dd5 feat(node): surface incomplete nodes with a badge and show them by default (#6673)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 15:56:40 +00:00
James RichandClaude Opus 5 1fdc921489 fix(ui): move event firmware branding off the app bar (#6676)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 15:53:50 +00:00
James RichandClaude Fable 5 80d2ad2046 test(settings): fix flaky installProfile snackbar test (#6675)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:49:02 +00:00
simulationstation 2f387369c1 fix(messaging): disambiguate sender-scoped packet IDs (#6624) 2026-08-13 13:50:37 +00:00
James Rich 81506abec6 chore: Scheduled updates (Graphs, Baseline Profile) (#6667) 2026-08-13 13:13:28 +00:00
simulationstation b4bedd92fc fix(settings): restore channels from device profiles (#6618) 2026-08-13 12:10:18 +00:00
simulationstation 35e2abbe26 fix(map): open Site Planner for the selected node (#6640) 2026-08-13 12:10:16 +00:00
James RichandClaude Opus 5 2a3d04c498 test(node): give the compass lifecycle waits a CI-sized budget (#6670)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 11:56:17 +00:00