From a5796ee7865a4f4c4e8710115fbb9780ff02d9b6 Mon Sep 17 00:00:00 2001 From: Karan Sharma <55722391+ksharma-xyz@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:13:38 +1100 Subject: [PATCH] UI: Display intermediate stops in journey timeline (#247) --- .../ui/state/timetable/TimeTableState.kt | 14 +++++---- .../trip/planner/ui/components/JourneyCard.kt | 6 ++-- .../planner/ui/timetable/TimeTableScreen.kt | 29 ++++++++++--------- .../timetable/business/TripResponseMapper.kt | 4 ++- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/feature/trip-planner/state/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/state/timetable/TimeTableState.kt b/feature/trip-planner/state/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/state/timetable/TimeTableState.kt index 71202530..cf658a4c 100644 --- a/feature/trip-planner/state/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/state/timetable/TimeTableState.kt +++ b/feature/trip-planner/state/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/state/timetable/TimeTableState.kt @@ -31,15 +31,19 @@ data class TimeTableState( * transportation.disassembledName -> lineName * transportation.product.class -> TransportModeType */ - val transportModeLines: ImmutableList? = null, + val transportModeLines: ImmutableList, val legs: ImmutableList, ) { val journeyId: String - get() = ( - originUtcDateTime + destinationTime + transportModeLines - ?.joinToString { it.lineName } - ).filter { it.isLetterOrDigit() } + get() = buildString { + append(originUtcDateTime) + append(destinationTime) + append( + transportModeLines.joinToString { it.lineName } + .filter { it.isLetterOrDigit() }, + ) + } sealed class Leg { data class WalkingLeg( diff --git a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/components/JourneyCard.kt b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/components/JourneyCard.kt index f07499cd..d8d0414d 100644 --- a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/components/JourneyCard.kt +++ b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/components/JourneyCard.kt @@ -60,14 +60,14 @@ fun JourneyCard( destinationTime: String, totalTravelTime: String, isWheelchairAccessible: Boolean, + transportModeList: ImmutableList, onClick: () -> Unit, modifier: Modifier = Modifier, platformNumber: Char? = null, - transportModeList: ImmutableList? = null, ) { val onSurface: Color = KrailTheme.colors.onSurface val borderColors = remember(transportModeList) { transportModeList.toColors(onSurface) } - val themeColor = transportModeList?.firstOrNull()?.colorCode?.hexToComposeColor() + val themeColor = transportModeList.firstOrNull()?.colorCode?.hexToComposeColor() ?: KrailTheme.colors.onSurface Column( @@ -102,7 +102,7 @@ fun JourneyCard( .weight(1f), horizontalArrangement = Arrangement.spacedBy(6.dp), ) { - transportModeList?.forEachIndexed { index, mode -> + transportModeList.forEachIndexed { index, mode -> TransportModeIcon( letter = mode.name.first(), backgroundColor = mode.colorCode.hexToComposeColor(), diff --git a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/TimeTableScreen.kt b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/TimeTableScreen.kt index b244cb1e..c6cb5eef 100644 --- a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/TimeTableScreen.kt +++ b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/TimeTableScreen.kt @@ -95,12 +95,12 @@ fun TimeTableScreen( originTime = journey.originTime, destinationTime = journey.destinationTime, durationText = journey.travelTime, - transportModeLineList = journey.transportModeLines?.map { + transportModeLineList = journey.transportModeLines.map { TransportModeLine( transportMode = it.transportMode, lineName = it.lineName, ) - }?.toImmutableList(), + }.toImmutableList(), onClick = { onEvent(TimeTableUiEvent.JourneyCardClicked(journey.journeyId)) }, @@ -127,16 +127,17 @@ fun JourneyCardItem( modifier: Modifier = Modifier, transportModeLineList: ImmutableList? = null, ) { - JourneyCard( - timeToDeparture = timeToDeparture, - originTime = originTime, - destinationTime = destinationTime, - totalTravelTime = durationText, - platformNumber = departureLocationNumber, - isWheelchairAccessible = false, - transportModeList = transportModeLineList.takeIf { it?.isNotEmpty() == true } - ?.map { it.transportMode }?.toImmutableList(), - onClick = onClick, - modifier = modifier, - ) + if (!transportModeLineList.isNullOrEmpty()) { + JourneyCard( + timeToDeparture = timeToDeparture, + originTime = originTime, + destinationTime = destinationTime, + totalTravelTime = durationText, + platformNumber = departureLocationNumber, + isWheelchairAccessible = false, + transportModeList = transportModeLineList.map { it.transportMode }.toImmutableList(), + onClick = onClick, + modifier = modifier, + ) + } } diff --git a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/business/TripResponseMapper.kt b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/business/TripResponseMapper.kt index 5c5a8a2a..0c6863a2 100644 --- a/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/business/TripResponseMapper.kt +++ b/feature/trip-planner/ui/src/main/kotlin/xyz/ksharma/krail/trip/planner/ui/timetable/business/TripResponseMapper.kt @@ -31,7 +31,9 @@ internal fun TripResponse.buildJourneyList(): ImmutableList 0 && legsList != null) { + if (originTimeUTC != null && arrivalTimeUTC != null && totalStops > 0 && legsList != null && + transportModeLines != null + ) { TimeTableState.JourneyCardInfo( timeText = originTimeUTC.getTimeText(), platformText = platformText,