refactor(ui): move maps to common code

iOS should work again, probably
This commit is contained in:
Cilly Leang 2026-02-27 22:53:38 +11:00
parent b9fa8f77c7
commit fb53422aac
Signed by: cilly
GPG key ID: 6500251E087653C9
14 changed files with 35 additions and 115 deletions

View file

@ -15,7 +15,7 @@ import moe.lava.banksia.client.datasource.remote.StopRemoteDataSource
import moe.lava.banksia.client.repository.RouteRepository
import moe.lava.banksia.client.repository.StopRepository
import moe.lava.banksia.data.ptv.PtvService
import moe.lava.banksia.ui.screens.MapScreenViewModel
import moe.lava.banksia.ui.screens.map.MapScreenViewModel
import moe.lava.banksia.util.log
import org.koin.core.module.dsl.singleOf
import org.koin.core.module.dsl.viewModelOf

View file

@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
import moe.lava.banksia.client.di.ClientModule
import moe.lava.banksia.di.CommonModules
import moe.lava.banksia.ui.screens.MapScreen
import moe.lava.banksia.ui.screens.map.MapScreen
import org.koin.compose.KoinMultiplatformApplication
import org.koin.core.annotation.KoinExperimentalAPI
import org.koin.dsl.koinConfiguration

View file

@ -27,7 +27,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.coerceAtMost
import androidx.compose.ui.unit.dp
import moe.lava.banksia.ui.components.RouteIcon
import moe.lava.banksia.ui.screens.MapScreenEvent
import moe.lava.banksia.ui.screens.map.MapScreenEvent
import moe.lava.banksia.ui.state.InfoPanelState
@Composable

View file

@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import moe.lava.banksia.ui.components.RouteIcon
import moe.lava.banksia.ui.screens.MapScreenEvent
import moe.lava.banksia.ui.screens.map.MapScreenEvent
import moe.lava.banksia.ui.state.SearchState
@OptIn(ExperimentalMaterial3Api::class)

View file

@ -1,25 +0,0 @@
package moe.lava.banksia.ui.platform.maps
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import kotlinx.coroutines.flow.Flow
import moe.lava.banksia.ui.screens.MapScreenEvent
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.Point
@Composable
expect fun getScreenHeight(): Int
@OptIn(ExperimentalMaterial3Api::class)
@Composable
expect fun Maps(
modifier: Modifier = Modifier.Companion,
state: MapState,
onEvent: (MapScreenEvent) -> Unit,
cameraPositionFlow: Flow<BoxedValue<CameraPosition>>,
setLastKnownLocation: (Point) -> Unit,
extInsets: WindowInsets,
)

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.screens
package moe.lava.banksia.ui.screens.map
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
@ -36,7 +36,6 @@ import moe.lava.banksia.ui.layout.InfoPanel
import moe.lava.banksia.ui.layout.Searcher
import moe.lava.banksia.ui.layout.SheetStateWrapper
import moe.lava.banksia.ui.platform.BanksiaTheme
import moe.lava.banksia.ui.platform.maps.Maps
import moe.lava.banksia.ui.state.InfoPanelState
import moe.lava.banksia.util.Point
import org.jetbrains.compose.resources.painterResource

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.screens
package moe.lava.banksia.ui.screens.map
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
@ -20,13 +20,13 @@ import moe.lava.banksia.data.ptv.structures.PtvRoute
import moe.lava.banksia.model.Route
import moe.lava.banksia.model.RouteType
import moe.lava.banksia.ui.components.getUIProperties
import moe.lava.banksia.ui.platform.maps.CameraPosition
import moe.lava.banksia.ui.platform.maps.CameraPositionBounds
import moe.lava.banksia.ui.platform.maps.Marker
import moe.lava.banksia.ui.platform.maps.Polyline
import moe.lava.banksia.ui.state.InfoPanelState
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.ui.state.SearchState
import moe.lava.banksia.ui.utils.map.CameraPosition
import moe.lava.banksia.ui.utils.map.CameraPositionBounds
import moe.lava.banksia.ui.utils.map.Marker
import moe.lava.banksia.ui.utils.map.Polyline
import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.BoxedValue.Companion.box
import moe.lava.banksia.util.LoopFlow.Companion.waitUntilSubscribed

View file

