Clear cache: clear Coil and OkHttpClient cache.

This commit is contained in:
Benoit Marty 2023-06-21 10:12:19 +02:00 committed by Benoit Marty
parent 12e54ac080
commit 0ee2861452
2 changed files with 19 additions and 0 deletions

View file

@ -41,6 +41,7 @@ dependencies {
implementation(projects.libraries.featureflag.api) implementation(projects.libraries.featureflag.api)
implementation(projects.libraries.featureflag.ui) implementation(projects.libraries.featureflag.ui)
implementation(projects.libraries.elementresources) implementation(projects.libraries.elementresources)
implementation(projects.libraries.network)
implementation(projects.libraries.testtags) implementation(projects.libraries.testtags)
implementation(projects.libraries.uiStrings) implementation(projects.libraries.uiStrings)
implementation(projects.features.rageshake.api) implementation(projects.features.rageshake.api)
@ -49,6 +50,7 @@ dependencies {
implementation(projects.features.logout.api) implementation(projects.features.logout.api)
implementation(libs.datetime) implementation(libs.datetime)
implementation(libs.accompanist.placeholder) implementation(libs.accompanist.placeholder)
implementation(libs.coil.compose)
api(projects.features.preferences.api) api(projects.features.preferences.api)
ksp(libs.showkase.processor) ksp(libs.showkase.processor)

View file

@ -14,9 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
@file:OptIn(ExperimentalCoilApi::class)
package io.element.android.features.preferences.impl.tasks package io.element.android.features.preferences.impl.tasks
import android.content.Context import android.content.Context
import coil.Coil
import coil.annotation.ExperimentalCoilApi
import com.squareup.anvil.annotations.ContributesBinding import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.ApplicationContext
@ -24,7 +28,9 @@ import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider
interface ClearCacheUseCase { interface ClearCacheUseCase {
suspend fun execute() suspend fun execute()
@ -36,10 +42,21 @@ class DefaultClearCacheUseCase @Inject constructor(
private val matrixClient: MatrixClient, private val matrixClient: MatrixClient,
private val coroutineDispatchers: CoroutineDispatchers, private val coroutineDispatchers: CoroutineDispatchers,
private val authenticationService: MatrixAuthenticationService, private val authenticationService: MatrixAuthenticationService,
private val okHttpClient: Provider<OkHttpClient>,
) : ClearCacheUseCase { ) : ClearCacheUseCase {
override suspend fun execute() = withContext(coroutineDispatchers.io) { override suspend fun execute() = withContext(coroutineDispatchers.io) {
// Clear Matrix cache
matrixClient.clearCache() matrixClient.clearCache()
// Clear Coil cache
Coil.imageLoader(context).let {
it.diskCache?.clear()
it.memoryCache?.clear()
}
// Clear OkHttp cache
okHttpClient.get().cache?.delete()
// Clear app cache
context.cacheDir.deleteRecursively() context.cacheDir.deleteRecursively()
// Ensure the app is restarted
authenticationService.incrementCacheIdx() authenticationService.incrementCacheIdx()
} }
} }