forked from GitHub-Mirror/riotX-android
Fix network reconnection with sync
This commit is contained in:
parent
9cc922a8a2
commit
a2b6bd0f62
@ -110,7 +110,7 @@ dependencies {
|
|||||||
implementation 'com.squareup.retrofit2:converter-moshi:2.4.0'
|
implementation 'com.squareup.retrofit2:converter-moshi:2.4.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.14.1'
|
implementation 'com.squareup.okhttp3:okhttp:3.14.1'
|
||||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
|
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
|
||||||
implementation 'com.novoda:merlin:1.1.6'
|
implementation 'com.novoda:merlin:1.2.0'
|
||||||
implementation "com.squareup.moshi:moshi-adapters:$moshi_version"
|
implementation "com.squareup.moshi:moshi-adapters:$moshi_version"
|
||||||
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
||||||
|
|
||||||
|
@ -19,35 +19,45 @@ package im.vector.matrix.android.internal.network
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.novoda.merlin.Merlin
|
import com.novoda.merlin.Merlin
|
||||||
import com.novoda.merlin.MerlinsBeard
|
import com.novoda.merlin.MerlinsBeard
|
||||||
import com.novoda.merlin.registerable.connection.Connectable
|
|
||||||
import im.vector.matrix.android.internal.di.MatrixScope
|
import im.vector.matrix.android.internal.di.MatrixScope
|
||||||
|
import timber.log.Timber
|
||||||
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
@MatrixScope
|
@MatrixScope
|
||||||
internal class NetworkConnectivityChecker @Inject constructor(context: Context) {
|
internal class NetworkConnectivityChecker @Inject constructor(context: Context) {
|
||||||
|
|
||||||
private val merlin = Merlin.Builder().withConnectableCallbacks().build(context)
|
private val merlin = Merlin.Builder()
|
||||||
private val merlinsBeard = MerlinsBeard.from(context)
|
.withConnectableCallbacks()
|
||||||
|
.withDisconnectableCallbacks()
|
||||||
|
.build(context)
|
||||||
|
|
||||||
private val listeners = ArrayList<Listener>()
|
private val merlinsBeard = MerlinsBeard.Builder().build(context)
|
||||||
|
private val listeners = Collections.synchronizedList(ArrayList<Listener>())
|
||||||
|
|
||||||
fun register(listener: Listener) {
|
init {
|
||||||
if (listeners.isEmpty()) {
|
merlin.bind()
|
||||||
merlin.bind()
|
merlin.registerDisconnectable {
|
||||||
}
|
Timber.v("On Disconnect")
|
||||||
listeners.add(listener)
|
listeners.forEach {
|
||||||
val connectable = Connectable {
|
it.onDisconnect()
|
||||||
if (listeners.contains(listener)) {
|
|
||||||
listener.onConnect()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
merlin.registerConnectable(connectable)
|
merlin.registerConnectable {
|
||||||
|
Timber.v("On Connect")
|
||||||
|
listeners.forEach {
|
||||||
|
it.onConnect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun register(listener: Listener) {
|
||||||
|
listeners.add(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unregister(listener: Listener) {
|
fun unregister(listener: Listener) {
|
||||||
if (listeners.remove(listener) && listeners.isEmpty()) {
|
listeners.remove(listener)
|
||||||
merlin.unbind()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isConnected(): Boolean {
|
fun isConnected(): Boolean {
|
||||||
@ -55,7 +65,13 @@ internal class NetworkConnectivityChecker @Inject constructor(context: Context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Listener {
|
interface Listener {
|
||||||
fun onConnect()
|
fun onConnect() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onDisconnect() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user