Commit Graph

6407 Commits

Author SHA1 Message Date
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
renovate[bot]
d1875f2123 chore(deps): update agp to v9.2.0 (#5201)
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
renovate[bot]
a505fa5b0a chore(deps): update com.android.tools:common to v32.2.0 (#5202)
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
cafd0767bc fix(compass): stop coarse network fixes from clobbering GPS fixes (#5200)
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]
2aee5543cc chore(deps): update org.jetbrains.androidx.navigation3:navigation3-ui to v1.1.0 (#5199)
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
a1bdd09d4d fix(fdroid): prevent NotImplementedError crash on firmware release fetch (#5197)
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
Copilot
40adf8601d Fix node-details remove action to preserve confirmation flow (#5192)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@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: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
renovate[bot]
b94a31d0ad chore(deps): update plugin com.gradle.develocity to v4.4.1 (#5194)
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: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
renovate[bot]
7c674cfd54 chore(deps): update vico to v3.2.0-next.1 (#5191)
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:08:59 +00:00
renovate[bot]
730f340888 chore(deps): update fastlane to v2.233.0 (#5190)
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: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
cc6114bafd fix(widget): drive updates via debounced state observer (#5185)
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
renovate[bot]
7a21d9c7d9 chore(deps): update compose-multiplatform to v1.11.0-rc01 (#5184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-18 03:05:31 +00:00
James Rich
b290db7019 chore(deps): split androidx-compose version ref from CMP (#5183)
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
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
James Rich
9b0e1cc8d7 fix(deps): pin androidx-compose runtime-tracing/ui-test to CMP version (#5179)
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
7207ab3345 Revert "diag(r8): disable minify for release builds (animation-freeze diagnostic)" (#5176)
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
84551985bf diag(r8): disable minify for release builds (animation-freeze diagnostic) (#5174)
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
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
copilot-swe-agent[bot]
b828a1271c style(auto): expand TabTemplate tab builder chains for readability
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/e79e1ea2-bea6-4b71-acb3-13dbdbce363f

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:22:49 +00:00
copilot-swe-agent[bot]
2e74af770b feat(auto): polish - extract CarScreenDataBuilder, add unit tests, fix batteryStr, DRY row builder
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/e79e1ea2-bea6-4b71-acb3-13dbdbce363f

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 17:19:47 +00:00
copilot-swe-agent[bot]
9f0ead2518 feat(auto): align Auto node/message row UI with phone NodeItem and ContactItem
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/ebb54cc3-35cd-4c25-afd2-4b7fbaa05a5d

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 16:53:08 +00:00
copilot-swe-agent[bot]
849aca797b plan: align Auto node/message row UI with phone NodeItem and ContactItem
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/ebb54cc3-35cd-4c25-afd2-4b7fbaa05a5d

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 16:49:59 +00:00
copilot-swe-agent[bot]
7c15c7bcb4 feat(auto): unified Messages tab — channels + DMs, mirroring Contacts screen
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/8757a33e-0881-45a4-9c3b-5489642c413d

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 16:32:46 +00:00
copilot-swe-agent[bot]
01b1759503 feat(auto): spec-compliance — minCarApiLevel=1, runtime API fallback, onNewIntent, loading state
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/50f9540a-3ba0-4e05-8e06-83cc8c4c93aa

Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
2026-04-17 16:13:09 +00:00
James Rich
38b74441fb fix(auto): align TabTemplate with required Car API level 6 and tintable icons
- TabTemplate is @RequiresCarApi(6); bump manifest minCarApiLevel from 2
  to 6 so the host doesn't reject the template at runtime.
- Use a proper anonymous TabCallback (androidx's TabCallback is not a
  Kotlin fun interface) and import top-level TabContents (it is not a
  nested type of TabTemplate); the lambda/nested references don't
  compile.
- Mark tab CarIcons tintable (CarColor.DEFAULT) so day-mode AAOS themes
  don't render white-on-white.
- Extract buildChannelRow to keep buildChannelsTemplate under the
  NestedBlockDepth detekt threshold.
- Clarify MAX_LIST_ITEMS KDoc (per-ListTemplate host constraint, not an
  API-level property).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 10:26:15 -05:00
Garth Vander Houwen
6af9cbf376 Merge branch 'main' into copilot/add-messaging-feature-android-auto 2026-04-17 08:10:42 -07: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
copilot-swe-agent[bot]
dac4880e0f feat(auto): replace ListTemplate with TabTemplate for iOS CarPlay parity
Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Android/sessions/67580c49-612a-450b-8452-9c88875df1c3

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2026-04-17 14:44:19 +00: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