From f37f47fadf6c392988242e5f639b7b45e72ab6b4 Mon Sep 17 00:00:00 2001 From: Joao Carlos Ferreira Marques Date: Sun, 7 Nov 2021 00:02:49 -0300 Subject: [PATCH] - Fix Network Store calling unregister on already unregistered callbacks crashing the app on android API 28; --- .../mozilla/lockbox/store/NetworkStore.kt | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/mozilla/lockbox/store/NetworkStore.kt b/app/src/main/java/mozilla/lockbox/store/NetworkStore.kt index f39d50583..336bf47da 100644 --- a/app/src/main/java/mozilla/lockbox/store/NetworkStore.kt +++ b/app/src/main/java/mozilla/lockbox/store/NetworkStore.kt @@ -25,15 +25,8 @@ open class NetworkStore( var isConnectedState: Boolean = true internal set - private val connectivityCallback = object : ConnectivityManager.NetworkCallback() { - override fun onAvailable(network: Network) { - isConnectedState = connectivityManager.isOnline(network) - } - override fun onLost(network: Network) { - isConnectedState = connectivityManager.isOnline(network) - } - } + private var connectivityCallback: ConnectivityManager.NetworkCallback? = null companion object { val shared = NetworkStore() @@ -54,7 +47,14 @@ open class NetworkStore( isConnected = isConnectedSubject .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe { checkConnectivity() } - .doFinally { connectivityManager.unregisterNetworkCallback(connectivityCallback) } + .doFinally { + + connectivityCallback?.let { + connectivityManager.unregisterNetworkCallback(it) + } + + connectivityCallback = null + } } private fun checkConnectivity() { @@ -63,6 +63,23 @@ open class NetworkStore( override fun injectContext(context: Context) { connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - connectivityManager.registerDefaultNetworkCallback(connectivityCallback) + if(connectivityCallback == null){ + createNewConnectivityCallback() + } + connectivityCallback?.let { + connectivityManager.registerDefaultNetworkCallback(it) + } + } + + private fun createNewConnectivityCallback() { + connectivityCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + isConnectedState = connectivityManager.isOnline(network) + } + + override fun onLost(network: Network) { + isConnectedState = connectivityManager.isOnline(network) + } + } } } \ No newline at end of file