Author: Adam Evyčędo <git@apiote.xyz>
fix zooming map in journeys
%!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 c1cdf7f3c39aeea223a67d41f4b38c91beb0cbb4..fb52def6bb38a8631036e1729babea88ab80fae2 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 @@ -43,6 +43,8 @@ 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) { Log.d("Journeys", "from: ${from.planString()}") Log.d("Journeys", "to: ${to.planString()}") @@ -68,7 +70,6 @@ arriveBy = params.timeReference == TimeReference.ARRIVE_BY, requireBikeTransport = params.bicycle, pedestrianProfile = if (params.wheelchairAccessible) PedestrianProfile.WHEELCHAIR else PedestrianProfile.FOOT, ) - Log.d("Journeys", "${response.itineraries}") response.itineraries.map { val legs: List<Leg> = it.legs.map { Leg( @@ -84,11 +85,11 @@ Position(0.0, 0.0), 0u, Mps(0), LineStub( - it.routeShortName ?: "", // TODO is it nullable, yes e.g. for transit + it.routeShortName ?: "", LineType.fromTransitous2(it.mode), Colour.fromHex(it.routeColor) ), - it.headsign ?: "", // TODO is it nullable, yes e.g. for transit + it.headsign ?: "", CongestionLevel.UNKNOWN, OccupancyStatus.UNKNOWN ), @@ -109,11 +110,11 @@ Position(0.0, 0.0), 0u, Mps(0), LineStub( - it.routeShortName ?: "", // TODO is it nullable, yes e.g. for transit + it.routeShortName ?: "", LineType.fromTransitous2(it.mode), Colour.fromHex(it.routeColor) ), - it.headsign ?: "", // TODO is it nullable, yes e.g. for transit + it.headsign ?: "", CongestionLevel.UNKNOWN, OccupancyStatus.UNKNOWN ), 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 d7e64de917032eb11d4c946d965e372a76665f3a..934696370d4ff426935ed59438aa16de969fa377 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 @@ -4,6 +4,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later package xyz.apiote.bimba.czwek.journeys +import android.annotation.SuppressLint import android.content.Context import android.util.Log import android.view.LayoutInflater @@ -48,6 +49,7 @@ journey.legs.map { it.start.vehicle.Line.name }.filter { it.isNotBlank() }.joinToString() holder.legs.removeAllViews() journey.legs.forEach { + @SuppressLint("InflateParams") val legView = inflater.inflate(R.layout.journey_leg, null, false) val legOrigin = legView.findViewById<TextView>(R.id.leg_origin) 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 27cd5f4eb45f1a1ed247833cd99ea4445c40cbf0..11bc9208d74abe424f25c39fa4ff5c4945ae2445 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 @@ -21,6 +21,7 @@ import androidx.appcompat.content.res.AppCompatResources import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.core.view.doOnPreDraw import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.lifecycle.ViewModelProvider @@ -44,10 +45,10 @@ import xyz.apiote.bimba.czwek.repo.Position import kotlin.math.max import kotlin.math.min -// FIXME rotating breaks class JourneysActivity : AppCompatActivity() { private lateinit var binding: ActivityJourneysBinding + private lateinit var journeysViewModel: JourneysViewModel companion object { const val ORIGIN_PARAM = "origin" @@ -87,7 +88,7 @@ enableEdgeToEdge() super.onCreate(savedInstanceState) binding = ActivityJourneysBinding.inflate(layoutInflater) setContentView(binding.root) - val journeysViewModel = ViewModelProvider(this)[JourneysViewModel::class.java] + journeysViewModel = ViewModelProvider(this)[JourneysViewModel::class.java] ViewCompat.setOnApplyWindowInsetsListener(binding.journeys) { v, windowInsets -> val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) @@ -120,7 +121,6 @@ val destination = getDestination() val params = getJourneyParams() journeysViewModel.journeys.observe(this) { - zoomMap(dpToPixelI(100f)) binding.journeysProgress.visibility = View.GONE if (it.isEmpty()) { binding.emptyText.visibility = View.VISIBLE @@ -129,6 +129,7 @@ } else { showMarkers(origin.position(), destination.position()) binding.journeys.visibility = View.VISIBLE + binding.journeys.adapter = JourneysAdapter(layoutInflater, this, it) { journey, hide -> binding.map.overlays.removeAll { true } @@ -188,9 +189,15 @@ } ssb?.expand() } - override fun onStart() { - super.onStart() - zoomMap() + override fun onResume() { + super.onResume() + binding.map.doOnPreDraw { + zoomMap(dpToPixelI(100f)) + val origin = getOrigin() + val destination = getDestination() + showMarkers(origin.position(), destination.position()) + binding.map.invalidate() + } } fun zoomMap(margin: Int = 0, box: BoundingBox? = null) { diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysViewModel.kt b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysViewModel.kt index 40857260ab38b817daed4199d8050bc667de02ef..96704b235dde8897e9c7faaed5abb640620020c2 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysViewModel.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/journeys/JourneysViewModel.kt @@ -20,6 +20,7 @@ private val _journeys = MutableLiveData<List<Journey>>() val journeys: LiveData<List<Journey>> = _journeys + // FIXME when not in foreground, throws java.net.SocketException: Software caused connection abort fun getJourneys(context: Context, origin: Place, destination: Place, params: JourneyParams) { viewModelScope.launch { Log.i("Journeys", "getting journeys") diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/search/Query.kt b/app/src/main/java/xyz/apiote/bimba/czwek/search/Query.kt index a6bd5c4d80c1ce968668bceebd1018783204dd7e..9689087311b225976332852aed41ea5cd2e5bf2a 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/search/Query.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/search/Query.kt @@ -53,7 +53,6 @@ } else if (seemsCoordinatesDegrees(raw)) { val coords = raw.split(", ", ",", " ") try { position = Position(Location.convert(coords[0]), Location.convert(coords[1])) - // TODO check coordinates valid; TEST mode = Mode.POSITION } catch (e: Exception) { Log.i("Query", "while parsing degrees: $e") @@ -70,7 +69,6 @@ coords[0] = coords[0].replace(Regex("[NS]"), "") coords[1] = coords[1].replace(Regex("[EW]"), "") position = Position(Location.convert(coords[0]) * northSouth, Location.convert(coords[1]) * eastWest) - // TODO check coordinates valid; TEST mode = Mode.POSITION } catch (e: Exception) { Log.i("Query", "while parsing deg min sec: $e") diff --git a/app/src/main/res/layout-land/activity_journeys.xml b/app/src/main/res/layout-land/activity_journeys.xml index fae2b3a37167b5d4e3ab54a5d2deb158436d577a..56817e15e5b87abec07b36f669d67786832b9e14 100644 --- a/app/src/main/res/layout-land/activity_journeys.xml +++ b/app/src/main/res/layout-land/activity_journeys.xml @@ -12,6 +12,7 @@ tools:context=".journeys.JourneysActivity"> <org.osmdroid.views.MapView android:id="@+id/map" + android:layout_marginStart="350dp" android:layout_width="match_parent" android:layout_height="match_parent" />