feat: implement route type and icons

This commit is contained in:
LavaDesu 2025-04-15 14:09:46 +10:00
parent 3c0eb906cc
commit 4cd160cc47
Signed by: cilly
GPG key ID: 6500251E087653C9
13 changed files with 200 additions and 3 deletions

View file

@ -0,0 +1,56 @@
package moe.lava.banksia.api.ptv
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import moe.lava.banksia.resources.Res
import moe.lava.banksia.resources.bus
import moe.lava.banksia.resources.bus_background
import moe.lava.banksia.resources.bus_icon
import moe.lava.banksia.resources.train
import moe.lava.banksia.resources.train_background
import moe.lava.banksia.resources.train_icon
import moe.lava.banksia.resources.tram
import moe.lava.banksia.resources.tram_background
import moe.lava.banksia.resources.tram_icon
import org.jetbrains.compose.resources.DrawableResource
import org.jetbrains.compose.resources.painterResource
data class RouteTypeProperties(
val colour: Color,
val drawable: DrawableResource,
val background: DrawableResource,
val icon: DrawableResource,
)
fun RouteType.getProperties(): RouteTypeProperties {
val colour = when (this) {
RouteType.TRAIN -> Color(0xFF0072CE)
RouteType.TRAM -> Color(0xFF78BE20)
RouteType.BUS, RouteType.NIGHT_BUS -> Color(0xFFFF8200)
RouteType.VLINE -> Color(0xFF8F1A95)
}
val (drawable, background, icon) = when (this) {
RouteType.TRAM -> Triple(
Res.drawable.tram, Res.drawable.tram_background, Res.drawable.tram_icon)
RouteType.TRAIN, RouteType.VLINE -> Triple(
Res.drawable.train, Res.drawable.train_background, Res.drawable.train_icon)
RouteType.BUS, RouteType.NIGHT_BUS -> Triple(
Res.drawable.bus, Res.drawable.bus_background, Res.drawable.bus_icon)
}
return RouteTypeProperties(colour, drawable, background, icon)
}
@Composable
fun RouteType.ComposableIcon() {
val properties = this.getProperties()
Image(
painter = painterResource(properties.icon),
contentDescription = null,
modifier = Modifier
.drawBehind {
drawCircle(properties.colour, radius = (this.size.minDimension + 10.dp.toPx()) / 2f)
}
)
}

View file

@ -30,6 +30,7 @@ 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.ComposableIcon
import moe.lava.banksia.api.ptv.PtvService
import moe.lava.banksia.api.ptv.Route
@ -58,7 +59,7 @@ fun Searcher(
val localRoutes = ptvService.routes()
routes = localRoutes.sortedWith(
compareBy(
// { it.routeType.ordinal },
{ it.gtfsSubType()?.ordinal },
{ it.routeNumber.toIntOrNull() },
{ it.routeName }
)
@ -104,7 +105,7 @@ fun Searcher(
Text(route.routeName)
}
},
// leadingContent = { route.route_type.ComposableIcon() },
leadingContent = { route.routeType.ComposableIcon() },
colors = ListItemDefaults.colors(containerColor = Color.Transparent),
modifier = Modifier
.fillMaxWidth()