refactor: large treewide renaming
This commit is contained in:
parent
8c0bff3bc4
commit
c6b739e511
31 changed files with 206 additions and 174 deletions
|
|
@ -18,7 +18,7 @@
|
|||
<activity
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|mnc|colorMode|density|fontScale|fontWeightAdjustment|keyboard|layoutDirection|locale|mcc|navigation|smallestScreenSize|touchscreen|uiMode"
|
||||
android:name=".MainActivity">
|
||||
android:name=".ui.MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
package moe.lava.banksia
|
||||
package moe.lava.banksia.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
|
@ -17,9 +15,3 @@ class MainActivity : ComponentActivity() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun AppAndroidPreview() {
|
||||
App()
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.native
|
||||
package moe.lava.banksia.ui.platform
|
||||
|
||||
import android.os.Build
|
||||
import androidx.compose.material3.ColorScheme
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.native.maps
|
||||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
import android.Manifest
|
||||
import android.content.pm.PackageManager
|
||||
|
|
@ -41,12 +41,11 @@ import com.google.maps.android.compose.rememberCameraPositionState
|
|||
import com.google.maps.android.compose.rememberMarkerState
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import moe.lava.banksia.R
|
||||
import moe.lava.banksia.api.ptv.structures.ComposableRouteIcon
|
||||
import moe.lava.banksia.native.BanksiaTheme
|
||||
import moe.lava.banksia.ui.BanksiaEvent
|
||||
import moe.lava.banksia.ui.components.RouteIcon
|
||||
import moe.lava.banksia.ui.platform.BanksiaTheme
|
||||
import moe.lava.banksia.ui.state.MapState
|
||||
import moe.lava.banksia.util.BoxedValue
|
||||
import com.google.android.gms.maps.model.CameraPosition as GoogleCameraPosition
|
||||
|
||||
fun Point.toLatLng(): LatLng = LatLng(this.lat, this.lng)
|
||||
|
||||
|
|
@ -94,19 +93,30 @@ actual fun Maps(
|
|||
LaunchedEffect(Unit) {
|
||||
fusedLocation.lastLocation.addOnSuccessListener {
|
||||
if (it != null) {
|
||||
camPos.position = GoogleCameraPosition(LatLng(it.latitude, it.longitude), 16.0f, 0.0f, 0.0f)
|
||||
camPos.position = com.google.android.gms.maps.model.CameraPosition(
|
||||
LatLng(
|
||||
it.latitude,
|
||||
it.longitude
|
||||
), 16.0f, 0.0f, 0.0f
|
||||
)
|
||||
setLastKnownLocation(Point(it.latitude, it.longitude))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GoogleMap(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
modifier = Modifier.Companion.fillMaxSize(),
|
||||
cameraPositionState = camPos,
|
||||
mapColorScheme = if (isSystemInDarkTheme()) { ComposeMapColorScheme.DARK } else {
|
||||
ComposeMapColorScheme.LIGHT },
|
||||
mapColorScheme = if (isSystemInDarkTheme()) {
|
||||
ComposeMapColorScheme.DARK
|
||||
} else {
|
||||
ComposeMapColorScheme.LIGHT
|
||||
},
|
||||
properties = DefaultMapProperties.copy(
|
||||
mapStyleOptions = MapStyleOptions.loadRawResourceStyle(LocalContext.current, R.raw.def_mapstyle),
|
||||
mapStyleOptions = MapStyleOptions.loadRawResourceStyle(
|
||||
LocalContext.current,
|
||||
R.raw.def_mapstyle
|
||||
),
|
||||
isMyLocationEnabled = checkLocationPermission(),
|
||||
),
|
||||
uiSettings = DefaultMapUiSettings.copy(
|
||||
|
|
@ -114,7 +124,7 @@ actual fun Maps(
|
|||
myLocationButtonEnabled = false,
|
||||
mapToolbarEnabled = false,
|
||||
),
|
||||
contentPadding = WindowInsets.safeDrawing.add(extInsets).asPaddingValues()
|
||||
contentPadding = WindowInsets.Companion.safeDrawing.add(extInsets).asPaddingValues()
|
||||
) {
|
||||
// [TODO]: Slight lag when routes with many stops such as the 901 bus is set
|
||||
for (marker in state.stops) {
|
||||
|
|
@ -130,7 +140,7 @@ actual fun Maps(
|
|||
}
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
modifier = Modifier.Companion
|
||||
.size(12.dp)
|
||||
.clip(CircleShape)
|
||||
.background(BanksiaTheme.colors.surface)
|
||||
|
|
@ -150,7 +160,7 @@ actual fun Maps(
|
|||
false
|
||||
}
|
||||
) {
|
||||
ComposableRouteIcon(
|
||||
RouteIcon(
|
||||
size = 30.dp,
|
||||
routeType = marker.type,
|
||||
)
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
package moe.lava.banksia.native.maps
|
||||
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import moe.lava.banksia.api.ptv.structures.PtvRouteType
|
||||
import moe.lava.banksia.ui.BanksiaEvent
|
||||
import moe.lava.banksia.ui.state.MapState
|
||||
import moe.lava.banksia.util.BoxedValue
|
||||
|
||||
sealed class Marker {
|
||||
abstract val point: Point
|
||||
|
||||
data class Stop(
|
||||
override val point: Point,
|
||||
val id: Int,
|
||||
val type: PtvRouteType,
|
||||
val colour: Color,
|
||||
) : Marker()
|
||||
|
||||
data class Vehicle(
|
||||
override val point: Point,
|
||||
val ref: String,
|
||||
val type: PtvRouteType,
|
||||
) : Marker()
|
||||
}
|
||||
data class Point(val lat: Double, val lng: Double)
|
||||
data class Polyline(val points: List<Point>, val colour: Color)
|
||||
|
||||
data class CameraPositionBounds(val northeast: Point, val southwest: Point)
|
||||
data class CameraPosition(
|
||||
val centre: Point = Point(-37.8136, 144.9631),
|
||||
val bounds: CameraPositionBounds? = null,
|
||||
)
|
||||
|
||||
@Composable
|
||||
expect fun getScreenHeight(): Int
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
expect fun Maps(
|
||||
modifier: Modifier = Modifier,
|
||||
state: MapState,
|
||||
onEvent: (BanksiaEvent) -> Unit,
|
||||
cameraPositionFlow: Flow<BoxedValue<CameraPosition>>,
|
||||
setLastKnownLocation: (Point) -> Unit,
|
||||
extInsets: WindowInsets,
|
||||
)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia
|
||||
package moe.lava.banksia.ui
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
|
|
@ -41,19 +41,16 @@ import dev.icerock.moko.geo.compose.BindLocationTrackerEffect
|
|||
import dev.icerock.moko.geo.compose.LocationTrackerAccuracy
|
||||
import dev.icerock.moko.geo.compose.rememberLocationTrackerFactory
|
||||
import kotlinx.coroutines.launch
|
||||
import moe.lava.banksia.native.BanksiaTheme
|
||||
import moe.lava.banksia.native.maps.Maps
|
||||
import moe.lava.banksia.native.maps.Point
|
||||
import moe.lava.banksia.native.maps.getScreenHeight
|
||||
import moe.lava.banksia.resources.Res
|
||||
import moe.lava.banksia.resources.my_location_24
|
||||
import moe.lava.banksia.ui.BanksiaEvent
|
||||
import moe.lava.banksia.ui.BanksiaViewModel
|
||||
import moe.lava.banksia.ui.InfoPanel
|
||||
import moe.lava.banksia.ui.Searcher
|
||||
import moe.lava.banksia.ui.layout.InfoPanel
|
||||
import moe.lava.banksia.ui.layout.Searcher
|
||||
import moe.lava.banksia.ui.platform.BanksiaTheme
|
||||
import moe.lava.banksia.ui.platform.maps.Maps
|
||||
import moe.lava.banksia.ui.platform.maps.Point
|
||||
import moe.lava.banksia.ui.platform.maps.getScreenHeight
|
||||
import moe.lava.banksia.ui.state.InfoPanelState
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||
import kotlin.coroutines.cancellation.CancellationException
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
|
|
@ -61,7 +58,6 @@ val MELBOURNE = Point(-37.8136, 144.9631)
|
|||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class)
|
||||
@Composable
|
||||
@Preview
|
||||
fun App(
|
||||
viewModel: BanksiaViewModel = viewModel()
|
||||
) {
|
||||
|
|
@ -91,7 +87,8 @@ fun App(
|
|||
) {
|
||||
val offset = runCatching { sheetState.requireOffset() }
|
||||
val scaffoldOffset = offset.getOrDefault(0.0f).roundToInt()
|
||||
(getScreenHeight() - scaffoldOffset - WindowInsets.safeDrawing.getBottom(LocalDensity.current)).coerceAtLeast(0)
|
||||
(getScreenHeight() - scaffoldOffset - WindowInsets.Companion.safeDrawing.getBottom(
|
||||
LocalDensity.current)).coerceAtLeast(0)
|
||||
} else 0
|
||||
|
||||
LaunchedEffect(infoState) {
|
||||
|
|
@ -111,7 +108,7 @@ fun App(
|
|||
BottomSheetScaffold(
|
||||
scaffoldState = scaffoldState,
|
||||
sheetPeekHeight = (handleHeight + peekHeight) * peekHeightMultiplier,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
modifier = Modifier.Companion.fillMaxSize(),
|
||||
sheetContent = {
|
||||
InfoPanel(
|
||||
state = infoState,
|
||||
|
|
@ -122,20 +119,20 @@ fun App(
|
|||
sheetDragHandle = {
|
||||
val density = LocalDensity.current
|
||||
Box(
|
||||
Modifier
|
||||
Modifier.Companion
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 10.dp)
|
||||
.onSizeChanged {
|
||||
handleHeight = with(density) { it.height.toDp() }
|
||||
}
|
||||
) {
|
||||
BottomSheetDefaults.DragHandle(modifier = Modifier.align(Alignment.Center))
|
||||
BottomSheetDefaults.DragHandle(modifier = Modifier.Companion.align(Alignment.Companion.Center))
|
||||
}
|
||||
},
|
||||
sheetSwipeEnabled = sheetSwipeEnabled,
|
||||
) {
|
||||
Maps(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
modifier = Modifier.Companion.fillMaxSize(),
|
||||
state = mapState,
|
||||
onEvent = viewModel::handleEvent,
|
||||
cameraPositionFlow = viewModel.cameraChangeEmitter,
|
||||
|
|
@ -178,8 +175,12 @@ fun App(
|
|||
}
|
||||
|
||||
Box(
|
||||
Modifier.windowInsetsPadding(WindowInsets.safeContent.add(WindowInsets(bottom = extInsets))),
|
||||
contentAlignment = Alignment.BottomEnd
|
||||
Modifier.Companion.windowInsetsPadding(
|
||||
WindowInsets.Companion.safeContent.add(
|
||||
WindowInsets(bottom = extInsets)
|
||||
)
|
||||
),
|
||||
contentAlignment = Alignment.Companion.BottomEnd
|
||||
) {
|
||||
FloatingActionButton(
|
||||
containerColor = MaterialTheme.colorScheme.surfaceContainer,
|
||||
|
|
@ -18,19 +18,19 @@ import kotlinx.datetime.Instant
|
|||
import moe.lava.banksia.api.ptv.PtvService
|
||||
import moe.lava.banksia.api.ptv.structures.PtvRoute
|
||||
import moe.lava.banksia.api.ptv.structures.PtvRouteType
|
||||
import moe.lava.banksia.api.ptv.structures.getProperties
|
||||
import moe.lava.banksia.log
|
||||
import moe.lava.banksia.native.maps.CameraPosition
|
||||
import moe.lava.banksia.native.maps.CameraPositionBounds
|
||||
import moe.lava.banksia.native.maps.Marker
|
||||
import moe.lava.banksia.native.maps.Point
|
||||
import moe.lava.banksia.native.maps.Polyline
|
||||
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.Point
|
||||
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.util.BoxedValue
|
||||
import moe.lava.banksia.util.BoxedValue.Companion.box
|
||||
import moe.lava.banksia.util.LoopFlow.Companion.waitUntilSubscribed
|
||||
import moe.lava.banksia.util.log
|
||||
|
||||
sealed class BanksiaEvent {
|
||||
data object DismissState : BanksiaEvent()
|
||||
|
|
@ -256,7 +256,7 @@ class BanksiaViewModel : ViewModel() {
|
|||
ptvService.route(route.routeId, true)
|
||||
else
|
||||
route
|
||||
val colour = routeWithGeo.routeType.getProperties().colour
|
||||
val colour = routeWithGeo.routeType.getUIProperties().colour
|
||||
|
||||
val polylines = mutableListOf<Polyline>()
|
||||
val allPoints = mutableListOf<Point>()
|
||||
|
|
@ -309,7 +309,7 @@ class BanksiaViewModel : ViewModel() {
|
|||
|
||||
private suspend fun buildStops(route: PtvRoute) {
|
||||
val stops = ptvService.stopsByRoute(route.routeId, route.routeType)
|
||||
val colour = route.routeType.getProperties().colour
|
||||
val colour = route.routeType.getUIProperties().colour
|
||||
|
||||
val markers = stops
|
||||
.filter { it.stopLatitude != null && it.stopLongitude != null }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.api.ptv.structures
|
||||
package moe.lava.banksia.ui.components
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Row
|
||||
|
|
@ -11,6 +11,7 @@ import androidx.compose.ui.draw.drawBehind
|
|||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import moe.lava.banksia.api.ptv.structures.PtvRouteType
|
||||
import moe.lava.banksia.resources.Res
|
||||
import moe.lava.banksia.resources.bus
|
||||
import moe.lava.banksia.resources.bus_background
|
||||
|
|
@ -31,7 +32,8 @@ data class RouteTypeProperties(
|
|||
val background: DrawableResource,
|
||||
val icon: DrawableResource,
|
||||
)
|
||||
fun PtvRouteType.getProperties(): RouteTypeProperties {
|
||||
|
||||
fun PtvRouteType.getUIProperties(): RouteTypeProperties {
|
||||
val colour = when (this) {
|
||||
PtvRouteType.TRAIN -> Color(0xFF0072CE)
|
||||
PtvRouteType.TRAM -> Color(0xFF78BE20)
|
||||
|
|
@ -40,34 +42,25 @@ fun PtvRouteType.getProperties(): RouteTypeProperties {
|
|||
}
|
||||
val (drawable, background, icon) = when (this) {
|
||||
PtvRouteType.TRAM -> Triple(
|
||||
Res.drawable.tram, Res.drawable.tram_background, Res.drawable.tram_icon)
|
||||
Res.drawable.tram, Res.drawable.tram_background, Res.drawable.tram_icon
|
||||
)
|
||||
PtvRouteType.TRAIN, PtvRouteType.VLINE -> Triple(
|
||||
Res.drawable.train, Res.drawable.train_background, Res.drawable.train_icon)
|
||||
Res.drawable.train, Res.drawable.train_background, Res.drawable.train_icon
|
||||
)
|
||||
PtvRouteType.BUS, PtvRouteType.NIGHT_BUS -> Triple(
|
||||
Res.drawable.bus, Res.drawable.bus_background, Res.drawable.bus_icon)
|
||||
Res.drawable.bus, Res.drawable.bus_background, Res.drawable.bus_icon
|
||||
)
|
||||
}
|
||||
return RouteTypeProperties(colour, drawable, background, icon)
|
||||
}
|
||||
|
||||
const val ICON_PADDING = 0.25f
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun RouteIconPreview() {
|
||||
Row {
|
||||
ComposableRouteIcon(routeType = PtvRouteType.TRAIN)
|
||||
ComposableRouteIcon(routeType = PtvRouteType.TRAM)
|
||||
ComposableRouteIcon(routeType = PtvRouteType.BUS)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ComposableRouteIcon(
|
||||
modifier: Modifier = Modifier,
|
||||
fun RouteIcon(
|
||||
modifier: Modifier = Modifier.Companion,
|
||||
size: Dp = 40.dp,
|
||||
routeType: PtvRouteType,
|
||||
) {
|
||||
val properties = routeType.getProperties()
|
||||
val properties = routeType.getUIProperties()
|
||||
Image(
|
||||
painter = painterResource(properties.icon),
|
||||
contentDescription = null,
|
||||
|
|
@ -81,5 +74,15 @@ fun ComposableRouteIcon(
|
|||
)
|
||||
}
|
||||
|
||||
const val ICON_PADDING = 0.25f
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
inline fun PtvRouteType.ComposableIcon(modifier: Modifier = Modifier) = ComposableRouteIcon(modifier, routeType = this)
|
||||
private fun RouteIconPreview() {
|
||||
Row {
|
||||
RouteIcon(routeType = PtvRouteType.TRAIN)
|
||||
RouteIcon(routeType = PtvRouteType.TRAM)
|
||||
RouteIcon(routeType = PtvRouteType.BUS)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.ui
|
||||
package moe.lava.banksia.ui.layout
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
|
@ -29,7 +29,8 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.coerceAtMost
|
||||
import androidx.compose.ui.unit.dp
|
||||
import moe.lava.banksia.api.ptv.structures.ComposableRouteIcon
|
||||
import moe.lava.banksia.ui.BanksiaEvent
|
||||
import moe.lava.banksia.ui.components.RouteIcon
|
||||
import moe.lava.banksia.ui.state.InfoPanelState
|
||||
|
||||
@Composable
|
||||
|
|
@ -44,7 +45,7 @@ fun InfoPanel(
|
|||
val localDensity = LocalDensity.current
|
||||
|
||||
Column(
|
||||
Modifier
|
||||
Modifier.Companion
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 24.dp)
|
||||
.heightIn(max = 250.dp)
|
||||
|
|
@ -63,10 +64,10 @@ fun InfoPanel(
|
|||
|
||||
if (state.loading)
|
||||
CircularProgressIndicator(
|
||||
modifier = Modifier.width(32.dp).align(Alignment.CenterEnd)
|
||||
modifier = Modifier.Companion.width(32.dp).align(Alignment.Companion.CenterEnd)
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.safeContent))
|
||||
Spacer(Modifier.Companion.windowInsetsBottomHeight(WindowInsets.Companion.safeContent))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -75,14 +76,14 @@ private inline fun RouteInfoPanel(
|
|||
state: InfoPanelState.Route,
|
||||
onEvent: (BanksiaEvent) -> Unit,
|
||||
) {
|
||||
Column(Modifier.fillMaxWidth()) {
|
||||
Column(Modifier.Companion.fillMaxWidth()) {
|
||||
Row {
|
||||
ComposableRouteIcon(routeType = state.type)
|
||||
RouteIcon(routeType = state.type)
|
||||
Text(
|
||||
state.name,
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
textAlign = TextAlign.Start
|
||||
fontWeight = FontWeight.Companion.SemiBold,
|
||||
textAlign = TextAlign.Companion.Start
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -93,14 +94,14 @@ private inline fun RunInfoPanel(
|
|||
state: InfoPanelState.Run,
|
||||
onEvent: (BanksiaEvent) -> Unit,
|
||||
) {
|
||||
Column(Modifier.fillMaxWidth()) {
|
||||
Column(Modifier.Companion.fillMaxWidth()) {
|
||||
Row {
|
||||
ComposableRouteIcon(routeType = state.type)
|
||||
RouteIcon(routeType = state.type)
|
||||
Text(
|
||||
"${state.direction} via ${state.routeName ?: "..."}",
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
textAlign = TextAlign.Start
|
||||
fontWeight = FontWeight.Companion.SemiBold,
|
||||
textAlign = TextAlign.Companion.Start
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -111,29 +112,38 @@ private inline fun StopInfoPanel(
|
|||
state: InfoPanelState.Stop,
|
||||
onEvent: (BanksiaEvent) -> Unit,
|
||||
) {
|
||||
Column(Modifier.fillMaxWidth()) {
|
||||
Column(Modifier.Companion.fillMaxWidth()) {
|
||||
Text(
|
||||
state.name,
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
textAlign = TextAlign.Start
|
||||
fontWeight = FontWeight.Companion.SemiBold,
|
||||
textAlign = TextAlign.Companion.Start
|
||||
)
|
||||
state.subname?.let {
|
||||
Text(
|
||||
"/ $it",
|
||||
modifier = Modifier.padding(start = 5.dp),
|
||||
modifier = Modifier.Companion.padding(start = 5.dp),
|
||||
style = MaterialTheme.typography.titleSmall,
|
||||
color = Color.Gray,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
textAlign = TextAlign.Start
|
||||
color = Color.Companion.Gray,
|
||||
fontWeight = FontWeight.Companion.SemiBold,
|
||||
textAlign = TextAlign.Companion.Start
|
||||
)
|
||||
}
|
||||
state.departures?.let {
|
||||
Spacer(Modifier.height(5.dp))
|
||||
Spacer(Modifier.Companion.height(5.dp))
|
||||
it.forEach { (name, formatted) ->
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(name, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold)
|
||||
Text(formatted, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.padding(horizontal = 5.dp))
|
||||
Row(verticalAlignment = Alignment.Companion.CenterVertically) {
|
||||
Text(
|
||||
name,
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.Companion.SemiBold
|
||||
)
|
||||
Text(
|
||||
formatted,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Companion.Ellipsis,
|
||||
modifier = Modifier.Companion.padding(horizontal = 5.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.ui
|
||||
package moe.lava.banksia.ui.layout
|
||||
|
||||
import androidx.compose.animation.core.animateDpAsState
|
||||
import androidx.compose.foundation.clickable
|
||||
|
|
@ -23,7 +23,8 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import moe.lava.banksia.api.ptv.structures.ComposableRouteIcon
|
||||
import moe.lava.banksia.ui.BanksiaEvent
|
||||
import moe.lava.banksia.ui.components.RouteIcon
|
||||
import moe.lava.banksia.ui.state.SearchState
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
|
|
@ -43,16 +44,16 @@ fun Searcher(
|
|||
label = "padding"
|
||||
)
|
||||
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
Box(modifier = Modifier.Companion.fillMaxSize()) {
|
||||
SearchBar(
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopCenter)
|
||||
modifier = Modifier.Companion
|
||||
.align(Alignment.Companion.TopCenter)
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = animatedPadding),
|
||||
shadowElevation = 6.dp, // Elevation level 3
|
||||
inputField = {
|
||||
SearchBarDefaults.InputField(
|
||||
modifier = Modifier.padding(horizontal = 20.dp - animatedPadding),
|
||||
modifier = Modifier.Companion.padding(horizontal = 20.dp - animatedPadding),
|
||||
query = state.text,
|
||||
onQueryChange = { onEvent(BanksiaEvent.SearchUpdate(it)) },
|
||||
onSearch = {},
|
||||
|
|
@ -64,7 +65,13 @@ fun Searcher(
|
|||
Icon(
|
||||
imageVector = Icons.Default.Clear,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.clickable { onEvent(BanksiaEvent.SearchUpdate("")) }
|
||||
modifier = Modifier.Companion.clickable {
|
||||
onEvent(
|
||||
BanksiaEvent.SearchUpdate(
|
||||
""
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
@ -72,15 +79,15 @@ fun Searcher(
|
|||
expanded = expanded,
|
||||
onExpandedChange = onExpandedChange,
|
||||
) {
|
||||
LazyColumn(modifier = Modifier.fillMaxWidth()) {
|
||||
LazyColumn(modifier = Modifier.Companion.fillMaxWidth()) {
|
||||
for (entry in state.entries) {
|
||||
item {
|
||||
ListItem(
|
||||
headlineContent = { Text(entry.mainText) },
|
||||
supportingContent = { entry.subText?.let { Text(it) } },
|
||||
leadingContent = { ComposableRouteIcon(routeType = entry.routeType) },
|
||||
colors = ListItemDefaults.colors(containerColor = Color.Transparent),
|
||||
modifier = Modifier
|
||||
leadingContent = { RouteIcon(routeType = entry.routeType) },
|
||||
colors = ListItemDefaults.colors(containerColor = Color.Companion.Transparent),
|
||||
modifier = Modifier.Companion
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp, vertical = 4.dp)
|
||||
.clickable {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.native
|
||||
package moe.lava.banksia.ui.platform
|
||||
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.material3.ColorScheme
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
data class CameraPosition(
|
||||
val centre: Point = Point(-37.8136, 144.9631),
|
||||
val bounds: CameraPositionBounds? = null,
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
data class CameraPositionBounds(val northeast: Point, val southwest: Point)
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
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.BanksiaEvent
|
||||
import moe.lava.banksia.ui.state.MapState
|
||||
import moe.lava.banksia.util.BoxedValue
|
||||
|
||||
@Composable
|
||||
expect fun getScreenHeight(): Int
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
expect fun Maps(
|
||||
modifier: Modifier = Modifier.Companion,
|
||||
state: MapState,
|
||||
onEvent: (BanksiaEvent) -> Unit,
|
||||
cameraPositionFlow: Flow<BoxedValue<CameraPosition>>,
|
||||
setLastKnownLocation: (Point) -> Unit,
|
||||
extInsets: WindowInsets,
|
||||
)
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import moe.lava.banksia.api.ptv.structures.PtvRouteType
|
||||
|
||||
sealed class Marker {
|
||||
abstract val point: Point
|
||||
|
||||
data class Stop(
|
||||
override val point: Point,
|
||||
val id: Int,
|
||||
val type: PtvRouteType,
|
||||
val colour: Color,
|
||||
) : Marker()
|
||||
|
||||
data class Vehicle(
|
||||
override val point: Point,
|
||||
val ref: String,
|
||||
val type: PtvRouteType,
|
||||
) : Marker()
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
data class Point(val lat: Double, val lng: Double)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
data class Polyline(val points: List<Point>, val colour: Color)
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package moe.lava.banksia.ui.state
|
||||
|
||||
import moe.lava.banksia.native.maps.Marker
|
||||
import moe.lava.banksia.native.maps.Polyline
|
||||
import moe.lava.banksia.ui.platform.maps.Marker
|
||||
import moe.lava.banksia.ui.platform.maps.Polyline
|
||||
|
||||
data class MapState(
|
||||
val stops: List<Marker.Stop> = listOf(),
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
package moe.lava.banksia.util
|
||||
|
||||
class BoxedValue<T>(val value: T) {
|
||||
operator fun component1() = value
|
||||
|
||||
companion object {
|
||||
fun <T> T.box() = BoxedValue(this)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia
|
||||
package moe.lava.banksia.ui
|
||||
|
||||
import androidx.compose.ui.window.ComposeUIViewController
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.native
|
||||
package moe.lava.banksia.ui.platform
|
||||
|
||||
import androidx.compose.material3.ColorScheme
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.native.maps
|
||||
package moe.lava.banksia.ui.platform.maps
|
||||
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
Loading…
Add table
Add a link
Reference in a new issue