Bimba.git

commit b1e850ae40e177de83d13d3ccb04c46925801340

Author: Adam Pioterek <adam.pioterek@protonmail.ch>

populating suggestions from db

 app/src/main/java/ml/adamsprogs/bimba/MainActivity.kt | 57 ++++------
 app/src/main/java/ml/adamsprogs/bimba/Timetable.kt | 73 +++++++++++++
 app/src/main/res/values/strings.xml | 2 


diff --git a/app/src/main/java/ml/adamsprogs/bimba/MainActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/MainActivity.kt
index 42cd26a4bc007e08e93d6228a3234fe667b0acd9..ed34be718fdb15b1e24211e90959d629ddb09513 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/MainActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/MainActivity.kt
@@ -8,19 +8,25 @@ import android.support.design.widget.Snackbar
 import android.support.v7.app.AppCompatActivity
 import android.support.v7.app.AppCompatDelegate
 import android.text.Html
+import android.view.View
 import android.widget.Toast
 import com.arlib.floatingsearchview.FloatingSearchView
 import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion
+import kotlin.concurrent.thread
 
 class MainActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadListener {
     lateinit var listener: MessageReceiver.OnTimetableDownloadListener
     lateinit var receiver: MessageReceiver
+    lateinit var layout: View
+    lateinit var timetable: Timetable
+    var stops: ArrayList<Timetable.Suggestion>? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
         AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO)
 
+        layout = findViewById(R.id.main_layout)
         val context = this as Context
         listener = this
 
@@ -31,16 +37,26 @@         registerReceiver(receiver, filter)
         receiver.addOnTimetableDownloadListener(listener)
         startService(Intent(context, TimetableDownloader::class.java))
 
-        val stops = listOf(Suggestion("Kołłątaja\n610 -> Dębiec"), Suggestion("Dębiecka\n610 -> Górczyn")) //todo get from db
+        timetable = Timetable(this)
+        stops = timetable.getStops()
         val searchView = findViewById(R.id.search_view) as FloatingSearchView
+
+        if (stops == null) {
+            //todo something more direct and create pull-to-refresh
+            Snackbar.make(layout, getString(R.string.no_timetable), Snackbar.LENGTH_LONG).show()
+            return
+        }
 
         searchView.setOnQueryChangeListener({ _, newQuery ->
-            searchView.swapSuggestions(stops.filter { deAccent(it.body.split("\n")[0]).contains(newQuery, true) })
+            thread {
+                val newStops = stops!!.filter { deAccent(it.body.split("\n")[0]).contains(newQuery, true) }
+                runOnUiThread { searchView.swapSuggestions (newStops)}
+            }
         })
 
         searchView.setOnSearchListener(object : FloatingSearchView.OnSearchListener {
             override fun onSuggestionClicked(searchSuggestion: SearchSuggestion) {
-                Toast.makeText(context, "clicked "+ searchSuggestion.body, Toast.LENGTH_SHORT).show()
+                Toast.makeText(context, "clicked "+ (searchSuggestion as Timetable.Suggestion).id, Toast.LENGTH_SHORT).show()
                 //todo to next screen
             }
             override fun onSearchAction(query: String) {
@@ -48,7 +64,7 @@             }
         })
 
         searchView.setOnBindSuggestionCallback { _, _, textView, item, _ ->
-            val suggestion = item as Suggestion
+            val suggestion = item as Timetable.Suggestion
             val text = suggestion.body.split("\n")
             val t = "<small><font color=\"#a0a0a0\">" + text[1] + "</font></small>"
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -82,35 +98,8 @@         return result
     }
 
     override fun onTimetableDownload() {
-        val layout = findViewById(R.id.main_layout)
-        Snackbar.make(layout, "New timetable downloaded", Snackbar.LENGTH_LONG).show()
-    }
-
-    class Suggestion(text: String) : SearchSuggestion {
-        private val body: String = text
-
-        constructor(parcel: Parcel) : this(parcel.readString())
-
-        override fun describeContents(): Int {
-            TODO("not implemented")
-        }
-
-        override fun writeToParcel(dest: Parcel?, flags: Int) {
-            TODO("not implemented")
-        }
-
-        override fun getBody(): String {
-            return body
-        }
-
-        companion object CREATOR : Parcelable.Creator<Suggestion> {
-            override fun createFromParcel(parcel: Parcel): Suggestion {
-                return Suggestion(parcel)
-            }
-
-            override fun newArray(size: Int): Array<Suggestion?> {
-                return arrayOfNulls(size)
-            }
-        }
+        timetable.refresh()
+        stops = timetable.getStops()
+        Snackbar.make(layout, getString(R.string.timetable_downloaded), Snackbar.LENGTH_LONG).show()
     }
 }




