Author: Adam Pioterek <adam.pioterek@protonmail.ch>
VM
app/build.gradle | 2 app/src/main/java/ml/adamsprogs/bimba/VmClient.kt | 53 app/src/main/java/ml/adamsprogs/bimba/activities/MainActivity.kt | 3 app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt | 5 app/src/main/java/ml/adamsprogs/bimba/models/Departure.kt | 6 app/src/main/java/ml/adamsprogs/bimba/models/DeparturesAdapter.kt | 4 app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt | 5 app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt | 4
diff --git a/app/build.gradle b/app/build.gradle index f71f944ad8a132439c3c3a927be939c074d7330c..a09f321a3e756e0ead572de3372277714a0d30b2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,6 +35,8 @@ implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.github.arimorty:floatingsearchview:2.1.1' implementation 'org.tukaani:xz:1.6' + implementation 'com.google.code.gson:gson:2.8.1' + implementation 'com.squareup.okhttp3:okhttp:3.8.1' } repositories { maven { diff --git a/app/src/main/java/ml/adamsprogs/bimba/VmClient.kt b/app/src/main/java/ml/adamsprogs/bimba/VmClient.kt index ce9266da34b1b9f694a2546ad9f7ce3f8c910399..1fff89f9d0bb1757d0cf78b5e13f0f6d35c56668 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/VmClient.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/VmClient.kt @@ -2,9 +2,11 @@ package ml.adamsprogs.bimba import android.app.IntentService import android.content.Intent -import ml.adamsprogs.bimba.models.Departure +import ml.adamsprogs.bimba.models.* +import okhttp3.* +import com.google.gson.Gson +import java.util.* -import ml.adamsprogs.bimba.models.createDepartures class VmClient : IntentService("VmClient") { @@ -14,7 +16,46 @@ val stopId = intent.getStringExtra("stopId") if (!isNetworkAvailable(this)) { sendResult(createDepartures(this, stopId)) } else { - //todo download vm + val stopSymbol = intent.getStringExtra("stopSymbol") + val departures = createDepartures(this, stopId) + + val client = OkHttpClient() + val url = "http://www.peka.poznan.pl/vm/method.vm?ts=${Calendar.getInstance().timeInMillis}" + val formBody = FormBody.Builder() + .add("method", "getTimes") + .add("p0", "{\"symbol\": \"$stopSymbol\"}") + .build() + val request = Request.Builder() + .url(url) + .post(formBody) + .build() + val response = client.newCall(request).execute() + val responseBody = response.body()?.string() + val javaRootMapObject = Gson().fromJson(responseBody, HashMap::class.java) + val times = (javaRootMapObject["success"] as Map<*, *>)["times"] as List<*> + val date = Calendar.getInstance() + val today = date.get(Calendar.DAY_OF_WEEK) + val todayDay = "${date.get(Calendar.DATE)}" + val todayMode: String + when (today) { + Calendar.SATURDAY -> todayMode = "saturdays" + Calendar.SUNDAY -> todayMode = "sundays" + else -> todayMode = "workdays" + } + val departuresToday = ArrayList<Departure>() + for (time in times) { + val t = time as Map<*, *> + val departureDay = (t["departure"] as String).split("T")[0].split("-")[2] + + val departureTimeRaw = (t["departure"] as String).split("T")[1].split(":") + val departureTime = "${departureTimeRaw[0]}:${departureTimeRaw[1]}" + val departure = Departure(t["line"] as String, todayMode, departureTime, false, + null, t["direction"] as String, t["realTime"] as Boolean, + departureDay != todayDay, t["onStopPoint"] as Boolean) + departuresToday.add(departure) + } + departures[todayMode] = departuresToday + sendResult(departures) } } } @@ -23,9 +64,9 @@ private fun sendResult(departures: HashMap>) { val broadcastIntent = Intent() broadcastIntent.action = "ml.adamsprogs.bimba.departuresCreated" broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT) - broadcastIntent.putStringArrayListExtra("workdays", departures["workdays"]?.map{it.toString()} as java.util.ArrayList<String>) - broadcastIntent.putStringArrayListExtra("saturdays", departures["saturdays"]?.map{it.toString()} as java.util.ArrayList<String>) - broadcastIntent.putStringArrayListExtra("sundays", departures["sundays"]?.map{it.toString()} as java.util.ArrayList<String>) + broadcastIntent.putStringArrayListExtra("workdays", departures["workdays"]?.map { it.toString() } as java.util.ArrayList<String>) + broadcastIntent.putStringArrayListExtra("saturdays", departures["saturdays"]?.map { it.toString() } as java.util.ArrayList<String>) + broadcastIntent.putStringArrayListExtra("sundays", departures["sundays"]?.map { it.toString() } as java.util.ArrayList<String>) sendBroadcast(broadcastIntent) } } diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/MainActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/MainActivity.kt index c058e131c46d25dc808a521e0ec206937829d2d5..1343f2c961f5090fe9c835f187ca6d961530d991 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/activities/MainActivity.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/activities/MainActivity.kt @@ -58,7 +58,8 @@ view = View(context) } imm.hideSoftInputFromWindow(view.windowToken, 0) intent = Intent(context, StopActivity::class.java) - intent.putExtra("stop", (searchSuggestion as StopSuggestion).id) + intent.putExtra("stopId", (searchSuggestion as StopSuggestion).id) + intent.putExtra("stopSymbol", (searchSuggestion as StopSuggestion).symbol) startActivity(intent) } diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt index 46594bcd3f3a2780eb383b1a3957acb401f6c61b..ba9207ae0256dc52b97fcb754903f41bd59f5093 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt @@ -26,6 +26,7 @@ class StopActivity : AppCompatActivity(), MessageReceiver.OnVmListener { private lateinit var stopId: String + private lateinit var stopSymbol: String private var timetableType = "departure" private var sectionsPagerAdapter: SectionsPagerAdapter? = null private var viewPager: ViewPager? = null @@ -40,7 +41,8 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stop) - stopId = intent.getStringExtra("stop") + stopId = intent.getStringExtra("stopId") + stopSymbol = intent.getStringExtra("stopSymbol") val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) @@ -78,6 +80,7 @@ timerTask = object : TimerTask() { override fun run() { val vmIntent = Intent(context, VmClient::class.java) vmIntent.putExtra("stopId", stopId) + vmIntent.putExtra("stopSymbol", stopSymbol) startService(vmIntent) } } diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/Departure.kt b/app/src/main/java/ml/adamsprogs/bimba/models/Departure.kt index d3ba92039a371047e48002649b1412bf4a038997..aac1cd0c15f12c8e01e03ab340e87b4c23ca52d1 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/Departure.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/Departure.kt @@ -3,14 +3,14 @@ fun fromString(string: String): Departure { val array = string.split("|") return Departure(array[0], array[1], array[2], array[3] == "1", array[4], array[5], - array[6] == "true", array[7] == "true") + array[6] == "true", array[7] == "true", array[8] == "true") } data class Departure(val line: String, val mode: String, val time: String, val lowFloor: Boolean, val modification: String?, val direction: String, val vm: Boolean = false, - var tomorrow: Boolean = false) { + var tomorrow: Boolean = false, val onStop: Boolean = false) { override fun toString(): String { - return "$line|$mode|$time|$lowFloor|$modification|$direction|$vm|$tomorrow" + return "$line|$mode|$time|$lowFloor|$modification|$direction|$vm|$tomorrow|$onStop" } } \ No newline at end of file diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/DeparturesAdapter.kt b/app/src/main/java/ml/adamsprogs/bimba/models/DeparturesAdapter.kt index 834fbf4f0583568d1b4b85e4879676aa49f70412..cf66af128555042a84ca3d9faae926d77b90f692 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/DeparturesAdapter.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/DeparturesAdapter.kt @@ -24,7 +24,7 @@ time.set(Calendar.MILLISECOND, 0) if (departure.tomorrow) time.add(Calendar.DAY_OF_MONTH, 1) var lineExistedTimes = lines[departure.line] - if (now.before(time) && lineExistedTimes ?: 0 < 3) { + if ((now.before(time) || now == time) && lineExistedTimes ?: 0 < 3) { lineExistedTimes = (lineExistedTimes ?: 0) + 1 lines[departure.line] = lineExistedTimes filtered.add(departure) @@ -74,7 +74,7 @@ val timeString: String if (departureIn > 60 || departureIn < 0 || !relativeTime) timeString = context.getString(R.string.departure_at, departure.time) - else if (departureIn > 0) + else if (departureIn > 0 && !departure.onStop) timeString = context.getString(R.string.departure_in, departureIn.toString()) else timeString = context.getString(R.string.now) diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt b/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt index 1013ffde9b96e58efc6601516290dbbabac5c2c1..17575f35683703f5558f3aac2435b66982afb190 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/StopSuggestion.kt @@ -4,10 +4,10 @@ import android.os.Parcel import android.os.Parcelable import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion -class StopSuggestion(text: String, val id: String) : SearchSuggestion { +class StopSuggestion(text: String, val id: String, val symbol: String) : SearchSuggestion { private val body: String = text - constructor(parcel: Parcel) : this(parcel.readString(), parcel.readString()) + constructor(parcel: Parcel) : this(parcel.readString(), parcel.readString(), parcel.readString()) override fun describeContents(): Int { TODO("not implemented") @@ -16,6 +16,7 @@ override fun writeToParcel(dest: Parcel?, flags: Int) { dest?.writeString(body) dest?.writeString(id) + dest?.writeString(symbol) } override fun getBody(): String { diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt b/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt index 05e2a6ee4a6096c3bcecfb53edf441d5cd1882ba..378470947c073f310921580c205969b2f9dc958e 100644 --- a/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt +++ b/app/src/main/java/ml/adamsprogs/bimba/models/Timetable.kt @@ -42,10 +42,10 @@ return null val stops = ArrayList<StopSuggestion>() var cursor : Cursor? = null try { - cursor = db!!.rawQuery("select name ||char(10)|| headsigns as suggestion, id from stops" + + cursor = db!!.rawQuery("select name ||char(10)|| headsigns as suggestion, id, stops.symbol || number as stopSymbol from stops" + " join nodes on(stops.symbol = nodes.symbol) order by name, id;", null) while (cursor.moveToNext()) - stops.add(StopSuggestion(cursor.getString(0), cursor.getString(1))) + stops.add(StopSuggestion(cursor.getString(0), cursor.getString(1), cursor.getString(2))) }catch (e: SQLiteDatabaseCorruptException) { cursor?.close() return null