Commit Graph

804 Commits

Author SHA1 Message Date
James Rich
32b2319197 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5231)
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
0ab6285340 fix(desktop): unbreak release builds (CMP beta03 + pwsh -P quoting) (#5230)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
85d923dfe5 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5227)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
c2b4826717 feat: Enhance mPWRD-os WiFi provisioning success state and UI components (#5225)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
e500c9df66 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5224)
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
3a4cae5d0b fix(ble): unblock reconnect + kable audit (logging, priority, backoff, StateFlow) (#5222)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
939132f2ae fix(ble): cleanup races discovered while reviewing #5207 (#5221)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
jdogg172
35e9ea6e89 fix(ble): ensure GATT cleanup runs under NonCancellable on cancellation (#5207)
Co-authored-by: James Rich <james.a.rich@gmail.com>
Co-authored-by: James Rich <2199651+jamesarich@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
46b228d201 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5220)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
37b805afc3 feat(connections): unified device list, ACCESS_LOCAL_NETWORK, transport filter chips (#5219)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
24f19db79a feat(node): smoother remote-admin UX with per-node session tracking (#5217)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
15dce97bd5 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5216)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
3f7cbaee7e fix: MQTT proxy connection and probe test failures (#5215)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
ae610bbba5 refactor: eliminate Accompanist permissions library (#5211)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
69ce7e63a4 feat(service): send polite ToRadio(disconnect=true) before transport close (#5210)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
renovate[bot]
338fde22c4 chore(deps): update core/proto/src/main/proto digest to 97ea65a (#5212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: James Rich <james.a.rich@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
652c898d6b feat(firmware): nRF52 BLE Legacy DFU support (#5209)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
renovate[bot]
a5a71d0e03 chore(deps): update core/proto/src/main/proto digest to d004f50 (#5205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
8df6efb9c4 fix(canned-messages): enable multiline text editing for long message lists (#5203)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:09:00 +00:00
James Rich
14e8ab4e2b fix(transport): improve BLE / TCP / USB reconnect and handshake resilience (#5196)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:08:59 +00:00
James Rich
65960913a4 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5195)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:08:59 +00:00
James Rich
266d617c61 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5193)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:08:59 +00:00
James Rich
7b797dfa7d chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5189)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:08:59 +00:00
James Rich
bb31d0a2cd chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5186)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-24 19:08:59 +00:00
James Rich
84e70d01a3 feat(mqtt): adopt mqttastic-client-kmp 0.2.0 — disconnect reasons + Test Connection (#5181)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-18 03:05:31 +00:00
James Rich
5c870028d4 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5177)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-18 03:05:31 +00:00
copilot-swe-agent[bot]
cb5f11f996 fix(auto): address branch review — cleanup, ProGuard, dedupe, API trim
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/ade4e6ae-8e8e-4651-a985-a8042f86e7c6

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 20:16:24 +00:00
copilot-swe-agent[bot]
67e300da96 fix(auto): apply Android Auto best-practices audit fixes
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/8d768315-9c58-4b16-8912-d0b4f97c3681

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 18:29:52 +00:00
James Rich
d70c3b66dc chore(strings): remove 4 unused string resources (#5173)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:39 +00:00
James Rich
b49e8b2aaf fix(ui): finish accessibility roles and action labels for clickable surfaces (#5170)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:39 +00:00
James Rich
d69b102945 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5163)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
6ab3b96d4a chore(r8): remove redundant keep rules covered by consumer rules (#5172)
Co-authored-by: GitHub Copilot CLI <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
9c8085b0e3 refactor: consolidate metric formatting through MetricFormatter (#5169)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
1cd05d5d78 test: migrate MigrationTest to runTest and add missing repository fakes (#5171)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
2a6e27de09 fix(ui): stable LazyColumn keys, semantic roles, and content descriptions (#5168)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
5eba7e4dce fix: redact MeshLog proto secrets and centralize Compose keep-rules (#5166)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
7f1ea28d47 refactor: use injected ioDispatcher and ApplicationCoroutineScope (#5167)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
305a487dd7 feat(mqtt): migrate to MQTTastic-Client-KMP (#5165)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:56:38 +00:00
James Rich
1d258daded test(notifications): add unit tests for reply/markAsRead/reaction receivers
Adds Robolectric-based androidHostTest coverage for the three notification
BroadcastReceivers. Verifies:

- ReplyReceiver sends a DataPacket derived from the contactKey then calls
  appendOutgoingMessage followed by markConversationRead in that order.
- MarkAsReadReceiver invokes markConversationRead, ignores wrong actions,
  and drops intents missing the contact key.
- ReactionReceiver dispatches a ServiceAction.Reaction and, on success,
  calls markConversationRead. Failures in dispatch short-circuit markRead.

Uses the existing FakeRadioController and FakeMeshServiceNotifications
(marked open so tests can record calls) plus mokkery for ServiceRepository,
mirroring the pattern in SendMessageWorkerTest. Fakes are wired through a
per-test Koin graph to match each receiver's KoinComponent injection.

Also fixes a pre-existing compile break in MeshServiceNotificationsImplTest
that was missing the shortcutManager constructor argument.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:51:00 -05:00
James Rich
eb3a27a3d3 feat(auto): append outgoing reply to MessagingStyle for brief confirmation
Before cancelling a conversation notification in response to an inline
reply, post one final update that appends the outgoing text to the
MessagingStyle history, attributed to the local user. This gives
assistants such as Android Auto a tick to observe the sent message in
the notification's message history and surface a 'reply sent' style
confirmation before markConversationRead cancels the notification.

Extract the 'me' Person construction into buildMePerson() and share it
between showGroupSummary and createConversationNotification. The
conversation builder now optionally takes an extraOutgoingMessage which
is appended to the MessagingStyle (actions and when-timestamp continue
to be anchored on the last incoming message).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:44:08 -05:00
James Rich
6d70d154e6 refactor(notifications): share markConversationRead helper across receivers
Extract the 'clear unread count + cancel message notification' pair into
a single suspend helper on MeshServiceNotifications so ReplyReceiver,
MarkAsReadReceiver, and ReactionReceiver use one consistent code path.
ReactionReceiver now also clears unread and cancels the notification
once the reaction dispatch succeeds, matching the other receivers.
Receivers that only depended on PacketRepository for this pair drop
that injection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:42:44 -05:00
James Rich
9c75f5a3f4 fix(auto): always cancel group summary when dismissing a conversation
Reading notificationManager.activeNotifications immediately after
cancel() races with NotificationManagerService, so the count of
remaining children was unreliable and the summary could linger.
Drop it unconditionally — the next inbound message rebuilds it via
showGroupSummary().

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:25:13 -05:00
James Rich
fb606db067 fix(auto): refresh group summary when a conversation is cancelled
After clearing a message notification we left the GROUP_KEY_MESSAGES
summary in place, which on Android Auto leaves a lingering HUN /
summary entry for the already-dismissed conversation. Cancel the
summary when no child notifications remain, and refresh it otherwise.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:21:37 -05:00
James Rich
b5a631ebd7 fix(auto): only include unread messages in conversation notif
The MIN_CONTEXT_MESSAGES fallback (pull 3 most recent history
messages when unread < 3) was injecting already-read historical
messages into the MessagingStyle. On Android Auto, Gearhead reads
every message in the style aloud and shows them stacked on the
HUN, so old context was announced alongside the new one.

Just show the unread messages (up to MAX_HISTORY_MESSAGES). If
nothing is unread, don't post at all — we only call this from
paths that already check for fresh inbound content.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:17:48 -05:00
James Rich
c1073f3e12 fix(auto): don't re-post conversation notif on outgoing messages
rememberDataPacket() was invoking handlePacketNotification() for
outgoing packets too, which made our own reply race with the
cancel issued by ReplyReceiver and repost the conversation with
ourselves as the visible sender (lastMessage.node == ourNode).

Also harden ensureShortcutForNotification for DMs: the remote
contact is deterministic from contactKey (channel + nodeId), so
derive the shortcut Person from the resolved contact node rather
than whatever message happens to be newest in history. This keeps
the Android Auto HUN labelled correctly even if the message list
ends with an outgoing packet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:12:48 -05:00
James Rich
72e27e32cc chore(auto): log ReplyReceiver entry and completion
Temporary diagnostic logging added while investigating why Android Auto
inline replies don't appear to dismiss the conversation notification
for some users. Remove or downgrade to verbose once confirmed working.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 09:02:20 -05:00
James Rich
d17e715a45 fix(auto): clear unread count after inline reply
ReplyReceiver was only cancelling the notification after an inline
reply; PacketRepository.clearUnreadCount was never called, so the
message stayed 'unread' in the app (and in the Android Auto favorites
unread badges) even after the user replied from the HUN.

Mirror MarkAsReadReceiver by invoking clearUnreadCount with nowMillis
before cancelling the notification.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 08:53:11 -05:00
James Rich
07772917c3 fix(auto): project messaging notifications to Android Auto
Gearhead's MsgNotifParser was rejecting Meshtastic notifications with:
- 'No semantic reply action found'
- 'No semantic mark-as-read action found'
- 'added an invalid shortcut'

Fixes:
- Tag reply action with SEMANTIC_ACTION_REPLY + setShowsUserInterface(false)
  + setAllowGeneratedReplies(true) so Gearhead/Assistant can surface it.
- Tag mark-as-read action with SEMANTIC_ACTION_MARK_AS_READ.
- Publish an on-demand long-lived conversation shortcut whose id matches
  the notification's setShortcutId(contactKey). Previously only favorites
  + channels at index 0 had shortcuts, so DMs received on a non-zero
  channel referenced an unpublished shortcut and Android Auto refused to
  project them.

Verified on Pixel 6a + DHU 2.0: notifications now carry matching
long-lived shortcuts and project as messaging HUNs with reply, mark-read
and reaction actions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 08:48:38 -05:00
James Rich
36f770fd0b fix(auto): preserve raw channel index for shortcut/unread contactKey
Notifications and message routing key channel conversations by the raw
protocol channel index (e.g. "2^all"), but publishShortcuts and the
car screen were re-indexing after filtering out unnamed channels, so
named channels after a gap would never match their notification's
shortcutId/locusId and their unread badge would stay at zero.

Preserve the original index via mapIndexedNotNull { index to settings }.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 08:02:55 -05:00
James Rich
86bb9583b0 fix(auto): extract shortcut builders to fix LongMethod + catch specific exceptions
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 07:56:34 -05:00