mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-18 20:29:10 +03:00
Do not apply network constraint if "io.element.disable_network_constraint" is set to true in .well-known file.
This commit is contained in:
parent
842aeb70e0
commit
2a5e233e2c
6 changed files with 44 additions and 16 deletions
|
@ -29,7 +29,9 @@ import androidx.work.WorkRequest
|
|||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.internal.session.SessionScope
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.worker.MatrixWorkerFactory
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
@ -102,12 +104,14 @@ internal class WorkManagerProvider @Inject constructor(
|
|||
companion object {
|
||||
private const val MATRIX_SDK_TAG_PREFIX = "MatrixSDK-"
|
||||
|
||||
/**
|
||||
* Default constraints: connected network.
|
||||
*/
|
||||
val workConstraints = Constraints.Builder()
|
||||
.setRequiredNetworkType(NetworkType.CONNECTED)
|
||||
.build()
|
||||
fun getWorkConstraints(
|
||||
homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
): Constraints {
|
||||
val withNetworkConstraint = homeServerCapabilitiesDataSource.getHomeServerCapabilities()?.disableNetworkConstraint.orFalse().not()
|
||||
return Constraints.Builder()
|
||||
.apply { if (withNetworkConstraint) setRequiredNetworkType(NetworkType.CONNECTED) }
|
||||
.build()
|
||||
}
|
||||
|
||||
// Use min value, smaller value will be ignored
|
||||
const val BACKOFF_DELAY_MILLIS = WorkRequest.MIN_BACKOFF_MILLIS
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.matrix.android.sdk.internal.database.query.where
|
|||
import org.matrix.android.sdk.internal.di.SessionDatabase
|
||||
import org.matrix.android.sdk.internal.di.SessionId
|
||||
import org.matrix.android.sdk.internal.di.WorkManagerProvider
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.session.pushers.gateway.PushGatewayNotifyTask
|
||||
import org.matrix.android.sdk.internal.task.TaskExecutor
|
||||
import org.matrix.android.sdk.internal.task.configureWith
|
||||
|
@ -44,7 +45,8 @@ internal class DefaultPushersService @Inject constructor(
|
|||
private val addPusherTask: AddPusherTask,
|
||||
private val togglePusherTask: TogglePusherTask,
|
||||
private val removePusherTask: RemovePusherTask,
|
||||
private val taskExecutor: TaskExecutor
|
||||
private val taskExecutor: TaskExecutor,
|
||||
private val homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
) : PushersService {
|
||||
|
||||
override suspend fun testPush(
|
||||
|
@ -130,7 +132,7 @@ internal class DefaultPushersService @Inject constructor(
|
|||
private fun enqueueAddPusher(pusher: JsonPusher): UUID {
|
||||
val params = AddPusherWorker.Params(sessionId, pusher)
|
||||
val request = workManagerProvider.matrixOneTimeWorkRequestBuilder<AddPusherWorker>()
|
||||
.setConstraints(WorkManagerProvider.workConstraints)
|
||||
.setConstraints(WorkManagerProvider.getWorkConstraints(homeServerCapabilitiesDataSource))
|
||||
.setInputData(WorkerParamsFactory.toData(params))
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.build()
|
||||
|
|
|
@ -53,6 +53,7 @@ import org.matrix.android.sdk.internal.crypto.store.IMXCommonCryptoStore
|
|||
import org.matrix.android.sdk.internal.di.SessionId
|
||||
import org.matrix.android.sdk.internal.di.WorkManagerProvider
|
||||
import org.matrix.android.sdk.internal.session.content.UploadContentWorker
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.session.room.send.queue.EventSenderProcessor
|
||||
import org.matrix.android.sdk.internal.task.TaskExecutor
|
||||
import org.matrix.android.sdk.internal.util.CancelableWork
|
||||
|
@ -73,7 +74,8 @@ internal class DefaultSendService @AssistedInject constructor(
|
|||
private val taskExecutor: TaskExecutor,
|
||||
private val localEchoRepository: LocalEchoRepository,
|
||||
private val eventSenderProcessor: EventSenderProcessor,
|
||||
private val cancelSendTracker: CancelSendTracker
|
||||
private val cancelSendTracker: CancelSendTracker,
|
||||
private val homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
) : SendService {
|
||||
|
||||
@AssistedFactory
|
||||
|
@ -373,7 +375,7 @@ internal class DefaultSendService @AssistedInject constructor(
|
|||
val uploadWorkData = WorkerParamsFactory.toData(uploadMediaWorkerParams)
|
||||
|
||||
return workManagerProvider.matrixOneTimeWorkRequestBuilder<UploadContentWorker>()
|
||||
.setConstraints(WorkManagerProvider.workConstraints)
|
||||
.setConstraints(WorkManagerProvider.getWorkConstraints(homeServerCapabilitiesDataSource))
|
||||
.startChain(true)
|
||||
.setInputData(uploadWorkData)
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS)
|
||||
|
|
|
@ -22,6 +22,7 @@ import androidx.work.ListenableWorker
|
|||
import androidx.work.OneTimeWorkRequest
|
||||
import org.matrix.android.sdk.api.util.Cancelable
|
||||
import org.matrix.android.sdk.internal.di.WorkManagerProvider
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.util.CancelableWork
|
||||
import org.matrix.android.sdk.internal.worker.startChain
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
@ -34,7 +35,8 @@ import javax.inject.Inject
|
|||
* if not the chain will be doomed in failed state.
|
||||
*/
|
||||
internal class TimelineSendEventWorkCommon @Inject constructor(
|
||||
private val workManagerProvider: WorkManagerProvider
|
||||
private val workManagerProvider: WorkManagerProvider,
|
||||
private val homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
) {
|
||||
|
||||
fun postWork(roomId: String, workRequest: OneTimeWorkRequest, policy: ExistingWorkPolicy = ExistingWorkPolicy.APPEND_OR_REPLACE): Cancelable {
|
||||
|
@ -47,7 +49,7 @@ internal class TimelineSendEventWorkCommon @Inject constructor(
|
|||
|
||||
inline fun <reified W : ListenableWorker> createWork(data: Data, startChain: Boolean): OneTimeWorkRequest {
|
||||
return workManagerProvider.matrixOneTimeWorkRequestBuilder<W>()
|
||||
.setConstraints(WorkManagerProvider.workConstraints)
|
||||
.setConstraints(WorkManagerProvider.getWorkConstraints(homeServerCapabilitiesDataSource))
|
||||
.startChain(startChain)
|
||||
.setInputData(data)
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS)
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.matrix.android.sdk.api.session.sync.SyncService
|
|||
import org.matrix.android.sdk.internal.di.SessionId
|
||||
import org.matrix.android.sdk.internal.di.WorkManagerProvider
|
||||
import org.matrix.android.sdk.internal.session.SessionState
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.session.sync.job.SyncThread
|
||||
import org.matrix.android.sdk.internal.session.sync.job.SyncWorker
|
||||
import timber.log.Timber
|
||||
|
@ -33,15 +34,26 @@ internal class DefaultSyncService @Inject constructor(
|
|||
private val syncTokenStore: SyncTokenStore,
|
||||
private val syncRequestStateTracker: SyncRequestStateTracker,
|
||||
private val sessionState: SessionState,
|
||||
private val homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
) : SyncService {
|
||||
private var syncThread: SyncThread? = null
|
||||
|
||||
override fun requireBackgroundSync() {
|
||||
SyncWorker.requireBackgroundSync(workManagerProvider, sessionId)
|
||||
SyncWorker.requireBackgroundSync(
|
||||
workManagerProvider = workManagerProvider,
|
||||
sessionId = sessionId,
|
||||
homeServerCapabilitiesDataSource = homeServerCapabilitiesDataSource,
|
||||
)
|
||||
}
|
||||
|
||||
override fun startAutomaticBackgroundSync(timeOutInSeconds: Long, repeatDelayInSeconds: Long) {
|
||||
SyncWorker.automaticallyBackgroundSync(workManagerProvider, sessionId, timeOutInSeconds, repeatDelayInSeconds)
|
||||
SyncWorker.automaticallyBackgroundSync(
|
||||
workManagerProvider = workManagerProvider,
|
||||
sessionId = sessionId,
|
||||
homeServerCapabilitiesDataSource = homeServerCapabilitiesDataSource,
|
||||
serverTimeoutInSeconds = timeOutInSeconds,
|
||||
delayInSeconds = repeatDelayInSeconds,
|
||||
)
|
||||
}
|
||||
|
||||
override fun stopAnyBackgroundSync() {
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.failure.isTokenError
|
|||
import org.matrix.android.sdk.internal.SessionManager
|
||||
import org.matrix.android.sdk.internal.di.WorkManagerProvider
|
||||
import org.matrix.android.sdk.internal.session.SessionComponent
|
||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||
import org.matrix.android.sdk.internal.session.sync.SyncPresence
|
||||
import org.matrix.android.sdk.internal.session.sync.SyncTask
|
||||
import org.matrix.android.sdk.internal.worker.SessionSafeCoroutineWorker
|
||||
|
@ -59,6 +60,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
|
||||
@Inject lateinit var syncTask: SyncTask
|
||||
@Inject lateinit var workManagerProvider: WorkManagerProvider
|
||||
@Inject lateinit var homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource
|
||||
|
||||
override fun injectWith(injector: SessionComponent) {
|
||||
injector.inject(this)
|
||||
|
@ -77,6 +79,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
automaticallyBackgroundSync(
|
||||
workManagerProvider = workManagerProvider,
|
||||
sessionId = params.sessionId,
|
||||
homeServerCapabilitiesDataSource = homeServerCapabilitiesDataSource,
|
||||
serverTimeoutInSeconds = params.timeout,
|
||||
delayInSeconds = params.delay,
|
||||
forceImmediate = hasToDeviceEvents
|
||||
|
@ -86,6 +89,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
requireBackgroundSync(
|
||||
workManagerProvider = workManagerProvider,
|
||||
sessionId = params.sessionId,
|
||||
homeServerCapabilitiesDataSource = homeServerCapabilitiesDataSource,
|
||||
serverTimeoutInSeconds = 0
|
||||
)
|
||||
}
|
||||
|
@ -123,6 +127,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
fun requireBackgroundSync(
|
||||
workManagerProvider: WorkManagerProvider,
|
||||
sessionId: String,
|
||||
homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
serverTimeoutInSeconds: Long = 0
|
||||
) {
|
||||
val data = WorkerParamsFactory.toData(
|
||||
|
@ -134,7 +139,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
)
|
||||
)
|
||||
val workRequest = workManagerProvider.matrixOneTimeWorkRequestBuilder<SyncWorker>()
|
||||
.setConstraints(WorkManagerProvider.workConstraints)
|
||||
.setConstraints(WorkManagerProvider.getWorkConstraints(homeServerCapabilitiesDataSource))
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.setInputData(data)
|
||||
.startChain(true)
|
||||
|
@ -146,6 +151,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
fun automaticallyBackgroundSync(
|
||||
workManagerProvider: WorkManagerProvider,
|
||||
sessionId: String,
|
||||
homeServerCapabilitiesDataSource: HomeServerCapabilitiesDataSource,
|
||||
serverTimeoutInSeconds: Long = 0,
|
||||
delayInSeconds: Long = 30,
|
||||
forceImmediate: Boolean = false
|
||||
|
@ -160,7 +166,7 @@ internal class SyncWorker(context: Context, workerParameters: WorkerParameters,
|
|||
)
|
||||
)
|
||||
val workRequest = workManagerProvider.matrixOneTimeWorkRequestBuilder<SyncWorker>()
|
||||
.setConstraints(WorkManagerProvider.workConstraints)
|
||||
.setConstraints(WorkManagerProvider.getWorkConstraints(homeServerCapabilitiesDataSource))
|
||||
.setInputData(data)
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.setInitialDelay(if (forceImmediate) 0 else delayInSeconds, TimeUnit.SECONDS)
|
||||
|
|
Loading…
Add table
Reference in a new issue