mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
feat: mutual match screen target-grid chip (needle bearing + grid + distance); grid mode centering no longer swallowed when station position is not yet available
This commit is contained in:
1 parent
2c9a5b376f
commit
a9fe0b74e9
4 files changed
+181
-5
No files matched your search
@@ -165,11 +165,18 @@ private fun MapScreen(uiState: MapState, onAction: (MapAction) -> Unit, mapView:
|
||||
// the map page with grid mode already ON also centers the map.
|
||||
var prevGridMode by remember { mutableStateOf(false) }
|
||||
AndroidView({ mapView }) { view ->
|
||||
// Center on the station grid whenever entering grid mode.
|
||||
// Only mark the transition as consumed once a real position
|
||||
// was available; otherwise a first frame with a null
|
||||
// stationPosition would swallow the centering forever.
|
||||
val shouldCenter = uiState.isGridMode && !prevGridMode
|
||||
setGridMode(
|
||||
uiState.isGridMode, uiState.workedGrids, view,
|
||||
if (uiState.isGridMode && !prevGridMode) uiState.stationPosition else null
|
||||
if (shouldCenter) uiState.stationPosition else null
|
||||
)
|
||||
prevGridMode = uiState.isGridMode
|
||||
if (!shouldCenter || uiState.stationPosition != null) {
|
||||
prevGridMode = uiState.isGridMode
|
||||
}
|
||||
if (!uiState.isGridMode) {
|
||||
uiState.stationPosition?.let { setStationPosition(it, view) }
|
||||
uiState.track?.let { setSatelliteTrack(it, view) }
|
||||
|
||||
@@ -63,6 +63,7 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.rtbishop.look4sat.core.domain.repository.MutualPassData
|
||||
import com.rtbishop.look4sat.core.domain.repository.TrackSampleData
|
||||
import com.rtbishop.look4sat.core.presentation.GridTargetChip
|
||||
import com.rtbishop.look4sat.core.presentation.R
|
||||
import com.rtbishop.look4sat.core.presentation.ScreenColumn
|
||||
import com.rtbishop.look4sat.core.presentation.TopBar
|
||||
@@ -114,7 +115,29 @@ fun MutualScreen(
|
||||
strokeWidth = 2.dp
|
||||
)
|
||||
}
|
||||
MutualStatusChip(state)
|
||||
// Target-grid chip: station B grid (station A defaults to
|
||||
// the user's own position), bearing/distance from A to B.
|
||||
val gridB = state.stationBGrid.trim().uppercase()
|
||||
val posA = com.rtbishop.look4sat.core.domain.utility.qthToPosition(state.stationAGrid)
|
||||
?: state.stationALat.toDoubleOrNull()?.let { lat ->
|
||||
state.stationALon.toDoubleOrNull()?.let { lon ->
|
||||
com.rtbishop.look4sat.core.domain.predict.GeoPos(lat, lon)
|
||||
}
|
||||
}
|
||||
val posB = com.rtbishop.look4sat.core.domain.utility.qthToPosition(gridB)
|
||||
if (posA != null && posB != null) {
|
||||
GridTargetChip(
|
||||
grid = gridB,
|
||||
distanceKm = com.rtbishop.look4sat.core.presentation.greatCircleDistanceKm(
|
||||
posA.latitude, posA.longitude, posB.latitude, posB.longitude
|
||||
),
|
||||
bearingDeg = com.rtbishop.look4sat.core.presentation.greatCircleBearingDeg(
|
||||
posA.latitude, posA.longitude, posB.latitude, posB.longitude
|
||||
)
|
||||
)
|
||||
} else {
|
||||
GridTargetChip(grid = null, distanceKm = null, bearingDeg = null)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user