mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-05-24 14:50:26 -04:00
feat(specs): defer map implementation pending NAVIGATION vs POI decision
Map strategy (User Story 5, FR-009, T029) deferred to allow proper evaluation of: - NAVIGATION category (full MapWithContentTemplate, live tracking) vs POI category (PlaceListMapTemplate, 6-item cap, simpler) - Google Maps SDK for AAOS availability timeline - Play Store review implications of NAVIGATION declaration - Whether convoy use case justifies nav app exclusivity Remaining 39 tasks (Phases 1-6, 8-10) proceed without map dependency. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -109,20 +109,24 @@ A driver participating in multiple mesh channels (e.g., "Convoy", "Emergency", "
|
||||
|
||||
---
|
||||
|
||||
### User Story 5 - View Node Locations on Map (Priority: P2)
|
||||
### User Story 5 - View Node Locations on Map (Priority: DEFERRED)
|
||||
|
||||
> **⚠️ DEFERRED:** Map implementation is deferred pending further research and discussion on whether to pursue POI category (PlaceListMapTemplate, limited but simpler) or NAVIGATION category (MapWithContentTemplate, full-featured but triggers stricter Play Store review and conflicts with active nav apps). This decision has significant architectural and distribution implications that warrant dedicated analysis.
|
||||
|
||||
A driver in a convoy scenario views the locations of all mesh nodes on a map to understand relative positions and navigate toward or away from group members.
|
||||
|
||||
**Why this priority**: Location awareness is a core differentiator of Meshtastic and maps are natural for automotive interfaces.
|
||||
**Why deferred**: The choice between POI (static pins, 6-item cap, no routing conflicts) and NAVIGATION (live tracking, full map control, but exclusive with Google Maps/Waze) fundamentally shapes the UX and distribution strategy. More research needed on:
|
||||
- Google Maps SDK availability for AAOS (announced I/O 2026, timeline unclear)
|
||||
- NAVIGATION category Play Store review requirements and timeline
|
||||
- Whether Meshtastic's convoy use case justifies NAVIGATION exclusivity
|
||||
- User expectations (passive awareness vs. active routing toward nodes)
|
||||
|
||||
**Independent Test**: Can be tested by having 2+ nodes reporting GPS positions and verifying pins appear at correct locations on the car map.
|
||||
**Acceptance Scenarios** (to be finalized after map strategy decision):
|
||||
|
||||
**Acceptance Scenarios**:
|
||||
|
||||
1. **Given** nodes are reporting GPS positions, **When** the driver opens the map screen, **Then** node locations appear as labeled items in a PlaceListMapTemplate with pins on the map
|
||||
2. **Given** the map is displayed with node pins, **When** the driver taps a node item in the list, **Then** a detail panel shows node name, distance, last update time, and option to send a direct message
|
||||
1. **Given** nodes are reporting GPS positions, **When** the driver opens the map screen, **Then** node locations are displayed with correct positions
|
||||
2. **Given** the map is displayed, **When** the driver selects a node, **Then** a detail view shows node name, distance, last update time, and option to send a direct message
|
||||
3. **Given** the driver's own position is available, **When** viewing the map, **Then** their position is shown distinctly from other nodes
|
||||
4. **Given** a node's position updates, **When** the map is visible, **Then** the pin moves to the new position within 5 seconds
|
||||
4. **Given** a node's position updates, **When** the map is visible, **Then** the display updates within 5 seconds
|
||||
|
||||
---
|
||||
|
||||
@@ -183,12 +187,12 @@ A driver uses CAL's built-in voice input to compose messages and perform actions
|
||||
- **FR-006**: System MUST present emergency messages in a Spotlight Section when viewing the messaging screen
|
||||
- **FR-007**: System MUST display all known mesh nodes as Condensed Items showing name, signal quality, and battery level
|
||||
- **FR-008**: System MUST support channel switching via Chips displayed at the top of the messaging screen
|
||||
- **FR-009**: System MUST render node positions on a map using PlaceListMapTemplate under the POI category (static pin list, refreshable; NAVIGATION category with MapWithContentTemplate deferred to v2)
|
||||
- **FR-009**: ~~DEFERRED~~ — Map implementation deferred pending NAVIGATION vs POI category decision. See User Story 5.
|
||||
- **FR-010**: System MUST maintain a persistent Minimized Control Panel showing radio status, online node count, and last message time
|
||||
- **FR-011**: System MUST display a Banner when the Bluetooth connection to the radio is lost
|
||||
- **FR-012**: System MUST support expanding node details on tap (last heard, distance, hardware model)
|
||||
- **FR-013**: System MUST use Expanded Header Layout for the node dashboard showing mesh topology summary
|
||||
- **FR-014**: System MUST declare MESSAGING as the primary category and POI as secondary
|
||||
- **FR-014**: System MUST declare MESSAGING as the primary category. POI or NAVIGATION as secondary category is deferred pending map strategy decision.
|
||||
- **FR-015**: System MUST gracefully degrade to cached/read-only data when the mesh radio is disconnected
|
||||
- **FR-016**: System MUST support unread message indicators on channel Chips
|
||||
- **FR-017**: System MUST filter emoji-only and admin messages from the car display (only text messages shown)
|
||||
@@ -295,7 +299,7 @@ A driver uses CAL's built-in voice input to compose messages and perform actions
|
||||
- **SC-006**: Channel switching completes (chip tap to new message list rendered) within 1 second
|
||||
- **SC-007**: App passes Android Auto App Quality review criteria for the MESSAGING category
|
||||
- **SC-008**: 95% of voice-initiated replies complete successfully without fallback to touch input
|
||||
- **SC-009**: Map displays node positions with < 5-second update latency when positions change
|
||||
- **SC-009**: ~~DEFERRED~~ — Map latency criterion deferred with map implementation
|
||||
- **SC-010**: Zero crashes or ANRs attributed to the car module during a 2-hour continuous driving session
|
||||
|
||||
## Assumptions
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
- [ ] T012 Create MeshtasticCarAppService at feature/car/src/main/kotlin/org/meshtastic/feature/car/service/MeshtasticCarAppService.kt extending CarAppService, creating sessions via Koin
|
||||
- [ ] T013 Create MeshtasticCarSession at feature/car/src/main/kotlin/org/meshtastic/feature/car/service/MeshtasticCarSession.kt with onCreateScreen (returns HomeScreen), onNewIntent, onCarConfigurationChanged, Crashlytics tagging, 300ms invalidation debouncing
|
||||
- [ ] T014 Create presentation state models (CarSessionState, ConnectionStatus, MessagingUiState, ChannelUi, ConversationUi, NodeDashboardUiState, NodeUi, SignalQuality, TopologyHeader, MapUiState, NodePlace, LatLngWrapper, EmergencyAlert) at feature/car/src/main/kotlin/org/meshtastic/feature/car/model/CarUiModels.kt
|
||||
- [ ] T015 Create HomeScreen (TabTemplate with Messages/Nodes/Map tabs) at feature/car/src/main/kotlin/org/meshtastic/feature/car/screens/HomeScreen.kt
|
||||
- [ ] T015 Create HomeScreen (TabTemplate with Messages/Nodes tabs; Map tab placeholder deferred) at feature/car/src/main/kotlin/org/meshtastic/feature/car/screens/HomeScreen.kt
|
||||
|
||||
**Checkpoint**: Foundation ready — CarAppService binds, session creates, HomeScreen renders tabs. User story implementation can now begin in parallel.
|
||||
|
||||
@@ -114,17 +114,13 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 7: User Story 5 — View Node Locations on Map (Priority: P2)
|
||||
## Phase 7: User Story 5 — View Node Locations on Map (DEFERRED)
|
||||
|
||||
**Goal**: Nodes with GPS positions displayed as place items on a PlaceListMapTemplate with auto-zoom and detail drill-down
|
||||
> **⚠️ DEFERRED:** Map implementation deferred pending NAVIGATION vs POI category decision. The choice between PlaceListMapTemplate (POI, 6-item cap, no nav conflicts) and MapWithContentTemplate (NAVIGATION, full-featured, exclusive with Google Maps) requires further research and discussion. See spec User Story 5 for open questions.
|
||||
|
||||
**Independent Test**: Have 2+ nodes reporting GPS → open map → pins at correct locations → tap list item → node detail with distance and DM option
|
||||
~~- [ ] T029 [US5] Create MapScreen~~
|
||||
|
||||
### Implementation for User Story 5
|
||||
|
||||
- [ ] T029 [US5] Create MapScreen at feature/car/src/main/kotlin/org/meshtastic/feature/car/screens/MapScreen.kt with PlaceListMapTemplate under POI category, node Place items with LatLng from NodeRepository (filtered to valid positions), distance + last update in row text, own position as anchor, onClickListener pushing NodeDetailScreen, 5-second refresh interval. **Cap at 6 Place items per CAL PlaceListMapTemplate limit — prioritize by distance (nearest first), then recency**
|
||||
|
||||
**Checkpoint**: Map displays node pins, auto-zooms to fit, list items show distance, tap navigates to node detail
|
||||
**Checkpoint**: SKIPPED — revisit after map strategy decision
|
||||
|
||||
---
|
||||
|
||||
@@ -182,7 +178,7 @@
|
||||
- **Phase 4 (US2 - Emergency)**: Depends on Phase 2; integrates with MessagingScreen (Phase 3 T016)
|
||||
- **Phase 5 (US3 - Nodes)**: Depends on Phase 2 — independent of messaging
|
||||
- **Phase 6 (US4 - Channels)**: Depends on Phase 3 (modifies MessagingScreen)
|
||||
- **Phase 7 (US5 - Map)**: Depends on Phase 5 (reuses NodeDetailScreen from T027)
|
||||
- **Phase 7 (US5 - Map)**: **DEFERRED** — pending NAVIGATION vs POI category decision
|
||||
- **Phase 8 (US6 - Status Panel)**: Depends on Phase 2 — independent
|
||||
- **Phase 9 (US7 - Voice)**: Depends on Phase 3 (ConversationScreen T017, FuzzyNodeNameResolver T018)
|
||||
- **Phase 10 (Polish)**: Depends on all user story phases
|
||||
@@ -193,7 +189,7 @@
|
||||
- **US2 (Emergency, P1)**: Can start after Phase 2 — integrates with US1's MessagingScreen (T016) for Spotlight Section (T024)
|
||||
- **US3 (Nodes, P2)**: Can start after Phase 2 — fully independent
|
||||
- **US4 (Channels, P2)**: Depends on US1 (extends MessagingScreen)
|
||||
- **US5 (Map, P2)**: Depends on US3 (reuses NodeDetailScreen)
|
||||
- **US5 (Map, DEFERRED)**: Pending NAVIGATION vs POI category decision — requires further research
|
||||
- **US6 (Status Panel, P3)**: Can start after Phase 2 — fully independent
|
||||
- **US7 (Voice, P3)**: Depends on US1 (extends ConversationScreen)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user