Fix image not rendering after clearing cache.
This commit is contained in:
parent
0cf5a41c61
commit
775cb89993
3 changed files with 17 additions and 1 deletions
|
|
@ -22,6 +22,7 @@ import io.element.android.appnav.di.MatrixClientsHolder
|
||||||
import io.element.android.features.login.api.LoginUserStory
|
import io.element.android.features.login.api.LoginUserStory
|
||||||
import io.element.android.features.preferences.api.CacheService
|
import io.element.android.features.preferences.api.CacheService
|
||||||
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
|
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
|
||||||
|
import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder
|
||||||
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
|
|
@ -39,6 +40,7 @@ class RootNavStateFlowFactory @Inject constructor(
|
||||||
private val authenticationService: MatrixAuthenticationService,
|
private val authenticationService: MatrixAuthenticationService,
|
||||||
private val cacheService: CacheService,
|
private val cacheService: CacheService,
|
||||||
private val matrixClientsHolder: MatrixClientsHolder,
|
private val matrixClientsHolder: MatrixClientsHolder,
|
||||||
|
private val imageLoaderHolder: ImageLoaderHolder,
|
||||||
private val loginUserStory: LoginUserStory,
|
private val loginUserStory: LoginUserStory,
|
||||||
) {
|
) {
|
||||||
private var currentCacheIndex = 0
|
private var currentCacheIndex = 0
|
||||||
|
|
@ -69,6 +71,8 @@ class RootNavStateFlowFactory @Inject constructor(
|
||||||
return cacheService.clearedCacheEventFlow
|
return cacheService.clearedCacheEventFlow
|
||||||
.onEach { sessionId ->
|
.onEach { sessionId ->
|
||||||
matrixClientsHolder.remove(sessionId)
|
matrixClientsHolder.remove(sessionId)
|
||||||
|
// Ensure image loader will be recreated with the new MatrixClient
|
||||||
|
imageLoaderHolder.remove(sessionId)
|
||||||
}
|
}
|
||||||
.toIndexFlow(initialCacheIndex)
|
.toIndexFlow(initialCacheIndex)
|
||||||
.onEach { cacheIndex ->
|
.onEach { cacheIndex ->
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import javax.inject.Provider
|
||||||
|
|
||||||
interface ImageLoaderHolder {
|
interface ImageLoaderHolder {
|
||||||
fun get(client: MatrixClient): ImageLoader
|
fun get(client: MatrixClient): ImageLoader
|
||||||
|
fun remove(sessionId: SessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
|
|
@ -52,7 +53,7 @@ class DefaultImageLoaderHolder @Inject constructor(
|
||||||
override suspend fun onSessionCreated(userId: String) = Unit
|
override suspend fun onSessionCreated(userId: String) = Unit
|
||||||
|
|
||||||
override suspend fun onSessionDeleted(userId: String) {
|
override suspend fun onSessionDeleted(userId: String) {
|
||||||
map.remove(SessionId(userId))
|
remove(SessionId(userId))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -68,4 +69,10 @@ class DefaultImageLoaderHolder @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun remove(sessionId: SessionId) {
|
||||||
|
synchronized(map) {
|
||||||
|
map.remove(sessionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.libraries.push.test.notifications
|
||||||
|
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder
|
import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder
|
||||||
|
|
||||||
class FakeImageLoaderHolder : ImageLoaderHolder {
|
class FakeImageLoaderHolder : ImageLoaderHolder {
|
||||||
|
|
@ -25,4 +26,8 @@ class FakeImageLoaderHolder : ImageLoaderHolder {
|
||||||
override fun get(client: MatrixClient): ImageLoader {
|
override fun get(client: MatrixClient): ImageLoader {
|
||||||
return fakeImageLoader.getImageLoader()
|
return fakeImageLoader.getImageLoader()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun remove(sessionId: SessionId) {
|
||||||
|
// No-op
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue