Avoid some unnecessary re-renderings of download icons

This commit is contained in:
arkon 2021-02-06 23:25:39 -05:00
parent 717e55497f
commit 348c1ff29d
2 changed files with 16 additions and 0 deletions

View File

@ -317,6 +317,7 @@ class MangaPresenter(
observeDownloadsStatusSubscription?.let { remove(it) } observeDownloadsStatusSubscription?.let { remove(it) }
observeDownloadsStatusSubscription = downloadManager.queue.getStatusObservable() observeDownloadsStatusSubscription = downloadManager.queue.getStatusObservable()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.onBackpressureLatest()
.filter { download -> download.manga.id == manga.id } .filter { download -> download.manga.id == manga.id }
.doOnNext { onDownloadStatusChange(it) } .doOnNext { onDownloadStatusChange(it) }
.subscribeLatestCache(MangaController::onChapterDownloadUpdate) { _, error -> .subscribeLatestCache(MangaController::onChapterDownloadUpdate) { _, error ->
@ -326,6 +327,7 @@ class MangaPresenter(
observeDownloadsPageSubscription?.let { remove(it) } observeDownloadsPageSubscription?.let { remove(it) }
observeDownloadsPageSubscription = downloadManager.queue.getProgressObservable() observeDownloadsPageSubscription = downloadManager.queue.getProgressObservable()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.onBackpressureLatest()
.filter { download -> download.manga.id == manga.id } .filter { download -> download.manga.id == manga.id }
.subscribeLatestCache(MangaController::onChapterDownloadUpdate) { _, error -> .subscribeLatestCache(MangaController::onChapterDownloadUpdate) { _, error ->
Timber.e(error) Timber.e(error)

View File

@ -14,6 +14,9 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att
private val binding: ChapterDownloadViewBinding private val binding: ChapterDownloadViewBinding
private var state = Download.State.NOT_DOWNLOADED
private var progress = 0
private var downloadIconAnimator: ObjectAnimator? = null private var downloadIconAnimator: ObjectAnimator? = null
private var isAnimating = false private var isAnimating = false
@ -23,6 +26,17 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att
} }
fun setState(state: Download.State, progress: Int = 0) { fun setState(state: Download.State, progress: Int = 0) {
val isDirty = this.state.value != state.value || this.progress != progress
this.state = state
this.progress = progress
if (isDirty) {
updateLayout()
}
}
private fun updateLayout() {
binding.downloadIconBorder.isVisible = state == Download.State.NOT_DOWNLOADED binding.downloadIconBorder.isVisible = state == Download.State.NOT_DOWNLOADED
binding.downloadIcon.isVisible = state == Download.State.NOT_DOWNLOADED || state == Download.State.DOWNLOADING binding.downloadIcon.isVisible = state == Download.State.NOT_DOWNLOADED || state == Download.State.DOWNLOADING