Bimba.git

commit 50769beb10d15a0ff8f55ba793693b0a18ee9785

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

migration to new Kotlin and androidx

%!v(PANIC=String method: strings: negative Repeat count)


diff --git a/app/build.gradle b/app/build.gradle
index 60d7ff4dd1cc7f634f2ea63bade2a44142788dd3..04479a25f93c37a117a1a81152f7fbeafe6eb9b5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,15 +3,15 @@ apply plugin: 'kotlin-android'
 apply plugin: 'kotlin-android-extensions'
 
 android {
-    compileSdkVersion 27
-    buildToolsVersion "28.0.2"
+    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,21 +24,21 @@ }
 
 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 'com.google.android.material:material:1.1.0-alpha01'
+    implementation 'androidx.vectordrawable:vectordrawable:1.0.1'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
     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 'com.google.code.gson:gson:2.8.2'
+    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
     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'
 }
 repositories {




diff --git a/app/src/androidTest/java/ml/adamsprogs/bimba/ExampleInstrumentedTest.java b/app/src/androidTest/java/ml/adamsprogs/bimba/ExampleInstrumentedTest.java
index f66a5f890feef1d0355c36fae39cced6e1446d12..cef03f892c551316d036664d501ddd0933ba8383 100644
--- a/app/src/androidTest/java/ml/adamsprogs/bimba/ExampleInstrumentedTest.java
+++ b/app/src/androidTest/java/ml/adamsprogs/bimba/ExampleInstrumentedTest.java
@@ -1,8 +1,8 @@
 package ml.adamsprogs.bimba;
 
 import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;




diff --git a/app/src/main/java/ml/adamsprogs/bimba/NotificationChannels.kt b/app/src/main/java/ml/adamsprogs/bimba/NotificationChannels.kt
index 8ed8000409fe4705c3161668f926bb0d8d87272d..009de4ed616680e7e1b7cc6c91aa152330e3cb75 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/NotificationChannels.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/NotificationChannels.kt
@@ -3,7 +3,7 @@
 import android.app.NotificationChannel
 import android.app.NotificationManager
 import android.os.Build
-import android.support.annotation.RequiresApi
+import androidx.annotation.RequiresApi
 
 
 class NotificationChannels {




diff --git a/app/src/main/java/ml/adamsprogs/bimba/ProviderProxy.kt b/app/src/main/java/ml/adamsprogs/bimba/ProviderProxy.kt
index 45a60fc90e45adb61e3dd09c5a5ed12bbe9b7059..cb45d2c150fc033ecc5e182c06d5a0db0a967280 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/ProviderProxy.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/ProviderProxy.kt
@@ -1,8 +1,8 @@
 package ml.adamsprogs.bimba
 
 import android.content.*
-import kotlinx.coroutines.experimental.android.UI
-import kotlinx.coroutines.experimental.*
+import kotlinx.coroutines.*
+import kotlinx.coroutines.android.Main
 import ml.adamsprogs.bimba.datasources.*
 import ml.adamsprogs.bimba.models.*
 import ml.adamsprogs.bimba.models.suggestions.*
@@ -24,17 +24,17 @@         const val MODE_VM = "mode_vm"
     }
 
     fun getSuggestions(query: String = "", callback: (List<GtfsSuggestion>) -> Unit) {
-        launch(UI) {
-            val filtered = withContext(DefaultDispatcher) {
+        launch(Dispatchers.Main, CoroutineStart.DEFAULT, null, {
+            val filtered = withContext(Dispatchers.Default) {
                 suggestions = getStopSuggestions(query) //+ getLineSuggestions(query) //todo<p:v+1> + bike stations, train stations, &c
                 filterSuggestions(query)
             }
             callback(filtered)
-        }
+        })
     }
 
     private suspend fun getStopSuggestions(query: String): List<StopSuggestion> {
-        val vmSuggestions = withContext(DefaultDispatcher) {
+        val vmSuggestions = withContext(Dispatchers.Default) {
             vmClient.getStops(query)
         }
 
@@ -65,8 +65,8 @@         return result
     }
 
     fun getSheds(name: String, callback: (Map<String, Set<String>>) -> Unit) {
-        launch(UI) {
-            val sheds = withContext(DefaultDispatcher) {
+        launch(Dispatchers.Main) {
+            val sheds = withContext(Dispatchers.Default) {
                 val vmSheds = vmClient.getSheds(name)
 
                 if (vmSheds.isEmpty() and !timetable.isEmpty()) {
@@ -104,13 +104,13 @@         return uuid
     }
 
     private fun constructSegmentDepartures(stopSegments: Set<StopSegment>): Deferred<Map<String, List<Departure>>> {
-        return async {
+        return GlobalScope.async(Dispatchers.Default, CoroutineStart.DEFAULT, null, {
             if (timetable.isEmpty())
                 emptyMap()
             else {
                 timetable.getStopDeparturesBySegments(stopSegments)
             }
-        }
+        })
     }
 
     private fun filterDepartures(departures: Map<String, List<Departure>>): List<Departure> {
@@ -161,8 +161,8 @@
     }
 
     fun fillStopSegment(stopSegment: StopSegment, callback: (StopSegment?) -> Unit) {
-        launch(UI) {
-            withContext(DefaultDispatcher) {
+        launch(Dispatchers.Main) {
+            withContext(Dispatchers.Default) {
                 callback(fillStopSegment(stopSegment))
             }
         }
@@ -179,8 +179,8 @@             timetable.getHeadlinesForStopCode(stopSegment.stop)
     }
 
     fun getStopName(stopCode: String, callback: (String?) -> Unit) {
-        launch(UI) {
-            withContext(DefaultDispatcher) {
+        launch(Dispatchers.Main) {
+            withContext(Dispatchers.Default) {
                 callback(getStopName(stopCode))
             }
         }
@@ -216,13 +216,13 @@         private var cache: Deferred>>? = null
 
         init {
             receiver.addOnVmListener(this@Request)
-            launch(UI) {
+            launch(Dispatchers.Main) {
                 cache = constructSegmentDepartures(segments)
             }
         }
 
         override fun onVm(vmDepartures: Set<Departure>?, plateId: Plate.ID?, stopCode: String, code: Int) {
-            launch(UI) {
+            launch(Dispatchers.Main) {
                 if ((plateId == null || vmDepartures == null) and (timetable.isEmpty())) {
                     listener.onDeparturesReady(emptyList(), null, code)
                     return@launch




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/AppCompatPreferenceActivity.java b/app/src/main/java/ml/adamsprogs/bimba/activities/AppCompatPreferenceActivity.java
index 6e707b84bb48d8df1fabb89d95b2eeea5138d456..7b03da3605836238efd3510809d1b1771fd01aa5 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/AppCompatPreferenceActivity.java
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/AppCompatPreferenceActivity.java
@@ -3,11 +3,11 @@
 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 androidx.annotation.LayoutRes;
+        import androidx.annotation.Nullable;
+        import androidx.appcompat.app.ActionBar;
+        import androidx.appcompat.app.AppCompatDelegate;
+        import androidx.appcompat.widget.Toolbar;
         import android.view.MenuInflater;
         import android.view.View;
         import android.view.ViewGroup;




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/DashActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/DashActivity.kt
index e29da9681bc17c52d83898bf9589e5371d4c6a6a..4ea2d18684dbc87c372054090c654a2fc0155d69 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/DashActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/DashActivity.kt
@@ -5,10 +5,7 @@ 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 androidx.appcompat.app.*
 import android.text.Html
 import android.view.*
 import android.view.inputmethod.InputMethodManager
@@ -26,6 +23,8 @@ 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
 
 //todo<p:1> searchView integration
 class DashActivity : AppCompatActivity(), MessageReceiver.OnTimetableDownloadListener,
@@ -35,9 +34,9 @@     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 favouritesList: androidx.recyclerview.widget.RecyclerView
     lateinit var searchView: FloatingSearchView
     private lateinit var favourites: FavouriteStorage
     private lateinit var adapter: FavouritesAdapter
@@ -146,7 +145,7 @@             }
             iconView.setImageDrawable(getDrawable(suggestion.getIcon(), context))
         }
 
-        searchView.attachNavigationDrawerToMenuButton(drawer_layout as DrawerLayout)
+        //searchView.attachNavigationDrawerToMenuButton(drawer_layout as androidx.drawerlayout.widget.DrawerLayout)
     }
 
     override fun onRestart() {
@@ -243,16 +242,16 @@         favourites = FavouriteStorage.getFavouriteStorage(context)
         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)
     }
 
@@ -288,7 +287,7 @@
     override fun onResume() {
         super.onResume()
         adapter.favourites = favourites
-        favouritesList.adapter.notifyDataSetChanged()
+        favouritesList.adapter!!.notifyDataSetChanged()
     }
 
     override fun onDestroy() {
@@ -321,18 +320,18 @@         startActivityForResult(intent, REQUEST_EDIT_FAVOURITE)
         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 +344,7 @@
     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
     }
 




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/EditFavouriteActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/EditFavouriteActivity.kt
index d5c812f0e1dccc101297f852d23cd0756d39f300..88b5ed22c741af9af23e41bc8816907bdeec6300 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/EditFavouriteActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/EditFavouriteActivity.kt
@@ -1,9 +1,9 @@
 package ml.adamsprogs.bimba.activities
 
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
-import android.support.v7.widget.DividerItemDecoration
-import android.support.v7.widget.LinearLayoutManager
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
 import android.widget.EditText
 import ml.adamsprogs.bimba.R
 import ml.adamsprogs.bimba.models.Favourite
@@ -38,9 +38,9 @@             finish()
         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)




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/HelpActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/HelpActivity.kt
index 75dafa19a28bb5eef595683e4f5de44c3eeb878e..026039082090bb96f13adec31ba24e988b0af75a 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/HelpActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/HelpActivity.kt
@@ -1,7 +1,7 @@
 package ml.adamsprogs.bimba.activities
 
 import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
 import kotlinx.android.synthetic.main.activity_help.*
 import ml.adamsprogs.bimba.R
 




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/LineSpecifyActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/LineSpecifyActivity.kt
index e33d1edd5cf5253071bf0936ca77d35211ce2426..7984531efabc4948541fa1a8dd45ed62771faddd 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/LineSpecifyActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/LineSpecifyActivity.kt
@@ -1,9 +1,9 @@
 package ml.adamsprogs.bimba.activities
 
-import android.support.design.widget.TabLayout
-import android.support.v7.app.AppCompatActivity
+import com.google.android.material.tabs.TabLayout
+import androidx.appcompat.app.AppCompatActivity
 
-import android.support.v4.app.*
+import androidx.core.app.*
 import android.os.Bundle
 import android.view.*
 
@@ -44,16 +44,16 @@         container.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
         tabs.addOnTabSelectedListener(TabLayout.ViewPagerOnTabSelectedListener(container))
     }
 
-    inner class SectionsPagerAdapter(fm: FragmentManager, private val graphs: Array<Timetable.TripGraph>) : FragmentPagerAdapter(fm) {
+    inner class SectionsPagerAdapter(fm: androidx.fragment.app.FragmentManager, private val graphs: Array<Timetable.TripGraph>) : androidx.fragment.app.FragmentPagerAdapter(fm) {
 
-        override fun getItem(position: Int): Fragment {
+        override fun getItem(position: Int): androidx.fragment.app.Fragment {
             return PlaceholderFragment.newInstance(position + 1, graphs[position])
         }
 
         override fun getCount() = 2
     }
 
-    class PlaceholderFragment : Fragment() {
+    class PlaceholderFragment : androidx.fragment.app.Fragment() {
 
         override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                   savedInstanceState: Bundle?): View? {




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/SettingsActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/SettingsActivity.kt
index cc70df014cd592d07c7c9dcf553dc13886a552f1..a05be9afc33eba5fe1030e4538f9330b44ff01c7 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/SettingsActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/SettingsActivity.kt
@@ -2,7 +2,7 @@ package ml.adamsprogs.bimba.activities
 
 import android.preference.*
 import android.os.Bundle
-import android.support.v4.app.NavUtils
+import androidx.core.app.NavUtils
 import android.view.MenuItem
 import kotlinx.android.synthetic.main.activity_settings.*
 




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/SplashActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/SplashActivity.kt
index e7c3e0085a8ad06f180703cd533e0848579b9752..e7d4d932546602262ee4d6c4d6cc4880d0bae41d 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/SplashActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/SplashActivity.kt
@@ -1,10 +1,10 @@
 package ml.adamsprogs.bimba.activities
 
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.content.Intent
 import android.database.sqlite.SQLiteCantOpenDatabaseException
-import android.support.v7.app.AppCompatDelegate
+import androidx.appcompat.app.AppCompatDelegate
 import ml.adamsprogs.bimba.models.Timetable
 import java.io.FileNotFoundException
 




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 8aeed16739529be5f2f5f927660fa12f76fd659f..02a19af457e6b15c8bed7cf496e301e52c90386f 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/StopActivity.kt
@@ -1,13 +1,12 @@
 package ml.adamsprogs.bimba.activities
 
 import android.content.*
-import android.support.design.widget.*
 import android.os.Bundle
 import android.view.*
-import android.support.v4.content.res.ResourcesCompat
-import android.support.v7.app.AppCompatActivity
-import android.support.v7.widget.*
+import androidx.core.content.res.ResourcesCompat
+import androidx.appcompat.app.AppCompatActivity
 import android.widget.AdapterView
+import com.google.android.material.snackbar.Snackbar
 
 import java.util.Calendar
 import kotlinx.android.synthetic.main.activity_stop.*
@@ -71,15 +70,15 @@         }
 
         showFab()
 
-        val layoutManager = LinearLayoutManager(this)
-        departuresList.addItemDecoration(DividerItemDecoration(departuresList.context, layoutManager.orientation))
+        val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
+        departuresList.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(departuresList.context, layoutManager.orientation))
         departuresList.adapter = DeparturesAdapter(this, null, true)
         adapter = departuresList.adapter as DeparturesAdapter
         departuresList.layoutManager = layoutManager
 
-        departuresList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
-            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {}
-            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
+        departuresList.addOnScrollListener(object : androidx.recyclerview.widget.RecyclerView.OnScrollListener() {
+            override fun onScrollStateChanged(recyclerView: androidx.recyclerview.widget.RecyclerView, newState: Int) {}
+            override fun onScrolled(recyclerView: androidx.recyclerview.widget.RecyclerView, dx: Int, dy: Int) {
                 updateFabVisibility(dy)
                 super.onScrolled(recyclerView, dx, dy)
             }




diff --git a/app/src/main/java/ml/adamsprogs/bimba/activities/StopSpecifyActivity.kt b/app/src/main/java/ml/adamsprogs/bimba/activities/StopSpecifyActivity.kt
index a81d3536efc67b4b34a1b4b77337be6ba2379288..ad39c572570f1a4b1113b164eac10e01b61bab31 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/activities/StopSpecifyActivity.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/activities/StopSpecifyActivity.kt
@@ -1,7 +1,7 @@
 package ml.adamsprogs.bimba.activities
 
 import android.content.Intent
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
@@ -9,8 +9,8 @@ import kotlinx.android.synthetic.main.activity_stop_specify.*
 import ml.adamsprogs.bimba.R
 import android.content.Context
 import android.widget.TextView
-import android.support.v7.widget.LinearLayoutManager
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
 import android.view.LayoutInflater
 import ml.adamsprogs.bimba.ProviderProxy
 
@@ -27,8 +27,8 @@
         val name = intent.getStringExtra(EXTRA_STOP_NAME)
         val providerProxy = ProviderProxy(this)
         providerProxy.getSheds(name) {
-            val layoutManager = LinearLayoutManager(this)
-            val departuresList: RecyclerView = list_view
+            val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
+            val departuresList: androidx.recyclerview.widget.RecyclerView = list_view
 
             departuresList.adapter = ShedAdapter(this, it, name)
             departuresList.layoutManager = layoutManager
@@ -42,7 +42,7 @@         supportActionBar?.title = name
     }
 
     class ShedAdapter(val context: Context, private val values: Map<String, Set<String>>, private val stopName: String) :
-            RecyclerView.Adapter<ShedAdapter.ViewHolder>() {
+            androidx.recyclerview.widget.RecyclerView.Adapter<ShedAdapter.ViewHolder>() {
         override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
             val context = parent.context
             val inflater = LayoutInflater.from(context)
@@ -68,7 +68,7 @@                     .sortedBy { it.split(" → ")[0].toInt() }
                     .joinToString()
         }
 
-        inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+        inner class ViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {
             val root = itemView.findViewById<View>(R.id.shed_row)!!
             val stopCode: TextView = itemView.findViewById(R.id.stop_code)
             val stopHeadlines: TextView = itemView.findViewById(R.id.stop_headlines)




diff --git a/app/src/main/java/ml/adamsprogs/bimba/datasources/TimetableDownloader.kt b/app/src/main/java/ml/adamsprogs/bimba/datasources/TimetableDownloader.kt
index 8c39cb5c95f88327c5aa654d3d4b84e701fdcad6..3bf5794808a0b9799c49c31f6aa4d77ca99f0b32 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/datasources/TimetableDownloader.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/datasources/TimetableDownloader.kt
@@ -3,7 +3,7 @@
 import android.annotation.TargetApi
 import android.app.*
 import android.content.*
-import android.support.v4.app.NotificationCompat
+import androidx.core.app.NotificationCompat
 import java.io.*
 import android.os.Build
 import android.preference.PreferenceManager.getDefaultSharedPreferences
@@ -40,7 +40,7 @@             val localETag = prefs.getString("etag", "")
 
             val httpCon: HttpURLConnection
             try {
-                var sourceUrl = getDefaultSharedPreferences(this).getString(getString(R.string.key_timetable_source_url), getString(R.string.timetable_source_url))
+                var sourceUrl = getDefaultSharedPreferences(this).getString(getString(R.string.key_timetable_source_url), getString(R.string.timetable_source_url))!!
                 sourceUrl = sourceUrl.replace(Regex("^.*://", RegexOption.IGNORE_CASE), "")
                 sourceUrl = "https://$sourceUrl"
                 val url = URL(sourceUrl)




diff --git a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmClient.kt b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmClient.kt
index 51f7ceb59d2c1d06b955e977950e04c463317fe8..1d1822c12af3f1d0e49668514cbab09dbe1e2d5a 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmClient.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmClient.kt
@@ -1,7 +1,7 @@
 package ml.adamsprogs.bimba.datasources
 
 import com.google.gson.*
-import kotlinx.coroutines.experimental.*
+import kotlinx.coroutines.*
 import ml.adamsprogs.bimba.NetworkStateReceiver
 import ml.adamsprogs.bimba.models.Plate
 import ml.adamsprogs.bimba.models.StopSegment
@@ -55,7 +55,7 @@         }.toSet()
     }*/
 
     suspend fun getStops(pattern: String): List<StopSuggestion> {
-        val (_, response) = withContext(DefaultDispatcher) {
+        val (_, response) = withContext(Dispatchers.Default) {
             makeRequest("getStopPoints", """{"pattern": "$pattern"}""")
         }
 
@@ -91,7 +91,7 @@
         var responseBody: String? = null
         var responseCode = 0
         try {
-            withContext(CommonPool) {
+            withContext(Dispatchers.Default) {
                 client.newCall(request).execute().let {
                     responseCode = it.code()
                     responseBody = it.body()?.string()
@@ -109,7 +109,7 @@         }
     }
 
     suspend fun getName(symbol: String): String? {
-        val (_, timesResponse) = withContext(DefaultDispatcher) {
+        val (_, timesResponse) = withContext(Dispatchers.Default) {
             makeRequest("getTimes", """{"symbol": "$symbol"}""")
         }
         if (!timesResponse.has("success"))




diff --git a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
index 82e4f38941d51829f3e42771115968d48869b25a..a3ab71c0781a4c662f29ac9eb8cbc7e4fa218350 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/datasources/VmService.kt
@@ -5,8 +5,8 @@ import android.content.Intent
 import android.os.*
 import android.os.Process.THREAD_PRIORITY_BACKGROUND
 import com.google.gson.JsonObject
-import kotlinx.coroutines.experimental.android.UI
-import kotlinx.coroutines.experimental.*
+import kotlinx.coroutines.*
+import kotlinx.coroutines.android.Main
 import ml.adamsprogs.bimba.NetworkStateReceiver
 import ml.adamsprogs.bimba.calendarFromIso
 import ml.adamsprogs.bimba.models.*
@@ -31,8 +31,8 @@         override fun run() {
             handler!!.postDelayed(this, TICK_6_ZINA_TIM)
             try {
                 for (plateId in requests.keys)
-                    launch(UI) {
-                        withContext(DefaultDispatcher) {
+                    launch(Dispatchers.Main) {
+                        withContext(Dispatchers.Default) {
                             downloadVM()
                         }
                     }
@@ -63,8 +63,8 @@                 sendResult(stopCode)
             } else {
                 if (!once)
                     addRequest(stopCode)
-                launch(UI) {
-                    withContext(DefaultDispatcher) {
+                launch(Dispatchers.Main) {
+                    withContext(Dispatchers.Default) {
                         downloadVM(stopCode)
                     }
                 }




diff --git a/app/src/main/java/ml/adamsprogs/bimba/extensions.kt b/app/src/main/java/ml/adamsprogs/bimba/extensions.kt
index 9b51907278628c82c89e90b50b4f7b8c2bc241a9..9bb77bafd9c840c8914e3e84d4f14fa4bd08a4ef 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/extensions.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/extensions.kt
@@ -4,7 +4,7 @@ import android.annotation.SuppressLint
 import android.content.Context
 import android.graphics.drawable.Drawable
 import android.os.Build
-import android.support.design.widget.Snackbar
+import com.google.android.material.snackbar.Snackbar
 import android.text.format.DateFormat
 import android.view.View
 import ml.adamsprogs.bimba.activities.StopActivity




diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/DeparturesAdapter.kt b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/DeparturesAdapter.kt
index 920b6741fea569dcdc950c55aa77a78cf110732e..3df17b2df72930a706939bedaf2cd9ff5eef7d25 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/DeparturesAdapter.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/DeparturesAdapter.kt
@@ -3,8 +3,8 @@
 import android.app.AlertDialog
 import android.content.Context
 import android.content.DialogInterface
-import android.support.v4.content.res.ResourcesCompat
-import android.support.v7.widget.RecyclerView
+import androidx.core.content.res.ResourcesCompat
+import androidx.recyclerview.widget.RecyclerView
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ImageView
@@ -17,7 +17,7 @@ import ml.adamsprogs.bimba.rollTime
 import java.util.*
 
 class DeparturesAdapter(val context: Context, var departures: List<Departure>?, var relativeTime: Boolean) :
-        RecyclerView.Adapter<DeparturesAdapter.ViewHolder>() {
+        androidx.recyclerview.widget.RecyclerView.Adapter<DeparturesAdapter.ViewHolder>() {
 
     companion object {
         const val VIEW_TYPE_LOADING: Int = 0
@@ -107,7 +107,7 @@         val rowView = inflater.inflate(R.layout.row_departure, parent, false)
         return ViewHolder(rowView)
     }
 
-    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    inner class ViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {
         val root = itemView.findViewById<View>(R.id.departureRow)!!
         val lineTextView: TextView = itemView.findViewById(R.id.lineNumber)
         val timeTextView: TextView = itemView.findViewById(R.id.departureTime)




diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouriteEditRowAdapter.kt b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouriteEditRowAdapter.kt
index cb78df9d44a97addec4f60b2c1539551311584aa..f05e1d7b9732d514b4aa216b52eefc89d8733e0d 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouriteEditRowAdapter.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouriteEditRowAdapter.kt
@@ -1,15 +1,15 @@
 package ml.adamsprogs.bimba.models.adapters
 
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ImageView
 import android.widget.TextView
-import kotlinx.coroutines.experimental.DefaultDispatcher
-import kotlinx.coroutines.experimental.android.UI
-import kotlinx.coroutines.experimental.launch
-import kotlinx.coroutines.experimental.withContext
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.android.Main
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import ml.adamsprogs.bimba.ProviderProxy
 import ml.adamsprogs.bimba.R
 import ml.adamsprogs.bimba.collections.FavouriteStorage
@@ -19,7 +19,7 @@ import ml.adamsprogs.bimba.models.StopSegment
 
 
 class FavouriteEditRowAdapter(private var favourite: Favourite, private val loadingView: View, private val listView: View) :
-        RecyclerView.Adapter<FavouriteEditRowAdapter.ViewHolder>() {
+        androidx.recyclerview.widget.RecyclerView.Adapter<FavouriteEditRowAdapter.ViewHolder>() {
 
     private val segments = HashMap<String, StopSegment>()
     private val providerProxy = ProviderProxy()
@@ -28,8 +28,8 @@     private val platesList = ArrayList()
     private val namesList = HashMap<Plate.ID, String>()
 
     init {
-        launch(UI) {
-            withContext(DefaultDispatcher) {
+        launch(Dispatchers.Main) {
+            withContext(Dispatchers.Default) {
                 favourite.segments.forEach {
                     if (it.plates == null) {
                         (providerProxy.fillStopSegment(it) ?: it).let { segment ->
@@ -50,7 +50,7 @@                     namesList[it] = providerProxy.getStopName(it.stop).let { name ->
                         "${name ?: ""} (${it.stop}):\n${it.line} → ${it.headsign}"
                     }
                 }
-                launch(UI) {
+                launch(Dispatchers.Main) {
                     loadingView.visibility = View.GONE
                     listView.visibility = View.VISIBLE
                     this@FavouriteEditRowAdapter.notifyDataSetChanged()
@@ -63,13 +63,13 @@
     override fun getItemCount(): Int = platesList.size
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
-        launch(UI) {
+        launch(Dispatchers.Main) {
             val id = platesList[position]
             val favouriteElement = namesList[id]
 
             holder.rowTextView.text = favouriteElement
             holder.deleteButton.setOnClickListener {
-                launch(UI) {
+                launch(Dispatchers.Main) {
                     favourites.delete(favourite.name, id)
                     favourite = favourites.favourites[favourite.name]!!
                     notifyItemRemoved(platesList.indexOf(id))
@@ -88,7 +88,7 @@         val rowView = inflater.inflate(R.layout.row_favourite_edit, parent, false)
         return ViewHolder(rowView)
     }
 
-    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    inner class ViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {
         val rowTextView: TextView = itemView.findViewById(R.id.favourite_edit_row)
         val deleteButton: ImageView = itemView.findViewById(R.id.favourite_edit_delete)
     }




diff --git a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
index a30130f8c29ad35d2a33a8cefa0ef22786ca5282..4a7a1fc89a0ddb60f22a037790d2959b15966329 100644
--- a/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
+++ b/app/src/main/java/ml/adamsprogs/bimba/models/adapters/FavouritesAdapter.kt
@@ -1,16 +1,16 @@
 package ml.adamsprogs.bimba.models.adapters
 
 import android.content.Context
-import android.support.v4.content.res.ResourcesCompat
-import android.support.v7.widget.*
-import android.support.v7.widget.PopupMenu
+import androidx.core.content.res.ResourcesCompat
+import androidx.appcompat.widget.*
+import androidx.appcompat.widget.PopupMenu
 import android.util.SparseBooleanArray
 import android.view.*
 import android.widget.*
 import ml.adamsprogs.bimba.R
 import android.view.LayoutInflater
-import kotlinx.coroutines.experimental.android.UI
-import kotlinx.coroutines.experimental.*
+import kotlinx.coroutines.*
+import kotlinx.coroutines.android.Main
 import java.util.*
 import ml.adamsprogs.bimba.Declinator
 import ml.adamsprogs.bimba.collections.FavouriteStorage
@@ -21,7 +21,7 @@
 class FavouritesAdapter(private val appContext: Context, var favourites: FavouriteStorage,
                         private val onMenuItemClickListener: OnMenuItemClickListener,
                         private val onClickListener: ViewHolder.OnClickListener) :
-        RecyclerView.Adapter<FavouritesAdapter.ViewHolder>() {
+        androidx.recyclerview.widget.RecyclerView.Adapter<FavouritesAdapter.ViewHolder>() {
 
     private val selectedItems = SparseBooleanArray()
 
@@ -52,7 +52,7 @@
     override fun getItemCount() = favourites.size
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
-        launch(UI) {
+        launch(Dispatchers.Main) {
             val favourite = favourites[position]!!
             holder.nameTextView.text = favourite.name
 
@@ -71,7 +71,7 @@                 inflater.inflate(R.menu.favourite_actions, popup.menu)
                 popup.show()
             }
 
-            val nextDeparture = withContext(CommonPool) {
+            val nextDeparture = withContext(Dispatchers.Default) {
                 favourite.nextDeparture()
             }
 
@@ -115,7 +115,7 @@     operator fun get(index: String): Favourite? {
         return favourites[index]
     }
 
-    class ViewHolder(itemView: View, private val listener: OnClickListener) : RecyclerView.ViewHolder(itemView), View.OnClickListener, View.OnLongClickListener {
+    class ViewHolder(itemView: View, private val listener: OnClickListener) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView), View.OnClickListener, View.OnLongClickListener {
         override fun onLongClick(v: View?): Boolean {
             return listener.onItemLongClicked(adapterPosition)
         }




diff --git a/app/src/main/res/layout/activity_dash.xml b/app/src/main/res/layout/activity_dash.xml
index 120aa55d494af4dc38b0eda1ada09d28eb19086d..d7c30f0ce549eb0ba692f4b96e273fa86f617c2e 100644
--- a/app/src/main/res/layout/activity_dash.xml
+++ b/app/src/main/res/layout/activity_dash.xml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <android.support.constraint.ConstraintLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/main_layout"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
-        <android.support.design.widget.AppBarLayout
+        <com.google.android.material.appbar.AppBarLayout
             android:id="@+id/appbar"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -19,7 +19,7 @@             android:paddingTop="@dimen/appbar_padding_top"
             android:theme="@style/AppTheme.AppBarOverlay"
             android:visibility="invisible">
 
-            <android.support.v7.widget.Toolbar
+            <androidx.appcompat.widget.Toolbar
                 android:id="@+id/toolbar"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
@@ -27,9 +27,9 @@                 android:layout_weight="1"
                 android:background="@color/colorAccentDark"
                 app:layout_scrollFlags="scroll|enterAlways"
                 app:popupTheme="@style/AppTheme.PopupOverlay" />
-        </android.support.design.widget.AppBarLayout>
+        </com.google.android.material.appbar.AppBarLayout>
 
-        <android.support.v7.widget.RecyclerView
+        <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/favourites_list"
             android:layout_width="0dp"
             android:layout_height="0dp"
@@ -54,14 +54,14 @@             app:floatingSearch_searchHint="@string/search_placeholder"
             app:floatingSearch_showSearchKey="false"
             app:floatingSearch_suggestionsListAnimDuration="250" />
 
-    </android.support.constraint.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
     <!-- The navigation drawer -->
-    <android.support.design.widget.NavigationView
+    <com.google.android.material.navigation.NavigationView
         android:id="@+id/drawer"
         android:layout_width="240dp"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         app:menu="@menu/menu_drawer">
-    </android.support.design.widget.NavigationView>
-</android.support.v4.widget.DrawerLayout>
\ No newline at end of file
+    </com.google.android.material.navigation.NavigationView>
+</androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/activity_edit_favourite.xml b/app/src/main/res/layout/activity_edit_favourite.xml
index 8788c2dcff597cb72bf74e8478c1040bde28a941..713605a33d99df501ec14b890f20aa12288c7968 100644
--- a/app/src/main/res/layout/activity_edit_favourite.xml
+++ b/app/src/main/res/layout/activity_edit_favourite.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/dialog_favourite"
@@ -7,14 +7,14 @@     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingTop="@dimen/appbar_padding_top"
         android:theme="@style/AppTheme.AppBarOverlay">
 
-        <android.support.v7.widget.Toolbar
+        <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
@@ -22,7 +22,7 @@             android:layout_weight="1"
             android:background="@color/colorPrimary"
             app:layout_scrollFlags="scroll|enterAlways"
             app:popupTheme="@style/AppTheme.PopupOverlay" />
-    </android.support.design.widget.AppBarLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
     <TextView
         android:id="@+id/name_label"
@@ -48,7 +48,7 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/name_label" />
 
-    <android.support.v7.widget.RecyclerView
+    <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/favourite_edit_list"
         android:layout_width="0dp"
         android:layout_height="0dp"
@@ -59,7 +59,7 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/favourite_name_edit">
 
-    </android.support.v7.widget.RecyclerView>
+    </androidx.recyclerview.widget.RecyclerView>
 
     <ProgressBar
         android:id="@+id/favourite_edit_loading"
@@ -71,4 +71,4 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/favourite_name_edit" />
 
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml
index c59e2511f540c91420ab1e3d8bd5b13e47687b04..be113c8e5cd76911022673771525f27e71409633 100644
--- a/app/src/main/res/layout/activity_help.xml
+++ b/app/src/main/res/layout/activity_help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -7,14 +7,14 @@     android:layout_height="match_parent"
     android:fitsSystemWindows="true"
     tools:context="ml.adamsprogs.bimba.activities.HelpActivity">
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/app_bar"
         android:layout_width="match_parent"
         android:layout_height="@dimen/app_bar_height"
         android:fitsSystemWindows="true"
         android:theme="@style/AppTheme.AppBarOverlay">
 
-        <android.support.design.widget.CollapsingToolbarLayout
+        <com.google.android.material.appbar.CollapsingToolbarLayout
             android:id="@+id/toolbar_layout"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
@@ -23,16 +23,16 @@             app:contentScrim="?attr/colorPrimary"
             app:layout_scrollFlags="scroll|exitUntilCollapsed"
             app:toolbarId="@+id/toolbar">
 
-            <android.support.v7.widget.Toolbar
+            <androidx.appcompat.widget.Toolbar
                 android:id="@+id/toolbar"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
                 app:layout_collapseMode="pin"
                 app:popupTheme="@style/AppTheme.PopupOverlay" />
 
-        </android.support.design.widget.CollapsingToolbarLayout>
-    </android.support.design.widget.AppBarLayout>
+        </com.google.android.material.appbar.CollapsingToolbarLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
     <include layout="@layout/content_help" />
 
-</android.support.design.widget.CoordinatorLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>




diff --git a/app/src/main/res/layout/activity_line_specify.xml b/app/src/main/res/layout/activity_line_specify.xml
index 12dfce96805bec6de2222a24fdb2c9c65d76c5e3..ce51c5661d1f2e400fc2ea279aceb915ae4310ef 100644
--- a/app/src/main/res/layout/activity_line_specify.xml
+++ b/app/src/main/res/layout/activity_line_specify.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/main_content"
@@ -8,14 +8,14 @@     android:layout_height="match_parent"
     android:fitsSystemWindows="true"
     tools:context="ml.adamsprogs.bimba.activities.LineSpecifyActivity">
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingTop="@dimen/appbar_padding_top"
         android:theme="@style/AppTheme.AppBarOverlay">
 
-        <android.support.v7.widget.Toolbar
+        <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
@@ -25,32 +25,32 @@             app:layout_scrollFlags="scroll|enterAlways"
             app:popupTheme="@style/AppTheme.PopupOverlay"
             app:title="@string/app_name">
 
-        </android.support.v7.widget.Toolbar>
+        </androidx.appcompat.widget.Toolbar>
 
-        <android.support.design.widget.TabLayout
+        <com.google.android.material.tabs.TabLayout
             android:id="@+id/tabs"
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
-            <android.support.design.widget.TabItem
+            <com.google.android.material.tabs.TabItem
                 android:id="@+id/tabItem"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/tab_text_line_to" />
 
-            <android.support.design.widget.TabItem
+            <com.google.android.material.tabs.TabItem
                 android:id="@+id/tabItem2"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/tab_text_line_fro" />
 
-        </android.support.design.widget.TabLayout>
-    </android.support.design.widget.AppBarLayout>
+        </com.google.android.material.tabs.TabLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
-    <android.support.v4.view.ViewPager
+    <androidx.viewpager.widget.ViewPager
         android:id="@+id/container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
-</android.support.design.widget.CoordinatorLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>




diff --git a/app/src/main/res/layout/activity_nodb.xml b/app/src/main/res/layout/activity_nodb.xml
index 01276425a1dac205ce4596cae2aa724229a79701..1d1bde436e83ef413228d55a44d43a295384811d 100644
--- a/app/src/main/res/layout/activity_nodb.xml
+++ b/app/src/main/res/layout/activity_nodb.xml
@@ -11,7 +11,7 @@         android:contentDescription="@string/no_database_background"
         android:scaleType="centerCrop"
         app:srcCompat="@drawable/nodb" />
 
-    <android.support.constraint.ConstraintLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
@@ -34,7 +34,7 @@             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintVertical_bias="0.4" />
 
-        <android.support.design.widget.FloatingActionButton
+        <com.google.android.material.floatingactionbutton.FloatingActionButton
             android:id="@+id/skip_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -47,5 +47,5 @@             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:srcCompat="@drawable/ic_skip" />
 
-    </android.support.constraint.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </FrameLayout>




diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index a989df9974dc26f0fcd10e9d7f0190a99cad86bf..b5342c25185db6b54c6e668d71cd9667334a5b6d 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -14,7 +14,7 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent">
 
-        <android.support.v7.widget.Toolbar
+        <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
@@ -24,8 +24,8 @@             app:layout_scrollFlags="scroll|enterAlways"
             app:popupTheme="@style/AppTheme.PopupOverlay"
             app:title="@string/title_activity_settings">
 
-        </android.support.v7.widget.Toolbar>
-    </android.support.design.widget.AppBarLayout>
+        </androidx.appcompat.widget.Toolbar>
+    </com.google.android.material.appbar.AppBarLayout>
 
     <fragment
         android:id="@+id/settings_fragment"
@@ -38,4 +38,4 @@         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/appbar" />
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/activity_stop.xml b/app/src/main/res/layout/activity_stop.xml
index d6a0b92bfbdd7ad1d7be8b4b6481ca929b573770..21c4be62306b15bf15e00e47911dc77042030cb4 100644
--- a/app/src/main/res/layout/activity_stop.xml
+++ b/app/src/main/res/layout/activity_stop.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/stop_layout"
@@ -9,14 +9,14 @@     android:fitsSystemWindows="true"
     tools:context="ml.adamsprogs.bimba.activities.StopActivity">
 
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingTop="@dimen/appbar_padding_top"
         android:theme="@style/AppTheme.AppBarOverlay">
 
-        <android.support.v7.widget.Toolbar
+        <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
@@ -26,7 +26,7 @@             app:layout_scrollFlags="scroll|enterAlways"
             app:popupTheme="@style/AppTheme.PopupOverlay"
             app:title="@string/app_name">
 
-        </android.support.v7.widget.Toolbar>
+        </androidx.appcompat.widget.Toolbar>
 
         <Spinner
             android:id="@+id/dateSpinner"
@@ -41,9 +41,9 @@             android:layout_weight="1"
             android:visibility="gone" />
 
 
-    </android.support.design.widget.AppBarLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
-    <android.support.v7.widget.RecyclerView
+    <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/departuresList"
         android:layout_width="0dp"
         android:layout_height="0dp"
@@ -52,7 +52,7 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/appbar" />
 
-    <android.support.design.widget.FloatingActionButton
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/fab"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -63,4 +63,4 @@         android:layout_marginEnd="16dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:srcCompat="@drawable/ic_favourite" />
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>




diff --git a/app/src/main/res/layout/activity_stop_specify.xml b/app/src/main/res/layout/activity_stop_specify.xml
index 137b0aaee6804a4787c5368014545db621f99669..3bb53972add8304ad5a563ac9338434debfa842c 100644
--- a/app/src/main/res/layout/activity_stop_specify.xml
+++ b/app/src/main/res/layout/activity_stop_specify.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context="ml.adamsprogs.bimba.activities.StopSpecifyActivity">
 
-    <android.support.design.widget.AppBarLayout
+    <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -14,7 +14,7 @@         android:paddingTop="@dimen/appbar_padding_top"
         android:theme="@style/AppTheme.AppBarOverlay">
 
         <!--suppress AndroidDomInspection -->
-        <android.support.v7.widget.Toolbar
+        <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
@@ -22,9 +22,9 @@             android:layout_weight="1"
             android:background="@color/colorPrimary"
             app:popupTheme="@style/AppTheme.PopupOverlay"
             app:title="@string/app_name" />
-    </android.support.design.widget.AppBarLayout>
+    </com.google.android.material.appbar.AppBarLayout>
 
-    <android.support.v7.widget.RecyclerView
+    <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/list_view"
         android:layout_width="0dp"
         android:layout_height="0dp"
@@ -33,4 +33,4 @@         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/appbar" />
 
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>




diff --git a/app/src/main/res/layout/content_help.xml b/app/src/main/res/layout/content_help.xml
index 9a733196da59d83c7adecb48a865eba0f12a5013..1897220231b033baeadc95adfc4b902b743e9211 100644
--- a/app/src/main/res/layout/content_help.xml
+++ b/app/src/main/res/layout/content_help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -15,4 +15,4 @@         android:layout_height="wrap_content"
         android:background="@android:color/transparent"
         android:text="@string/help_text"
         android:layout_margin="@dimen/text_margin"/>
-</android.support.v4.widget.NestedScrollView>
+</androidx.core.widget.NestedScrollView>




diff --git a/app/src/main/res/layout/fragment_line_specify.xml b/app/src/main/res/layout/fragment_line_specify.xml
index c3ef48c574cb3df2b0a912cd50fb090b97b984d0..1a630b9bd7f0c510d4405a24e72d7d6f3b40249b 100644
--- a/app/src/main/res/layout/fragment_line_specify.xml
+++ b/app/src/main/res/layout/fragment_line_specify.xml
@@ -1,4 +1,4 @@
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/constraintLayout"
@@ -19,4 +19,4 @@         app:layout_constraintTop_toTopOf="@+id/constraintLayout"
         tools:layout_constraintLeft_creator="1"
         tools:layout_constraintTop_creator="1" />
 
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/row_departure.xml b/app/src/main/res/layout/row_departure.xml
index 30ff8bb41d1335b417de5513b6cb6e5e5cbf42e5..d313ecd40420af6c649362838954ef4e1a6d495e 100644
--- a/app/src/main/res/layout/row_departure.xml
+++ b/app/src/main/res/layout/row_departure.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/departureRow"
@@ -76,4 +76,4 @@         android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:srcCompat="@drawable/ic_low_floor" />
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/row_favourite.xml b/app/src/main/res/layout/row_favourite.xml
index 509a5cbe3111eb1ad5746fc948150efcb30b0bb9..9d517fa29196b630844733f97b029388999f784f 100644
--- a/app/src/main/res/layout/row_favourite.xml
+++ b/app/src/main/res/layout/row_favourite.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/favourite_card"
@@ -17,7 +17,7 @@         android:layout_height="match_parent"
         android:background="@color/colorAccent"
         android:visibility="invisible" />
 
-    <android.support.constraint.ConstraintLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
@@ -80,6 +80,6 @@             app:layout_constraintTop_toTopOf="parent"
             app:srcCompat="@drawable/ic_more"
             tools:layout_editor_absoluteX="328dp"
             tools:layout_editor_absoluteY="16dp" />
-    </android.support.constraint.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
-</android.support.v7.widget.CardView>
\ No newline at end of file
+</androidx.cardview.widget.CardView>
\ No newline at end of file




diff --git a/app/src/main/res/layout/row_favourite_edit.xml b/app/src/main/res/layout/row_favourite_edit.xml
index 1d48cfacec0056c94b5756ed01064e09d3de2e6e..02a2c6fab85451e9d5383c26b9b69a9e1fbe03e7 100644
--- a/app/src/main/res/layout/row_favourite_edit.xml
+++ b/app/src/main/res/layout/row_favourite_edit.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -50,4 +50,4 @@         
         <!--tools:layout_editor_absoluteX="302dp"-->
         <!--tools:layout_editor_absoluteY="16dp"-->
         <!--android:contentDescription="@string/favourite_element_split_button" />-->
-</android.support.constraint.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file




diff --git a/app/src/main/res/layout/row_shed.xml b/app/src/main/res/layout/row_shed.xml
index a99d5bad8c799e2dde6d960e2d64f741fcb7b67d..4be60699faeef456d8a654e9e1133d9debe00f1a 100644
--- a/app/src/main/res/layout/row_shed.xml
+++ b/app/src/main/res/layout/row_shed.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/shed_row"
     android:layout_width="match_parent"
@@ -8,7 +8,7 @@     android:layout_margin="4dp"
     android:foreground="?android:attr/selectableItemBackground"
     app:cardElevation="2dp">
 
-    <android.support.constraint.ConstraintLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
@@ -36,5 +36,5 @@             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/stop_code" />
-    </android.support.constraint.ConstraintLayout>
-</android.support.v7.widget.CardView>
\ No newline at end of file
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.cardview.widget.CardView>
\ No newline at end of file




diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 5982e32ecdb6a838a1c7f45e3f82e9a77241302e..413363283deb54ced9c0ddbf0c5248dddcc402cc 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -13,4 +13,7 @@
     <color name="tram">#00adef</color>
     <color name="bus">#c4212a</color>
     <color name="text_on_toolbar">#ffffff</color>
+
+    <color name="textDark">#141415</color>
+    <color name="textLight">#ffffff</color>
 </resources>




diff --git a/build.gradle b/build.gradle
index 46a60aa5ed0c08de693c8ed41f436fa47d145972..84d2ffb7869a3654fae51072c3b2487a54de3026 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
-    ext.kotlin_version = '1.2.70'
+    ext.kotlin_version = '1.3.10'
     repositories {
         jcenter()
         maven { url 'https://maven.google.com' }
@@ -9,7 +9,7 @@         //maven { url 'https://dl.bintray.com/guardian/android' } // TooLargeTool
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.1.4'
+        classpath 'com.android.tools.build:gradle:3.2.1'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 
         // NOTE: Do not place your application dependencies here; they belong




diff --git a/gradle.properties b/gradle.properties
index 033d059b45874e6886b917294a6e1f97371b37f3..307d50280f7a5c9eb7f6dee93d377854a8ba7d19 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -11,6 +11,8 @@ # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
 org.gradle.jvmargs=-Xmx1536m
 kotlin.coroutines=enable
+android.useAndroidX=true
+android.enableJetifier=true
 
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit