refactor: large treewide renaming

This commit is contained in:
LavaDesu 2025-08-05 00:37:28 +10:00
parent 8c0bff3bc4
commit c6b739e511
Signed by: cilly
GPG key ID: 6500251E087653C9
31 changed files with 206 additions and 174 deletions

View file

@ -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" />

View file

@ -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()
}

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.native
package moe.lava.banksia.ui.platform
import android.os.Build
import androidx.compose.material3.ColorScheme

View file

@ -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,
)

View file

@ -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,
)

View file

@ -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,

View file

@ -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 }

View file

@ -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)
}
}

View file

@ -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)
)
}
}
}

View file

@ -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 {

View file

@ -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

View file

@ -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,
)

View file

@ -0,0 +1,3 @@
package moe.lava.banksia.ui.platform.maps
data class CameraPositionBounds(val northeast: Point, val southwest: Point)

View file

@ -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,
)

View file

@ -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()
}

View file

@ -0,0 +1,3 @@
package moe.lava.banksia.ui.platform.maps
data class Point(val lat: Double, val lng: Double)

View file

@ -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)

View file

@ -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(),

View file

@ -1,4 +1,4 @@
package moe.lava.banksia
package moe.lava.banksia.ui
import androidx.compose.ui.window.ComposeUIViewController

View file

@ -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

View file

@ -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

View file

@ -7,7 +7,7 @@ plugins {
group = "moe.lava.banksia"
version = "1.0.0"
application {
mainClass.set("moe.lava.banksia.ApplicationKt")
mainClass.set("moe.lava.banksia.server.ApplicationKt")
applicationDefaultJvmArgs = listOf("-Dio.ktor.development=${extra["io.ktor.development"] ?: "false"}")
}

View file

@ -1,4 +1,4 @@
package moe.lava.banksia
package moe.lava.banksia.server
import io.ktor.server.application.Application
import io.ktor.server.engine.embeddedServer

View file

@ -1,4 +1,4 @@
package moe.lava.banksia
package moe.lava.banksia.util
import android.util.Log

View file

@ -24,10 +24,10 @@ import moe.lava.banksia.api.ptv.structures.PtvRoute
import moe.lava.banksia.api.ptv.structures.PtvRouteType
import moe.lava.banksia.api.ptv.structures.PtvRun
import moe.lava.banksia.api.ptv.structures.PtvStop
import moe.lava.banksia.error
import moe.lava.banksia.log
import moe.lava.banksia.util.CacheMap
import moe.lava.banksia.util.LoopFlow.Companion.initWith
import moe.lava.banksia.util.error
import moe.lava.banksia.util.log
import moe.lava.banksia.util.loopFlow
import okio.ByteString.Companion.encodeUtf8
import kotlin.random.Random

View file

@ -3,7 +3,6 @@ package moe.lava.banksia.util
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import moe.lava.banksia.error
class CacheMap<K, V>(
coroutineScope: CoroutineScope,

View file

@ -1,5 +1,5 @@
package moe.lava.banksia
package moe.lava.banksia.util
expect fun log(tag: String, msg: String)
fun error(tag: String, throwable: Throwable) = error(tag, "", throwable)
expect fun log(tag: String, msg: String)
expect fun error(tag: String, msg: String, throwable: Throwable? = null)

View file

@ -7,7 +7,6 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.first
import moe.lava.banksia.log
import kotlin.experimental.ExperimentalTypeInference
@OptIn(ExperimentalCoroutinesApi::class)

View file

@ -1,4 +1,4 @@
package moe.lava.banksia
package moe.lava.banksia.util
actual fun log(tag: String, msg: String) {
TODO("Not yet implemented")

View file

@ -1,4 +1,4 @@
package moe.lava.banksia
package moe.lava.banksia.util
actual fun log(tag: String, msg: String) {
println("[$tag] $msg")