Bimba.git

commit ff257e947b175dcb61fa1f2b85e0e5f7cf173572

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