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 {