diff --git a/app/src/main/java/ml/adamsprogs/bimba/Timetable.kt b/app/src/main/java/ml/adamsprogs/bimba/Timetable.kt
new file mode 100644
index 0000000000000000000000000000000000000000..09359756979a700f4b5d635ba8d8d51d8395b63c
--- /dev/null
+++ b/app/src/main/java/ml/adamsprogs/bimba/Timetable.kt
@@ -0,0 +1,73 @@
+package ml.adamsprogs.bimba
+
+import android.content.Context
+import android.database.sqlite.SQLiteCantOpenDatabaseException
+import android.database.sqlite.SQLiteDatabase
+import android.os.Parcel
+import android.os.Parcelable
+import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion
+import java.io.File
+
+class Timetable() {
+    var db: SQLiteDatabase? = null
+    lateinit var context: Context
+
+    constructor(context: Context) : this() {
+        this.context = context
+        readDbFile()
+    }
+
+    fun refresh() {
+        readDbFile()
+    }
+
+    private fun readDbFile() {
+        try {
+            db = SQLiteDatabase.openDatabase(File(context.filesDir, "new_timetable.db").path,
+                    null, SQLiteDatabase.OPEN_READONLY)
+        } catch(e: SQLiteCantOpenDatabaseException) {
+            db = null
+        }
+    }
+
+    fun getStops(): ArrayList<Suggestion>? {
+        if (db == null)
+            return null
+        val cursor = db!!.rawQuery("select name ||char(10)|| headsigns as suggestion, id from stops" +
+                " join nodes on(stops.symbol = nodes.symbol);", null)
+        val stops = ArrayList<Suggestion>()
+        while (cursor.moveToNext())
+            stops.add(Suggestion(cursor.getString(0), cursor.getString(1)))
+        cursor.close()
+        return stops
+    }
+
+    class Suggestion(text: String, val id: String) : SearchSuggestion {
+        private val body: String = text
+
+        constructor(parcel: Parcel) : this(parcel.readString(), parcel.readString())
+
+        override fun describeContents(): Int {
+            TODO("not implemented")
+        }
+
+        override fun writeToParcel(dest: Parcel?, flags: Int) {
+            dest?.writeString(body)
+            dest?.writeString(id)
+        }
+
+        override fun getBody(): String {
+            return body
+        }
+
+        companion object CREATOR : Parcelable.Creator<Suggestion> {
+            override fun createFromParcel(parcel: Parcel): Suggestion {
+                return Suggestion(parcel)
+            }
+
+            override fun newArray(size: Int): Array<Suggestion?> {
+                return arrayOfNulls(size)
+            }
+        }
+    }
+}
\ No newline at end of file




diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5df9e14f375d2313ff096b3bca75c24106517d2a..fe6ece5dfd656228837d8e0a13569a97b33699bd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,5 @@
 <resources>
     <string name="app_name">Bimba</string>
+    <string name="no_timetable">No timetable found. Connect to the Internet and wait for a timetable to be downloaded</string>
+    <string name="timetable_downloaded">New timetable downloaded</string>
 </resources>




diff --git a/research/timetable.db.xz b/research/timetable.db.xz
new file mode 100644
index 0000000000000000000000000000000000000000..a31038b42c82ca61c77af8629de0cfe1f1da28e3
Binary files /dev/null and b/research/timetable.db.xz differ