From f5c1ad8f2ad53f43f7774086b77069bc291218d7 Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 25 Jun 2020 18:30:52 +0200 Subject: [PATCH] Fix / remember state and resend on rebind --- .../DefaultContentDownloadStateTracker.kt | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/download/DefaultContentDownloadStateTracker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/download/DefaultContentDownloadStateTracker.kt index 3ff9a2ba05..10076ba1d5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/download/DefaultContentDownloadStateTracker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/download/DefaultContentDownloadStateTracker.kt @@ -27,6 +27,8 @@ import javax.inject.Inject class DefaultContentDownloadStateTracker @Inject constructor() : ProgressListener, ContentDownloadStateTracker { private val mainHandler = Handler(Looper.getMainLooper()) + + // TODO this will grow undefinitly.. private val states = mutableMapOf() private val listeners = mutableMapOf>() @@ -35,6 +37,14 @@ class DefaultContentDownloadStateTracker @Inject constructor() : ProgressListene if (!listeners.contains(updateListener)) { listeners.add(updateListener) } + val currentState = states[key] ?: ContentDownloadStateTracker.State.Idle + mainHandler.post { + try { + updateListener.onDownloadStateUpdate(currentState) + } catch (e: Exception) { + Timber.e(e, "## ContentUploadStateTracker.onUpdate() failed") + } + } } override fun unTrack(key: String, updateListener: ContentDownloadStateTracker.UpdateListener) { @@ -51,21 +61,25 @@ class DefaultContentDownloadStateTracker @Inject constructor() : ProgressListene override fun update(url: String, bytesRead: Long, contentLength: Long, done: Boolean) { Timber.v("## DL Progress url:$url read:$bytesRead total:$contentLength done:$done") - listeners[url]?.forEach { - tryThis { - if (done) { - it.onDownloadStateUpdate(ContentDownloadStateTracker.State.Success) - } else { - it.onDownloadStateUpdate(ContentDownloadStateTracker.State.Downloading(bytesRead, contentLength, contentLength == -1L)) - } - } + if (done) { + updateState(url, ContentDownloadStateTracker.State.Success) + } else { + updateState(url, ContentDownloadStateTracker.State.Downloading(bytesRead, contentLength, contentLength == -1L)) } } override fun error(url: String, errorCode: Int) { Timber.v("## DL Progress Error code:$errorCode") + updateState(url, ContentDownloadStateTracker.State.Failure(errorCode)) listeners[url]?.forEach { tryThis { it.onDownloadStateUpdate(ContentDownloadStateTracker.State.Failure(errorCode)) } } } + + private fun updateState(url: String, state: ContentDownloadStateTracker.State) { + states[url] = state + listeners[url]?.forEach { + tryThis { it.onDownloadStateUpdate(state) } + } + } }