Move WifiDetector to the app side

And protect the call to getEvent()
This commit is contained in:
Benoit Marty 2021-04-07 15:07:22 +02:00 committed by Benoit Marty
parent dead57b9fe
commit 7309c1066c
5 changed files with 19 additions and 18 deletions

View File

@ -23,10 +23,7 @@ interface EventService {
/** /**
* Ask the homeserver for an event content. The SDK will try to decrypt it if it is possible * Ask the homeserver for an event content. The SDK will try to decrypt it if it is possible
* The result will not be stored into cache * The result will not be stored into cache
* @param onlyOnWifi if true and if WiFi is not available, no request will be done,
* and null will be returned
*/ */
suspend fun getEvent(roomId: String, suspend fun getEvent(roomId: String,
eventId: String, eventId: String): Event
onlyOnWifi: Boolean): Event?
} }

View File

@ -18,24 +18,16 @@ package org.matrix.android.sdk.internal.session.events
import org.matrix.android.sdk.api.session.events.EventService import org.matrix.android.sdk.api.session.events.EventService
import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.internal.network.WifiDetector
import org.matrix.android.sdk.internal.session.call.CallEventProcessor import org.matrix.android.sdk.internal.session.call.CallEventProcessor
import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
internal class DefaultEventService @Inject constructor( internal class DefaultEventService @Inject constructor(
private val getEventTask: GetEventTask, private val getEventTask: GetEventTask,
private val callEventProcessor: CallEventProcessor, private val callEventProcessor: CallEventProcessor
private val wifiDetector: WifiDetector
) : EventService { ) : EventService {
override suspend fun getEvent(roomId: String, eventId: String, onlyOnWifi: Boolean): Event? { override suspend fun getEvent(roomId: String, eventId: String): Event {
if (onlyOnWifi && !wifiDetector.isConnectedToWifi()) {
Timber.d("No WiFi network, do not get Event")
return null
}
val event = getEventTask.execute(GetEventTask.Params(roomId, eventId)) val event = getEventTask.execute(GetEventTask.Params(roomId, eventId))
// Fast lane to the call event processors: try to make the incoming call ring faster // Fast lane to the call event processors: try to make the incoming call ring faster

View File

@ -31,6 +31,7 @@ import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.extensions.vectorComponent import im.vector.app.core.extensions.vectorComponent
import im.vector.app.core.network.WifiDetector
import im.vector.app.core.pushers.PushersManager import im.vector.app.core.pushers.PushersManager
import im.vector.app.features.badge.BadgeProxy import im.vector.app.features.badge.BadgeProxy
import im.vector.app.features.notifications.NotifiableEventResolver import im.vector.app.features.notifications.NotifiableEventResolver
@ -43,6 +44,7 @@ import im.vector.app.push.fcm.FcmHelper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.pushrules.Action import org.matrix.android.sdk.api.pushrules.Action
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.Event
@ -58,6 +60,7 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() {
private lateinit var pusherManager: PushersManager private lateinit var pusherManager: PushersManager
private lateinit var activeSessionHolder: ActiveSessionHolder private lateinit var activeSessionHolder: ActiveSessionHolder
private lateinit var vectorPreferences: VectorPreferences private lateinit var vectorPreferences: VectorPreferences
private lateinit var wifiDetector: WifiDetector
private val coroutineScope = CoroutineScope(SupervisorJob()) private val coroutineScope = CoroutineScope(SupervisorJob())
@ -74,6 +77,7 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() {
pusherManager = pusherManager() pusherManager = pusherManager()
activeSessionHolder = activeSessionHolder() activeSessionHolder = activeSessionHolder()
vectorPreferences = vectorPreferences() vectorPreferences = vectorPreferences()
wifiDetector = wifiDetector()
} }
} }
@ -188,9 +192,14 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() {
return return
} }
if (wifiDetector.isConnectedToWifi().not()) {
Timber.d("No WiFi network, do not get Event")
return
}
coroutineScope.launch { coroutineScope.launch {
Timber.d("Fast lane: start request") Timber.d("Fast lane: start request")
val event = session.getEvent(roomId, eventId, onlyOnWifi = true) ?: return@launch val event = tryOrNull { session.getEvent(roomId, eventId) } ?: return@launch
val resolvedEvent = notifiableEventResolver.resolveInMemoryEvent(session, event) val resolvedEvent = notifiableEventResolver.resolveInMemoryEvent(session, event)

View File

@ -26,6 +26,7 @@ import im.vector.app.EmojiCompatWrapper
import im.vector.app.VectorApplication import im.vector.app.VectorApplication
import im.vector.app.core.dialogs.UnrecognizedCertificateDialog import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
import im.vector.app.core.error.ErrorFormatter import im.vector.app.core.error.ErrorFormatter
import im.vector.app.core.network.WifiDetector
import im.vector.app.core.pushers.PushersManager import im.vector.app.core.pushers.PushersManager
import im.vector.app.core.utils.AssetReader import im.vector.app.core.utils.AssetReader
import im.vector.app.core.utils.DimensionConverter import im.vector.app.core.utils.DimensionConverter
@ -140,6 +141,8 @@ interface VectorComponent {
fun vectorPreferences(): VectorPreferences fun vectorPreferences(): VectorPreferences
fun wifiDetector(): WifiDetector
fun vectorFileLogger(): VectorFileLogger fun vectorFileLogger(): VectorFileLogger
fun uiStateRepository(): UiStateRepository fun uiStateRepository(): UiStateRepository

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021 The Matrix.org Foundation C.I.C. * Copyright (c) 2021 New Vector Ltd
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.matrix.android.sdk.internal.network package im.vector.app.core.network
import android.content.Context import android.content.Context
import android.net.ConnectivityManager import android.net.ConnectivityManager
@ -25,7 +25,7 @@ import org.matrix.android.sdk.api.extensions.orFalse
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
internal class WifiDetector @Inject constructor( class WifiDetector @Inject constructor(
context: Context context: Context
) { ) {
private val connectivityManager = context.getSystemService<ConnectivityManager>()!! private val connectivityManager = context.getSystemService<ConnectivityManager>()!!