9 Commits 29e6d0f5eb ... 261cfba08f

Author SHA1 Message Date
  Adam Pioterek 261cfba08f merge develop to planning — bring new Kotlin version 5 years ago
  Adam Pioterek 0b7fabdd82 searchbar appearance 5 years ago
  Adam Pioterek 50a2717a32 uploader 5 years ago
  Adam Pioterek 5d029c3915 searchbar text handles 5 years ago
  Adam Pioterek 75997bba18 kotlin stable corutines 5 years ago
  Adam Pioterek 31308b3aaa removed todo file 5 years ago
  Adam Pioterek 20e217c955 new search bar 5 years ago
  Adam Pioterek 50769beb10 migration to new Kotlin and androidx 5 years ago
  Adam Pioterek 7d8829fda5 converter deletes old only if they exist 5 years ago

+ 19 - 15
app/build.gradle

@@ -3,15 +3,15 @@ apply plugin: 'kotlin-android'
 apply plugin: 'kotlin-android-extensions'
 
 android {
-    compileSdkVersion 27
+    compileSdkVersion 28
     buildToolsVersion '28.0.3'
     defaultConfig {
         applicationId "ml.adamsprogs.bimba"
         minSdkVersion 19
-        targetSdkVersion 27
+        targetSdkVersion 28
         versionCode 15
         versionName "2.0"
-        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         vectorDrawables.useSupportLibrary = true
     }
     buildTypes {
@@ -24,22 +24,26 @@ android {
 
 dependencies {
     implementation fileTree(include: ['*.jar'], dir: 'libs')
-    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
+    androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
-    implementation 'com.android.support:appcompat-v7:27.1.1'
-    implementation 'com.android.support:cardview-v7:27.1.1'
-    implementation 'com.android.support:design:27.1.1'
-    implementation 'com.android.support:support-vector-drawable:27.1.1'
-    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+    implementation 'androidx.appcompat:appcompat:1.0.2'
+    implementation 'androidx.cardview:cardview:1.0.0'
+    implementation 'androidx.vectordrawable:vectordrawable:1.0.1'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
+
+    implementation 'com.google.android.material:material:1.1.0-alpha02'
+
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
-    implementation 'com.github.arimorty:floatingsearchview:2.1.1'
-    implementation 'com.google.code.gson:gson:2.8.1'
-    implementation 'com.squareup.okhttp3:okhttp:3.8.1'
-    implementation 'io.requery:sqlite-android:3.22.0'
-    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5'
-    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.22.5'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.27.0-eap13'
+
     testImplementation 'junit:junit:4.12'
+
+    implementation 'io.requery:sqlite-android:3.22.0'
+    implementation 'com.google.code.gson:gson:2.8.2'
+    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
+    implementation 'com.github.mancj:MaterialSearchBar:0.8.1'
 }
 repositories {
     maven { url "https://maven.google.com" }

+ 0 - 26
app/src/androidTest/java/ml/adamsprogs/bimba/ExampleInstrumentedTest.java

@@ -1,26 +0,0 @@
-package ml.adamsprogs.bimba;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumentation test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-    @Test
-    public void useAppContext() throws Exception {
-        // Context of the app under test.
-        Context appContext = InstrumentationRegistry.getTargetContext();
-
-        assertEquals("ml.adamsprogs.bimba", appContext.getPackageName());
-    }
-}

+ 3 - 6
app/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="ml.adamsprogs.bimba"
     android:installLocation="auto">
 
@@ -7,12 +8,12 @@
     <uses-permission android:name="android.permission.INTERNET" />
 
     <application
-        android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
-        android:theme="@style/AppTheme">
+        android:theme="@style/AppTheme"
+        tools:ignore="GoogleAppIndexingWarning">
         <activity android:name=".activities.DashActivity" />
 
         <service
@@ -34,10 +35,6 @@
                 android:name="android.support.PARENT_ACTIVITY"
                 android:value="ml.adamsprogs.bimba.activities.DashActivity" />
         </activity>
-        <activity
-            android:name=".activities.HelpActivity"
-            android:label="@string/title_activity_help"
-            android:theme="@style/AppTheme" />
 
         <service
             android:name=".datasources.VmService"

+ 0 - 8
app/src/main/java/ml/adamsprogs/bimba/NetworkStateReceiver.kt

@@ -24,14 +24,6 @@ class NetworkStateReceiver : BroadcastReceiver() {
         }
     }
 
-    fun addOnConnectivityChangeListener(listener: OnConnectivityChangeListener) {
-        onConnectivityChangeListeners.add(listener)
-    }
-
-    fun removeOnConnectivityChangeListener(listener: OnConnectivityChangeListener) {
-        onConnectivityChangeListeners.remove(listener)
-    }
-
     interface OnConnectivityChangeListener {
         fun onConnectivityChange(connected: Boolean)
     }

+ 2 - 2
app/src/main/java/ml/adamsprogs/bimba/NotificationChannels.kt

@@ -3,12 +3,12 @@ package ml.adamsprogs.bimba
 import android.app.NotificationChannel
 import android.app.NotificationManager
 import android.os.Build
-import android.support.annotation.RequiresApi
+import androidx.annotation.RequiresApi
 
 
 class NotificationChannels {
     companion object {
-        val CHANNEL_UPDATES = "updates"
+        const val CHANNEL_UPDATES = "updates"
 
         @RequiresApi(Build.VERSION_CODES.O)
         fun makeChannel(id: String, name: String, manager: NotificationManager) {

+ 34 - 32
app/src/main/java/ml/adamsprogs/bimba/ProviderProxy.kt

@@ -1,11 +1,17 @@
 package ml.adamsprogs.bimba
 
-import android.content.*
-import kotlinx.coroutines.experimental.android.UI
-import kotlinx.coroutines.experimental.*
-import ml.adamsprogs.bimba.datasources.*
-import ml.adamsprogs.bimba.models.*
-import ml.adamsprogs.bimba.models.suggestions.*
+import android.content.Context
+import android.content.Intent
+import kotlinx.coroutines.*
+import kotlinx.coroutines.android.Main
+import ml.adamsprogs.bimba.datasources.VmClient
+import ml.adamsprogs.bimba.datasources.VmService
+import ml.adamsprogs.bimba.models.Departure
+import ml.adamsprogs.bimba.models.Plate
+import ml.adamsprogs.bimba.models.StopSegment
+import ml.adamsprogs.bimba.models.Timetable
+import ml.adamsprogs.bimba.models.suggestions.GtfsSuggestion
+import ml.adamsprogs.bimba.models.suggestions.StopSuggestion
 import java.util.*
 import kotlin.collections.HashMap
 
@@ -24,17 +30,17 @@ class ProviderProxy(context: Context? = null) {
     }
 
     fun getSuggestions(query: String = "", callback: (List<GtfsSuggestion>) -> Unit) {
-        launch(UI) {
-            val filtered = withContext(DefaultDispatcher) {
-                suggestions = getStopSuggestions(query) //+ getLineSuggestions(query) //todo<p:v+1> + bike stations, train stations, &c
-                filterSuggestions(query)
+        GlobalScope.launch {
+            suggestions = getStopSuggestions(query) //+ getLineSuggestions(query) //todo<p:v+1> + bike stations, train stations, &c
+            val filtered = filterSuggestions(query)
+            launch(Dispatchers.Main) {
+                callback(filtered)
             }
-            callback(filtered)
         }
     }
 
     private suspend fun getStopSuggestions(query: String): List<StopSuggestion> {
-        val vmSuggestions = withContext(DefaultDispatcher) {
+        val vmSuggestions = withContext(Dispatchers.Default) {
             vmClient.getStops(query)
         }
 
@@ -65,18 +71,18 @@ class ProviderProxy(context: Context? = null) {
     }
 
     fun getSheds(name: String, callback: (Map<String, Set<String>>) -> Unit) {
-        launch(UI) {
-            val sheds = withContext(DefaultDispatcher) {
-                val vmSheds = vmClient.getSheds(name)
+        GlobalScope.launch {
+            val vmSheds = vmClient.getSheds(name)
 
-                if (vmSheds.isEmpty() and !timetable.isEmpty()) {
-                    timetable.getHeadlinesForStop(name)
-                } else {
-                    vmSheds
-                }
+            val sheds = if (vmSheds.isEmpty() and !timetable.isEmpty()) {
+                timetable.getHeadlinesForStop(name)
+            } else {
+                vmSheds
             }
 
-            callback(sheds)
+            launch(Dispatchers.Main) {
+                callback(sheds)
+            }
         }
     }
 
@@ -104,7 +110,7 @@ class ProviderProxy(context: Context? = null) {
     }
 
     private fun constructSegmentDepartures(stopSegments: Set<StopSegment>): Deferred<Map<String, List<Departure>>> {
-        return async {
+        return GlobalScope.async {
             if (timetable.isEmpty())
                 emptyMap()
             else {
@@ -161,10 +167,8 @@ class ProviderProxy(context: Context? = null) {
     }
 
     fun fillStopSegment(stopSegment: StopSegment, callback: (StopSegment?) -> Unit) {
-        launch(UI) {
-            withContext(DefaultDispatcher) {
-                callback(fillStopSegment(stopSegment))
-            }
+        GlobalScope.launch {
+            callback(fillStopSegment(stopSegment))
         }
     }
 
@@ -179,10 +183,8 @@ class ProviderProxy(context: Context? = null) {
     }
 
     fun getStopName(stopCode: String, callback: (String?) -> Unit) {
-        launch(UI) {
-            withContext(DefaultDispatcher) {
-                callback(getStopName(stopCode))
-            }
+        GlobalScope.launch {
+            callback(getStopName(stopCode))
         }
     }
 
@@ -216,13 +218,13 @@ class ProviderProxy(context: Context? = null) {
 
         init {
             receiver.addOnVmListener(this@Request)
-            launch(UI) {
+            GlobalScope.launch {
                 cache = constructSegmentDepartures(segments)
             }
         }
 
         override fun onVm(vmDepartures: Set<Departure>?, plateId: Plate.ID?, stopCode: String, code: Int) {
-            launch(UI) {
+            GlobalScope.launch(Dispatchers.Main) {
                 if ((plateId == null || vmDepartures == null) and (timetable.isEmpty())) {
                     listener.onDeparturesReady(emptyList(), null, code)
                     return@launch

+ 11 - 10
app/src/main/java/ml/adamsprogs/bimba/activities/AppCompatPreferenceActivity.java

@@ -1,16 +1,17 @@
 package ml.adamsprogs.bimba.activities;
 
 import android.content.res.Configuration;
-        import android.os.Bundle;
-        import android.preference.PreferenceActivity;
-        import android.support.annotation.LayoutRes;
-        import android.support.annotation.Nullable;
-        import android.support.v7.app.ActionBar;
-        import android.support.v7.app.AppCompatDelegate;
-        import android.support.v7.widget.Toolbar;
-        import android.view.MenuInflater;
-        import android.view.View;
-        import android.view.ViewGroup;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.LayoutRes;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.appcompat.widget.Toolbar;
 
 /**
  * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls

+ 86 - 69
app/src/main/java/ml/adamsprogs/bimba/activities/DashActivity.kt

@@ -5,11 +5,9 @@ import android.app.Activity
 import android.content.*
 import android.os.*
 import android.preference.PreferenceManager.getDefaultSharedPreferences
-import android.support.design.widget.*
-import android.support.v4.widget.*
-import android.support.v7.widget.*
-import android.support.v7.app.*
-import android.text.Html
+import android.text.Editable
+import androidx.appcompat.app.*
+import android.text.TextWatcher
 import android.view.*
 import android.view.inputmethod.InputMethodManager
 import kotlin.collections.ArrayList
@@ -24,27 +22,30 @@ import ml.adamsprogs.bimba.models.suggestions.*
 import ml.adamsprogs.bimba.models.adapters.*
 import ml.adamsprogs.bimba.collections.*
 
-import com.arlib.floatingsearchview.FloatingSearchView
-import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion
+import com.google.android.material.navigation.NavigationView
+import com.google.android.material.snackbar.Snackbar
+import com.mancj.materialsearchbar.MaterialSearchBar
+import com.mancj.materialsearchbar.MaterialSearchBar.BUTTON_BACK
+import com.mancj.materialsearchbar.MaterialSearchBar.BUTTON_NAVIGATION
 
-//todo<p:1> searchView integration
 class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadListener,
-        FavouritesAdapter.OnMenuItemClickListener, FavouritesAdapter.ViewHolder.OnClickListener, ProviderProxy.OnDeparturesReadyListener {
+        FavouritesAdapter.OnMenuItemClickListener, FavouritesAdapter.ViewHolder.OnClickListener, ProviderProxy.OnDeparturesReadyListener, SuggestionsAdapter.OnSuggestionClickListener {
 
     val context: Context = this
     private val receiver = MessageReceiver.getMessageReceiver()
     private lateinit var timetable: Timetable
     private var suggestions: List<GtfsSuggestion>? = null
-    private lateinit var drawerLayout: DrawerLayout
+    private lateinit var drawerLayout: androidx.drawerlayout.widget.DrawerLayout
     private lateinit var drawerView: NavigationView
-    lateinit var favouritesList: RecyclerView
-    lateinit var searchView: FloatingSearchView
+    lateinit var favouritesList: androidx.recyclerview.widget.RecyclerView
+    lateinit var searchView: MaterialSearchBar
     private lateinit var favourites: FavouriteStorage
     private lateinit var adapter: FavouritesAdapter
     private val actionModeCallback = ActionModeCallback()
     private var actionMode: ActionMode? = null
     private var isWarned = false
     private lateinit var providerProxy: ProviderProxy
+    private lateinit var suggestionsAdapter: SuggestionsAdapter
 
     companion object {
         const val REQUEST_EDIT_FAVOURITE = 1
@@ -90,63 +91,75 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
         showValidityInDrawer()
 
         searchView = search_view
-
-        searchView.setOnFocusChangeListener(object : FloatingSearchView.OnFocusChangeListener {
-            override fun onFocus() {
-                favouritesList.visibility = View.GONE
-                providerProxy.getSuggestions(searchView.query) {
-                    searchView.swapSuggestions(it)
+        suggestionsAdapter = SuggestionsAdapter(layoutInflater, this, this)
+        searchView.setCustomSuggestionAdapter(suggestionsAdapter)
+
+        searchView.addTextChangeListener(object : TextWatcher {
+            override fun afterTextChanged(s: Editable?) {
+                if (searchView.isSearchEnabled) {
+                    searchView.clearSuggestions()
+                    searchView.updateLastSuggestions(listOf<GtfsSuggestion>())
+                    providerProxy.getSuggestions(s.toString()) { suggestions ->
+                        suggestions.forEach {
+                            if (it.name.contains(s as CharSequence, true)) {
+                                suggestionsAdapter.addSuggestion(it)
+                            }
+                        }
+                        searchView.showSuggestionsList()
+                    }
                 }
             }
 
-            override fun onFocusCleared() {
-                favouritesList.visibility = View.VISIBLE
+            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
             }
-        })
 
-        searchView.setOnQueryChangeListener { oldQuery, newQuery ->
-            if (oldQuery != "" && newQuery == "")
-                searchView.clearSuggestions()
-            providerProxy.getSuggestions(newQuery) {
-                searchView.swapSuggestions(it)
+            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
             }
-        }
 
-        searchView.setOnSearchListener(object : FloatingSearchView.OnSearchListener {
-            override fun onSuggestionClicked(searchSuggestion: SearchSuggestion) {
-                val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
-                var view = (context as DashActivity).currentFocus
-                if (view == null) {
-                    view = View(context)
-                }
-                imm.hideSoftInputFromWindow(view.windowToken, 0)
-                if (searchSuggestion is StopSuggestion) {
-                    val intent = Intent(context, StopSpecifyActivity::class.java)
-                    intent.putExtra(StopSpecifyActivity.EXTRA_STOP_NAME, searchSuggestion.name)
-                    startActivity(intent)
-                } else if (searchSuggestion is LineSuggestion) {
-                    val intent = Intent(context, LineSpecifyActivity::class.java)
-                    intent.putExtra(LineSpecifyActivity.EXTRA_LINE_ID, searchSuggestion.name)
-                    startActivity(intent)
+        })
+
+        searchView.setOnSearchActionListener(object : MaterialSearchBar.OnSearchActionListener {
+            override fun onButtonClicked(buttonCode: Int) {
+                when (buttonCode) {
+                    BUTTON_NAVIGATION -> {
+                        if (drawerLayout.isDrawerOpen(drawerView))
+                            drawerLayout.closeDrawer(drawerView)
+                        else
+                            drawerLayout.openDrawer(drawerView)
+                    }
+                    BUTTON_BACK -> {
+                        searchView.disableSearch()
+                    }
                 }
             }
 
-            override fun onSearchAction(query: String) {
+            override fun onSearchStateChanged(enabled: Boolean) {
             }
-        })
 
-        searchView.setOnBindSuggestionCallback { _, iconView, textView, item, _ ->
-            val suggestion = item as GtfsSuggestion
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-                textView.text = Html.fromHtml(item.body, Html.FROM_HTML_MODE_LEGACY)
-            } else {
-                @Suppress("DEPRECATION")
-                textView.text = Html.fromHtml(item.body)
+            override fun onSearchConfirmed(text: CharSequence?) {
+                // todo re-search
+                println("OnSearchConfirmed")
             }
-            iconView.setImageDrawable(getDrawable(suggestion.getIcon(), context))
-        }
 
-        searchView.attachNavigationDrawerToMenuButton(drawer_layout as DrawerLayout)
+        })
+    }
+
+    override fun onSuggestionClickListener(suggestion: GtfsSuggestion) {
+        val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
+        var view = (context as DashActivity).currentFocus
+        if (view == null) {
+            view = View(context)
+        }
+        imm.hideSoftInputFromWindow(view.windowToken, 0)
+        if (suggestion is StopSuggestion) {
+            val intent = Intent(context, StopSpecifyActivity::class.java)
+            intent.putExtra(StopSpecifyActivity.EXTRA_STOP_NAME, suggestion.name)
+            startActivity(intent)
+        } else if (suggestion is LineSuggestion) {
+            val intent = Intent(context, LineSpecifyActivity::class.java)
+            intent.putExtra(LineSpecifyActivity.EXTRA_LINE_ID, suggestion.name)
+            startActivity(intent)
+        }
     }
 
     override fun onRestart() {
@@ -243,22 +256,24 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
         favourites.forEach {
             it.subscribeForDepartures(this, this)
         }
-        val layoutManager = LinearLayoutManager(context)
+        val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
         favouritesList = favourites_list
         adapter = FavouritesAdapter(context, favourites, this, this)
         favouritesList.adapter = adapter
-        favouritesList.itemAnimator = DefaultItemAnimator()
+        favouritesList.itemAnimator = androidx.recyclerview.widget.DefaultItemAnimator()
         favouritesList.layoutManager = layoutManager
     }
 
     override fun onDeparturesReady(departures: List<Departure>, plateId: Plate.ID?, code: Int) {
-        favouritesList.adapter.notifyDataSetChanged()
+        favouritesList.adapter!!.notifyDataSetChanged()
         showError(drawer_layout, code, this)
     }
 
     private fun getSuggestions() {
-        providerProxy.getSuggestions {
-            searchView.swapSuggestions(it)
+        providerProxy.getSuggestions { suggestions ->
+            suggestions.forEach {
+                suggestionsAdapter.addSuggestion(it)
+            }
         }
     }
 
@@ -275,12 +290,14 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
             startService(Intent(context, TimetableDownloader::class.java))
     }
 
-    override fun onBackPressed() { //fixme
+    override fun onBackPressed() {
         if (drawerLayout.isDrawerOpen(drawerView)) {
             drawerLayout.closeDrawer(drawerView)
             return
         }
-        if (!searchView.setSearchFocused(false)) {
+        if (searchView.isSearchEnabled) {
+            searchView.disableSearch()
+        } else {
             super.onBackPressed()
         }
     }
@@ -288,7 +305,7 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
     override fun onResume() {
         super.onResume()
         adapter.favourites = favourites
-        favouritesList.adapter.notifyDataSetChanged()
+        favouritesList.adapter!!.notifyDataSetChanged()
     }
 
     override fun onDestroy() {
@@ -321,18 +338,18 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
         return true
     }
 
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         if (requestCode == REQUEST_EDIT_FAVOURITE) {
             if (resultCode == Activity.RESULT_OK) {
-                val name = data.getStringExtra(EditFavouriteActivity.EXTRA_NEW_NAME)
+                val name = data!!.getStringExtra(EditFavouriteActivity.EXTRA_NEW_NAME)
                 val positionBefore = data.getIntExtra(EditFavouriteActivity.EXTRA_POSITION_BEFORE, -1)
                 //adapter.favourites = favourites.favouritesList
                 if (positionBefore == -1)
-                    favouritesList.adapter.notifyDataSetChanged()
+                    favouritesList.adapter!!.notifyDataSetChanged()
                 else {
                     val positionAfter = favourites.indexOf(name)
-                    favouritesList.adapter.notifyItemChanged(positionBefore)
-                    favouritesList.adapter.notifyItemMoved(positionBefore, positionAfter)
+                    favouritesList.adapter!!.notifyItemChanged(positionBefore)
+                    favouritesList.adapter!!.notifyItemMoved(positionBefore, positionAfter)
                 }
                 adapter[name]?.let {
                     it.unsubscribeFromDepartures(context)
@@ -345,7 +362,7 @@ class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadLis
     override fun delete(name: String): Boolean {
         favourites.delete(name)
         //adapter.favourites = favourites.favouritesList
-        favouritesList.adapter.notifyItemRemoved(favourites.indexOf(name))
+        favouritesList.adapter!!.notifyItemRemoved(favourites.indexOf(name))
         return true
     }
 

+ 7 - 10
app/src/main/java/ml/adamsprogs/bimba/activities/EditFavouriteActivity.kt

@@ -1,18 +1,15 @@
 package ml.adamsprogs.bimba.activities
 
-import android.support.v7.app.AppCompatActivity
+import android.app.Activity
+import android.content.Intent
 import android.os.Bundle
-import android.support.v7.widget.DividerItemDecoration
-import android.support.v7.widget.LinearLayoutManager
 import android.widget.EditText
+import androidx.appcompat.app.AppCompatActivity
+import kotlinx.android.synthetic.main.activity_edit_favourite.*
 import ml.adamsprogs.bimba.R
+import ml.adamsprogs.bimba.collections.FavouriteStorage
 import ml.adamsprogs.bimba.models.Favourite
 import ml.adamsprogs.bimba.models.adapters.FavouriteEditRowAdapter
-import ml.adamsprogs.bimba.collections.FavouriteStorage
-import kotlinx.android.synthetic.main.activity_edit_favourite.*
-import android.app.Activity
-import android.content.Intent
-
 
 
 class EditFavouriteActivity : AppCompatActivity() {
@@ -38,9 +35,9 @@ class EditFavouriteActivity : AppCompatActivity() {
         favourites = FavouriteStorage.getFavouriteStorage(this)
 
         val recyclerView = favourite_edit_list
-        val layoutManager = LinearLayoutManager(this)
+        val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
         recyclerView!!.layoutManager = layoutManager
-        val dividerItemDecoration = DividerItemDecoration(this, layoutManager.orientation)
+        val dividerItemDecoration = androidx.recyclerview.widget.DividerItemDecoration(this, layoutManager.orientation)
         recyclerView.addItemDecoration(dividerItemDecoration)
         recyclerView.adapter = FavouriteEditRowAdapter(favourite!!, favourite_edit_loading, favourite_edit_list)
         setSupportActionBar(toolbar)

+ 0 - 0
app/src/main/java/ml/adamsprogs/bimba/activities/HelpActivity.kt


Some files were not shown because too many files changed in this diff