@ -1,10 +1,7 @@
@file:Suppress("COMPOSE_APPLIER_CALL_MISMATCH")
package moe.lava.banksia.ui.platform.maps
package moe.lava.banksia.ui.screens.map
import android.Manifest
import android.annotation.SuppressLint
import android.content.pm.PackageManager
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.add
import androidx.compose.foundation.layout.asPaddingValues
@ -13,15 +10,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.android.gms.location.LocationServices
import kotlinx.coroutines.flow.Flow
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@ -29,9 +20,9 @@ import kotlinx.serialization.json.decodeFromJsonElement
import moe.lava.banksia.model.RouteType
import moe.lava.banksia.ui.components.getUIProperties
import moe.lava.banksia.ui.platform.BanksiaTheme
import moe.lava.banksia.ui.screens.MELBOURNE
import moe.lava.banksia.ui.screens.MapScreenEvent
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.ui.utils.map.CameraPosition
import moe.lava.banksia.ui.utils.map.Marker
import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.Point
import moe.lava.banksia.util.log
@ -54,24 +45,11 @@ import org.maplibre.spatialk.geojson.FeatureCollection
import org.maplibre.spatialk.geojson.Position
import org.maplibre.spatialk.geojson.dsl.addFeature
import org.maplibre.spatialk.geojson.dsl.buildFeatureCollection
import org.maplibre.compose.camera.CameraPosition as MLCameraPosition
import org.maplibre.spatialk.geojson.Point as MLPoint
fun Point.toPos(): Position = Position(this.lng, this.lat)
@Composable
private fun checkLocationPermission() =
ContextCompat.checkSelfPermission(LocalContext.current, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
@Composable
actual fun getScreenHeight(): Int {
val dp = LocalConfiguration.current.screenHeightDp.dp
return with(LocalDensity.current) {
dp.roundToPx()
}
}
@Serializable
data class MarkerProps(
val type: RouteType,
@ -108,7 +86,7 @@ private val colorTypeExpression @Composable get() = switch(
@OptIn(ExperimentalMaterial3Api::class)
@Composable
actual fun Maps(
fun Maps(
modifier: Modifier,
state: MapState,
onEvent: (MapScreenEvent) -> Unit,
@ -141,21 +119,21 @@ actual fun Maps(
))
}
}
val ctx = LocalContext.current
val fusedLocation = remember { LocationServices.getFusedLocationProviderClient(ctx) }
LaunchedEffect(Unit) {
@SuppressLint("MissingPermission")
fusedLocation.lastLocation.addOnSuccessListener {
if (it != null) {
camPos.position = MLCameraPosition(
zoom = 16.0,
target = Position(it.longitude, it.latitude)
)
setLastKnownLocation(Point(it.latitude, it.longitude))
}
}
}
//
// val ctx = LocalContext.current
// val fusedLocation = remember { LocationServices.getFusedLocationProviderClient(ctx) }
// LaunchedEffect(Unit) {
// @SuppressLint("MissingPermission")
// fusedLocation.lastLocation.addOnSuccessListener {
// if (it != null) {
// camPos.position = MLCameraPosition(
// zoom = 16.0,
// target = Position(it.longitude, it.latitude)
// )
// setLastKnownLocation(Point(it.latitude, it.longitude))
// }
// }
// }
MaplibreMap(
modifier = modifier,

View file

@ -1,7 +1,7 @@
package moe.lava.banksia.ui.state
import moe.lava.banksia.ui.platform.maps.Marker
import moe.lava.banksia.ui.platform.maps.Polyline
import moe.lava.banksia.ui.utils.map.Marker
import moe.lava.banksia.ui.utils.map.Polyline
data class MapState(
val stops: List<Marker.Stop> = listOf(),

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.platform.maps
package moe.lava.banksia.ui.utils.map
import moe.lava.banksia.util.Point

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.platform.maps
package moe.lava.banksia.ui.utils.map
import moe.lava.banksia.util.Point

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.platform.maps
package moe.lava.banksia.ui.utils.map
import androidx.compose.ui.graphics.Color
import moe.lava.banksia.model.RouteType

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.ui.platform.maps
package moe.lava.banksia.ui.utils.map
import androidx.compose.ui.graphics.Color
import moe.lava.banksia.util.Point

View file

@ -1,32 +0,0 @@
package moe.lava.banksia.ui.platform.maps
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalWindowInfo
import kotlinx.coroutines.flow.Flow
import moe.lava.banksia.ui.screens.MapScreenEvent
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.Point
@OptIn(ExperimentalComposeUiApi::class)
@Composable
actual fun getScreenHeight(): Int {
return LocalWindowInfo.current.containerSize.height
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
actual fun Maps(
modifier: Modifier,
state: MapState,
onEvent: (MapScreenEvent) -> Unit,
cameraPositionFlow: Flow<BoxedValue<CameraPosition>>,
setLastKnownLocation: (Point) -> Unit,
extInsets: WindowInsets,
) {
TODO("Not yet implemented")
}