refactor: split out mapstate
This commit is contained in:
parent
b376e7da5b
commit
c26e522a2e
3 changed files with 21 additions and 15 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue