Bimba.git

commit ed4ca2c0923812ecbef37f1a5f010620988b8c0b

Author: Adam Evyčędo <git@apiote.xyz>

add params to query and fix position

%!v(PANIC=String method: strings: negative Repeat count)


diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/DashboardViewModel.kt b/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/DashboardViewModel.kt
index 877dbb6656342cf073a915c8c42fe80389e580b7..c29eae885cd246c368dc35001cd26eebb9562ff6 100644
--- a/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/DashboardViewModel.kt
+++ b/app/src/main/java/xyz/apiote/bimba/czwek/dashboard/DashboardViewModel.kt
@@ -64,5 +64,7 @@
 	var timeReference: TimeReference = TimeReference.DEPART_AFTER
 	var date: Long? = null
 	var time: LocalTime? = null
+	var wheelchairAccessible: Boolean = false
+	var bicycle: Boolean = false
 
 }




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 c44244e56ec62ff11c4a8a21d033af5d62d7c37d..76ab1d5c786f805d1d617f5e7424c6a27c3f602f 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
@@ -166,8 +166,11 @@ 				dashboard.viewModel.data[DashboardViewModel.ORIGIN_KEY]!!.value!!,
 				dashboard.viewModel.data[DashboardViewModel.DEST_KEY]!!.value!!,
 				JourneyParams(
 					dashboard.viewModel.timeReference,
-					dashboard.viewModel.date?.let { epochMilli -> Instant.ofEpochMilli(epochMilli) }?.atZone(ZoneId.systemDefault())?.toLocalDate(),
-					dashboard.viewModel.time
+					dashboard.viewModel.date?.let { epochMilli -> Instant.ofEpochMilli(epochMilli) }
+						?.atZone(ZoneId.systemDefault())?.toLocalDate(),
+					dashboard.viewModel.time,
+					dashboard.viewModel.wheelchairAccessible,
+					dashboard.viewModel.bicycle
 				)
 			)
 			startActivity(intent)
@@ -328,6 +331,17 @@ 						)
 				}
 			}.show((activity as MainActivity).supportFragmentManager, null)
 		}
+
+		binding.chipWheelchair.isChecked = dashboard.viewModel.wheelchairAccessible
+		binding.chipWheelchair.setOnClickListener {
+			dashboard.viewModel.wheelchairAccessible = binding.chipWheelchair.isChecked
+		}
+
+		binding.chipBike.isChecked = dashboard.viewModel.bicycle
+		binding.chipBike.setOnClickListener {
+			dashboard.viewModel.bicycle = binding.chipBike.isChecked
+		}
+
 		return root
 	}
 
@@ -379,6 +393,7 @@ 					dashboard.viewModel.set(
 						source,
 						Place(q.position!!.latitude, q.position!!.longitude)
 					)
+					suggestions.removeView(dashboard.viewModel.positionChips[source])
 				} else {
 					setChipProgress(chip)
 					dashboard.viewModel.positionQueries[source] = q
@@ -561,6 +576,9 @@ 				it,
 				Place(position.latitude, position.longitude)
 			)
 			dashboard.viewModel.positionQueries[it] = null
+			val suggestions =
+				if (it == DashboardViewModel.ORIGIN_KEY) binding.originSuggestions else binding.destinationSuggestions
+			suggestions.removeView(dashboard.viewModel.positionChips[it])
 		}
 		viewModel.hereChipRequester = null
 	}




diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/repo/JourneyParams.kt b/app/src/main/java/xyz/apiote/bimba/czwek/repo/JourneyParams.kt
index bf6d60f1e2d1573b10dce5d35e986ca16abd62ec..7c67c644d249c7d3e230ebb847d997508707f061 100644
--- a/app/src/main/java/xyz/apiote/bimba/czwek/repo/JourneyParams.kt
+++ b/app/src/main/java/xyz/apiote/bimba/czwek/repo/JourneyParams.kt
@@ -22,7 +22,7 @@ 	}
 }
 
 @Parcelize
-data class JourneyParams(val timeReference: TimeReference, val date: LocalDate?, val time: LocalTime?) : Parcelable
+data class JourneyParams(val timeReference: TimeReference, val date: LocalDate?, val time: LocalTime?, val wheelchairAccessible: Boolean, val bicycle: Boolean) : Parcelable
 /*
 					date ?: Instant.now().atZone(ZoneId.systemDefault()).toLocalDate()
 					time ?: Instant.now().atZone(ZoneId.systemDefault()).toLocalTime()




diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/repo/Position.kt b/app/src/main/java/xyz/apiote/bimba/czwek/repo/Position.kt
index 3d0e6cfcf66b180d0f53ee9b11bb6573c5105f36..0ae7950e054ec3418325a78844809821aa13602f 100644
--- a/app/src/main/java/xyz/apiote/bimba/czwek/repo/Position.kt
+++ b/app/src/main/java/xyz/apiote/bimba/czwek/repo/Position.kt
@@ -11,6 +11,12 @@ import xyz.apiote.bimba.czwek.api.PositionV1
 
 @Parcelize
 data class Position(val latitude: Double, val longitude: Double): Parcelable {
+	init {
+		if (latitude > 90 || latitude < -90 || longitude > 180 || longitude < -180) {
+			throw IllegalArgumentException("$latitude must be [-90, 90], $longitude must be [-180, 180]")
+		}
+	}
+
 	constructor(p: PositionV1) : this(p.latitude, p.longitude)
 
 	fun isZero(): Boolean {




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 2cc392e4faf4006abdab05d4e918544ee2055604..5396231c9c4049f16e1487129092e308580baf2a 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
@@ -9,6 +9,7 @@ import android.location.Location
 import android.os.Build
 import android.os.Parcel
 import android.os.Parcelable
+import android.util.Log
 import com.google.openlocationcode.OpenLocationCode
 import kotlinx.parcelize.Parcelize
 import xyz.apiote.bimba.czwek.repo.Position
@@ -106,17 +107,19 @@ 		} else if (OpenLocationCode.isValidCode(raw.trim().split(" ").first().trim(',').trim())) {
 			mode = Mode.POSITION
 			geocode(context)
 		} else if (seemsCoordinatesDegrees(raw)) {
-			val coords = raw.split(Regex(",| |, "))
+			val coords = raw.split(", ", ",", " ")
 			try {
 				position = Position(Location.convert(coords[0]), Location.convert(coords[1]))
+				// TODO check coordinates valid; TEST
 				mode = Mode.POSITION
-			} catch (_: IllegalArgumentException) {
+			} catch (e: Exception) {
+				Log.i("Query", "while parsing degrees: $e")
 				mode = Mode.NAME
 			}
 		} else if (seemsCoordinatesDegreesMinutesSeconds(raw)) {
 			val coords =
 				raw.replace(Regex("° ?"), ":").replace(Regex("' ?"), ":").replace(Regex("""" ?"""), "")
-					.split(" ").toMutableList()
+					.split(" ").map { it.replace(",", "") }.toMutableList()
 			try {
 				val northSouth = if (coords[0].last() == 'N') 1 else -1
 				val eastWest = if (coords[1].last() == 'E') 1 else -1
@@ -124,7 +127,10 @@ 				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)
-			} catch (_: IllegalArgumentException) {
+				// TODO check coordinates valid; TEST
+				mode = Mode.POSITION
+			} catch (e: Exception) {
+				Log.i("Query", "while parsing deg min sec: $e")
 				mode = Mode.NAME
 			}
 		} else {