Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
c7e54c1
spike(coverage): compute RF coverage locally instead of driving a Web…
jamesarich Sep 16, 2026
92038e8
fix(coverage): put the kp1812 entry in [libraries], not [bundles]
jamesarich Sep 16, 2026
5c121e4
refactor(coverage): move the model, elevation source and export to co…
jamesarich Sep 16, 2026
e9b343a
feat(coverage): draw coverage as a map layer, and stop under-sampling…
jamesarich Sep 16, 2026
0dda0f4
feat(coverage): compute on a grid and export filled contour bands
jamesarich Sep 16, 2026
548894a
fix(coverage): MultiPolygon coordinates were nested one level short
jamesarich Sep 16, 2026
4763065
perf(coverage): sweep in polar, prefetch terrain, 10x the resolution
jamesarich Sep 16, 2026
333b4cc
perf(coverage): share decoded terrain, and open the archive only when…
jamesarich Sep 16, 2026
983c5aa
fix(coverage): drop the stale per-instance hold, and never reuse a ca…
jamesarich Sep 16, 2026
26656c2
perf(coverage): take terrain from XYZ tiles, and keep it on disk
jamesarich Sep 16, 2026
fe97b25
fix(coverage): a failed terrain request must not read as sea level
jamesarich Sep 16, 2026
a08ac54
fix(coverage): clamp the planner URL, and keep a sweep's terrain insi…
jamesarich Sep 17, 2026
57ff5fe
fix(coverage): honour the Display section instead of hardcoding how c…
jamesarich Sep 17, 2026
7d52fb6
fix(coverage): spread bands across the whole ramp, not its lower bounds
jamesarich Sep 17, 2026
fc59e2a
fix(coverage): name the preview canvas colours
jamesarich Sep 19, 2026
888b3b3
build: list feature:coverage in the root module set
jamesarich Sep 19, 2026
9925aff
test(konsist): allow coverage its terrain import and its owned scope
jamesarich Oct 2, 2026
a26a0aa
style(coverage): apply main's formatter
jamesarich Oct 2, 2026
f2e946e
fix(coverage): clear detektTypeResolved, and stop reporting a dismiss…
jamesarich Oct 2, 2026
342c76e
refactor(coverage): follow kp1812's pathCenterLatitudeDeg rename
jamesarich Oct 2, 2026
e5bf280
docs(coverage): American spelling, and a README that matches the module
jamesarich Oct 3, 2026
2e2039c
feat(coverage): compute Site Planner coverage on device on every plat…
jamesarich Oct 3, 2026
931c124
refactor(coverage): drop the WebView recovery test and spike-era docs
jamesarich Oct 3, 2026
8fbe1a3
docs(coverage): restructure comments without em dashes
jamesarich Oct 3, 2026
220d0d3
ci: run feature:coverage tests in the feature shard
jamesarich Oct 3, 2026
2e84b57
fix(coverage): address review findings
jamesarich Oct 3, 2026
fa7d817
fix(coverage): fit the terrain zoom to the estimate's disc
jamesarich Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/reusable-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ jobs:
tasks: >-
:core:service:allTests
:feature:connections:allTests
:feature:coverage:allTests
:feature:discovery:allTests
:feature:docs:allTests
:feature:firmware:allTests
Expand All @@ -252,6 +253,7 @@ jobs:
kover: >-
:core:service:koverXmlReport
:feature:connections:koverXmlReport
:feature:coverage:koverXmlReport
:feature:discovery:koverXmlReport
:feature:docs:koverXmlReport
:feature:firmware:koverXmlReport
Expand Down
5 changes: 2 additions & 3 deletions .skills/compose-ui/strings-index.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ dependencies {
implementation(projects.feature.messaging)
implementation(projects.feature.connections)
implementation(projects.feature.map)
implementation(projects.feature.coverage)
implementation(projects.feature.node)
implementation(projects.feature.settings)
implementation(projects.feature.discovery)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,18 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.koin.compose.viewmodel.koinViewModel
import org.maplibre.spatialk.geojson.Position
import org.meshtastic.app.map.MapViewModel
import org.meshtastic.app.map.SitePlannerHost
import org.meshtastic.feature.coverage.rememberCoverageEstimate
import org.meshtastic.feature.map.SharedMapViewModel
import org.meshtastic.feature.map.component.SitePlannerHost
import org.meshtastic.feature.map.component.toSitePlannerParams
import org.meshtastic.feature.map.maplibre.SitePlannerSession

/**
* Runs the hosted Site Planner for the F-Droid map.
*
* The planner lives in `androidApp`, so the flavor supplies it rather than the shared map module. Imported coverage
* becomes a GeoJSON map layer (see #6138) and the map recentres on the transmitter so it is on screen.
* Runs the Site Planner for the F-Droid map. The estimate becomes a GeoJSON map layer and the map moves to the
* transmitter so it's on screen.
*
* No phone-GPS shortcut is offered: the Google flavor fills that from Play Services' fused location, which must not
* enter an F-Droid build. The coordinate fields stay manual, with the map centre and the node's own position as
* enter an F-Droid build. The coordinate fields stay manual, with the map center and the node's own position as
* shortcuts.
*/
@Composable
Expand All @@ -51,6 +50,7 @@ fun SitePlannerSlot(session: SitePlannerSession) {

SitePlannerHost(
initialParams = subject.toSitePlannerParams(channelSet),
estimate = rememberCoverageEstimate(),
onDismiss = session.onDismiss,
onImport = { name, geoJson, latitude, longitude ->
mapViewModel.addGeoJsonLayer(name, geoJson)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ import org.meshtastic.core.ui.util.formatAgo
import org.meshtastic.core.ui.util.formatPositionTime
import org.meshtastic.core.ui.util.rememberLocationPermissionState
import org.meshtastic.core.ui.util.showToast
import org.meshtastic.feature.coverage.rememberCoverageEstimate
import org.meshtastic.feature.map.BaseMapViewModel.MapFilterState
import org.meshtastic.feature.map.MapBounds
import org.meshtastic.feature.map.MapNodePolicy
Expand All @@ -209,6 +210,7 @@ import org.meshtastic.feature.map.component.MeshMapFitPadding
import org.meshtastic.feature.map.component.NodeTrackFilterMenu
import org.meshtastic.feature.map.component.OfflineStatusBanner
import org.meshtastic.feature.map.component.RasterOverlayToggles
import org.meshtastic.feature.map.component.SitePlannerHost
import org.meshtastic.feature.map.component.SitePlannerLaunch
import org.meshtastic.feature.map.component.WaypointInfoDialog
import org.meshtastic.feature.map.component.mapFilterActions
Expand Down Expand Up @@ -1233,6 +1235,7 @@ fun MapView(
launch.nodeLocation(ourNodeInfo)?.let { location -> { location } }
SitePlannerHost(
initialParams = launch.initialParams,
estimate = rememberCoverageEstimate(),
onDismiss = { sitePlannerLaunch = null },
onImport = { name, geoJson, latitude, longitude ->
mapViewModel.addGeoJsonLayer(name, geoJson)
Expand Down
Loading
Loading