refactor: split out mapstate

This commit is contained in:
LavaDesu 2025-07-28 22:31:26 +10:00
parent b376e7da5b
commit c26e522a2e
Signed by: cilly
GPG key ID: 6500251E087653C9
3 changed files with 21 additions and 15 deletions

View file

@ -74,6 +74,7 @@ fun App(
val state by viewModel.state.collectAsStateWithLifecycle() val state by viewModel.state.collectAsStateWithLifecycle()
val infoState by viewModel.infoState.collectAsStateWithLifecycle() val infoState by viewModel.infoState.collectAsStateWithLifecycle()
val mapState by viewModel.mapState.collectAsStateWithLifecycle()
val scaffoldState = rememberBottomSheetScaffoldState( val scaffoldState = rememberBottomSheetScaffoldState(
bottomSheetState = rememberStandardBottomSheetState( bottomSheetState = rememberStandardBottomSheetState(
@ -139,9 +140,9 @@ fun App(
extInsets = WindowInsets(top = with(LocalDensity.current) { extInsets = WindowInsets(top = with(LocalDensity.current) {
SearchBarDefaults.InputFieldHeight.roundToPx() SearchBarDefaults.InputFieldHeight.roundToPx()
}, bottom = extInsets), }, bottom = extInsets),
markers = state.markers, markers = mapState.markers,
setLastKnownLocation = viewModel::setLastKnownLocation, setLastKnownLocation = viewModel::setLastKnownLocation,
polylines = state.polylines, polylines = mapState.polylines,
) )
Searcher( Searcher(
routes = state.routes, routes = state.routes,

View file

@ -26,6 +26,7 @@ import moe.lava.banksia.native.maps.MarkerType
import moe.lava.banksia.native.maps.Point import moe.lava.banksia.native.maps.Point
import moe.lava.banksia.native.maps.Polyline import moe.lava.banksia.native.maps.Polyline
import moe.lava.banksia.ui.state.InfoPanelState import moe.lava.banksia.ui.state.InfoPanelState
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.util.BoxedValue import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.BoxedValue.Companion.box import moe.lava.banksia.util.BoxedValue.Companion.box
@ -33,8 +34,6 @@ sealed class BanksiaEvent {}
data class BanksiaViewState( data class BanksiaViewState(
val routes: List<PtvRoute> = listOf(), val routes: List<PtvRoute> = listOf(),
val markers: List<Marker> = listOf(),
val polylines: List<Polyline> = listOf(),
) )
class BanksiaViewModel : ViewModel() { class BanksiaViewModel : ViewModel() {
@ -44,13 +43,15 @@ class BanksiaViewModel : ViewModel() {
private val iInfoState = MutableStateFlow<InfoPanelState>(InfoPanelState.None) private val iInfoState = MutableStateFlow<InfoPanelState>(InfoPanelState.None)
val infoState = iInfoState.asStateFlow() val infoState = iInfoState.asStateFlow()
private val iMapState = MutableStateFlow(MapState())
val mapState = iMapState.asStateFlow()
private val iCameraChangeEmitter = MutableSharedFlow<BoxedValue<CameraPosition>>()
val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow()
private val ptvService = PtvService() private val ptvService = PtvService()
private var locationTrackerJob: Job? = null private var locationTrackerJob: Job? = null
private var lastKnownLocation: Point? = null private var lastKnownLocation: Point? = null
private val iCameraChangeEmitter = MutableSharedFlow<BoxedValue<CameraPosition>>()
val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow()
init { init {
viewModelScope.launch { viewModelScope.launch {
requestRoutes() requestRoutes()
@ -90,12 +91,7 @@ class BanksiaViewModel : ViewModel() {
} }
fun switchRoute(route: PtvRoute?) { fun switchRoute(route: PtvRoute?) {
iState.update { iMapState.update { MapState() }
it.copy(
markers = listOf(),
polylines = listOf(),
)
}
iInfoState.update { iInfoState.update {
if (route == null) if (route == null)
InfoPanelState.None InfoPanelState.None
@ -197,7 +193,7 @@ class BanksiaViewModel : ViewModel() {
else else
null null
iState.update { it.copy(polylines = polylines) } iMapState.update { it.copy(polylines = polylines) }
newCameraPosition?.let { iCameraChangeEmitter.emit(it.box()) } newCameraPosition?.let { iCameraChangeEmitter.emit(it.box()) }
} }
@ -241,7 +237,7 @@ class BanksiaViewModel : ViewModel() {
} }
} }
iState.update { it.copy(markers = markers) } iMapState.update { it.copy(markers = markers) }
} }
private fun buildBounds(points: List<Point>): CameraPositionBounds { private fun buildBounds(points: List<Point>): CameraPositionBounds {

View file

@ -0,0 +1,9 @@
package moe.lava.banksia.ui.state
import moe.lava.banksia.native.maps.Marker
import moe.lava.banksia.native.maps.Polyline
data class MapState(
val markers: List<Marker> = listOf(),
val polylines: List<Polyline> = listOf(),
)