mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
fix(map): own-grid bold outline wiped on every recomposition — keep ownGrid set
setGridMode only received stationPosition on the grid-mode entry frame (for centering); every later recomposition (map refreshes once per second) passed null, so gridOverlay.ownGrid was reset to null and the bold outline vanished. Split the concerns: ownGrid is now derived from uiState.stationPosition on EVERY update, while centering stays gated by centerOnStation (= entry only).
This commit is contained in:
1 parent
9c12b1eccb
commit
6cb5b062d3
1 file changed
+8
-3
@@ -256,7 +256,8 @@ private fun MapScreen(uiState: MapState, onAction: (MapAction) -> Unit, mapView:
|
|||||||
val shouldCenter = uiState.isGridMode && !prevGridMode
|
val shouldCenter = uiState.isGridMode && !prevGridMode
|
||||||
setGridMode(
|
setGridMode(
|
||||||
uiState.isGridMode, uiState.workedGrids, uiState.roamedGrids, view,
|
uiState.isGridMode, uiState.workedGrids, uiState.roamedGrids, view,
|
||||||
if (shouldCenter) uiState.stationPosition else null
|
uiState.stationPosition,
|
||||||
|
centerOnStation = shouldCenter
|
||||||
)
|
)
|
||||||
if (!shouldCenter || uiState.stationPosition != null) {
|
if (!shouldCenter || uiState.stationPosition != null) {
|
||||||
prevGridMode = uiState.isGridMode
|
prevGridMode = uiState.isGridMode
|
||||||
@@ -639,7 +640,8 @@ private fun setGridMode(
|
|||||||
workedGrids: Set<String>,
|
workedGrids: Set<String>,
|
||||||
roamedGrids: Set<String>,
|
roamedGrids: Set<String>,
|
||||||
mapView: MapView,
|
mapView: MapView,
|
||||||
stationPosition: GeoPos?
|
stationPosition: GeoPos?,
|
||||||
|
centerOnStation: Boolean = false
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
val gridOverlay = mapView.overlays[OVERLAY_GRID]
|
val gridOverlay = mapView.overlays[OVERLAY_GRID]
|
||||||
@@ -647,6 +649,9 @@ private fun setGridMode(
|
|||||||
gridOverlay.isEnabled = gridMode
|
gridOverlay.isEnabled = gridMode
|
||||||
gridOverlay.workedGrids = workedGrids
|
gridOverlay.workedGrids = workedGrids
|
||||||
gridOverlay.roamedGrids = roamedGrids
|
gridOverlay.roamedGrids = roamedGrids
|
||||||
|
// ownGrid must be set on EVERY update — the position is available
|
||||||
|
// regardless of whether this frame centers (centering happens only
|
||||||
|
// on entry, but passing null here would wipe the bold outline).
|
||||||
gridOverlay.ownGrid = ownGridOf(stationPosition)
|
gridOverlay.ownGrid = ownGridOf(stationPosition)
|
||||||
} else {
|
} else {
|
||||||
mapView.overlays[OVERLAY_GRID] = MaidenheadGridOverlay().apply {
|
mapView.overlays[OVERLAY_GRID] = MaidenheadGridOverlay().apply {
|
||||||
@@ -666,7 +671,7 @@ private fun setGridMode(
|
|||||||
// first composition this runs before MapView's first layout, and a
|
// first composition this runs before MapView's first layout, and a
|
||||||
// setCenter issued pre-layout is discarded when the view lays out —
|
// setCenter issued pre-layout is discarded when the view lays out —
|
||||||
// the map then keeps its default center forever.
|
// the map then keeps its default center forever.
|
||||||
if (gridMode) {
|
if (gridMode && centerOnStation) {
|
||||||
val pos = stationPosition ?: return
|
val pos = stationPosition ?: return
|
||||||
val lat = pos.latitude
|
val lat = pos.latitude
|
||||||
val lon = pos.longitude
|
val lon = pos.longitude
|
||||||
|
|||||||
Reference in new issue
Block a user