Author: Adam Evyčędo <git@apiote.xyz>
reverse journeys for arrive-by
%!v(PANIC=String method: strings: negative Repeat count)
diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/api/transitousJourney.kt b/app/src/main/java/xyz/apiote/bimba/czwek/api/transitousJourney.kt index ea2b5119ea292e2e56365a8fd389e567141fa5d0..99032bc0fe4282813440964a366394adfdc3148d 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/api/transitousJourney.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/api/transitousJourney.kt @@ -42,8 +42,6 @@ if (!isNetworkAvailable(context)) { throw TrafficResponseException(0, "", Error(0, R.string.error_offline, R.drawable.error_net)) } - // FIXME arrive-by shows wierd results - return withContext(Dispatchers.IO) { val client = OkHttpClient.Builder() .callTimeout(Duration.ofSeconds(60)) @@ -61,7 +59,7 @@ arriveBy = params.timeReference == TimeReference.ARRIVE_BY, requireBikeTransport = params.bicycle, pedestrianProfile = if (params.wheelchairAccessible) PedestrianProfile.WHEELCHAIR else PedestrianProfile.FOOT, ) - response.itineraries.map { + val journeys = response.itineraries.map { val legs: List<Leg> = it.legs.map { Leg( Event( @@ -130,6 +128,11 @@ it.startTime.atZoneSameInstant(ZoneId.systemDefault()), it.endTime.atZoneSameInstant( ZoneId.systemDefault() ), legs ) + } + if (params.timeReference == TimeReference.ARRIVE_BY) { + journeys.reversed() + } else { + journeys } } } diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/ui/journey/JourneyFragment.kt b/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/ui/journey/JourneyFragment.kt index a9809b0700447743d49576cfda64c2b01392a0e6..eeed26a59263305d83f91c1defe7dc15a37e4768 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/ui/journey/JourneyFragment.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/ui/journey/JourneyFragment.kt @@ -469,7 +469,7 @@ isDestinationClean() } else if (source == DashboardViewModel.DEST_KEY) { isOriginClean() } else { - TODO("throw exception") + throw IllegalArgumentException("source must be one of ${DashboardViewModel.ORIGIN_KEY}, ${DashboardViewModel.DEST_KEY}. found $source") } private fun chipifyOrigin(place: Place?) { diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/Journeys.kt b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/Journeys.kt index c26636eec2214fb921c65c5087291008fa735904..ff1d71676d397e60dcf7203f80d6cfa180069dc9 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/Journeys.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/Journeys.kt @@ -52,7 +52,7 @@ @SuppressLint("InflateParams") val legView = inflater.inflate(R.layout.journey_leg, null, false) val legOrigin = legView.findViewById<TextView>(R.id.leg_origin) - if (it.origin.stop.name.isBlank() || it.origin.stop.name == "START") { + if (it.origin.stop.name.isBlank() || it.origin.stop.name in arrayOf("START", "END")) { legOrigin.visibility = View.GONE } else { legOrigin.apply { @@ -98,7 +98,7 @@ context.getString(R.string.journey_stops_headsign, stops, headsign) } val legDestination = legView.findViewById<TextView>(R.id.leg_destination) - if (it.destination.stop.name.isBlank() || it.destination.stop.name == "END") { + if (it.destination.stop.name.isBlank() || it.destination.stop.name in arrayOf("START", "END")) { legDestination.visibility = View.GONE } else { legDestination.apply { diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysActivity.kt b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysActivity.kt index 11bc9208d74abe424f25c39fa4ff5c4945ae2445..ad9c1ea0427a21dabd5fbd54f144587e85f027dd 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysActivity.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysActivity.kt @@ -92,13 +92,13 @@ journeysViewModel = ViewModelProvider(this)[JourneysViewModel::class.java] ViewCompat.setOnApplyWindowInsetsListener(binding.journeys) { v, windowInsets -> val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.updatePadding(bottom = insets.bottom + dpToPixelI(16f)) + val l = windowInsets.displayCutout?.safeInsetLeft?.takeIf { it > 0 } ?: insets.left + v.updatePadding(bottom = insets.bottom + dpToPixelI(16f), left = l) v.updateLayoutParams<ViewGroup.MarginLayoutParams> { if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { topMargin = insets.top + dpToPixelI(16f) } } - // TODO left/right notch WindowInsetsCompat.CONSUMED } @@ -217,7 +217,7 @@ val originMarker = Marker(binding.map).apply { position = GeoPoint(origin.latitude, origin.longitude) setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) icon = AppCompatResources.getDrawable( - this@JourneysActivity, R.drawable.pin // TODO R.drawable.legOrigin + this@JourneysActivity, R.drawable.pin ) setOnMarkerClickListener { marker, map -> true @@ -229,7 +229,7 @@ val destinationMarker = Marker(binding.map).apply { position = GeoPoint(destination.latitude, destination.longitude) setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) icon = AppCompatResources.getDrawable( - this@JourneysActivity, R.drawable.pin // TODO R.drawable.legDestination + this@JourneysActivity, R.drawable.pin ) setOnMarkerClickListener { marker, map -> true