Bimba.git

commit 3d6272b9c8c938703e2b1d9b701f2fc0763b62f5

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