From 4e7b8c98f9b5fd532683eed54dd55f764bbee01d Mon Sep 17 00:00:00 2001 From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com> Date: Sun, 25 Apr 2021 21:42:06 +0700 Subject: [PATCH] Make the download progress status smoother (#4958) * Make the download progress status smoother * Download status icon cleanup --- .../tachiyomi/ui/manga/MangaController.kt | 3 +- .../ui/manga/chapter/ChapterDownloadView.kt | 45 +++++++++++-------- .../res/drawable/ic_error_outline_24dp.xml | 3 +- .../main/res/layout/chapter_download_view.xml | 25 +---------- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index c4025a6a0d..2e5b3f9e9b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -727,8 +727,7 @@ class MangaController : fun onChapterDownloadUpdate(download: Download) { chaptersAdapter?.currentItems?.find { it.id == download.chapter.id }?.let { - chaptersAdapter?.updateItem(it) - chaptersAdapter?.notifyDataSetChanged() + chaptersAdapter?.updateItem(it, it.status) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterDownloadView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterDownloadView.kt index 533deaa09f..59a0c53670 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterDownloadView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterDownloadView.kt @@ -5,23 +5,24 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout +import androidx.core.content.ContextCompat import androidx.core.view.isVisible +import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.databinding.ChapterDownloadViewBinding class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : FrameLayout(context, attrs) { - private val binding: ChapterDownloadViewBinding + private val binding: ChapterDownloadViewBinding = + ChapterDownloadViewBinding.inflate(LayoutInflater.from(context), this, false) private var state = Download.State.NOT_DOWNLOADED private var progress = 0 private var downloadIconAnimator: ObjectAnimator? = null - private var isAnimating = false init { - binding = ChapterDownloadViewBinding.inflate(LayoutInflater.from(context), this, false) addView(binding.root) } @@ -37,11 +38,12 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att } private fun updateLayout() { - binding.downloadIconBorder.isVisible = state == Download.State.NOT_DOWNLOADED + binding.downloadIconBorder.isVisible = state == Download.State.NOT_DOWNLOADED || state == Download.State.QUEUE - binding.downloadIcon.isVisible = state == Download.State.NOT_DOWNLOADED || state == Download.State.DOWNLOADING - if (state == Download.State.DOWNLOADING) { - if (!isAnimating) { + binding.downloadIcon.isVisible = state == Download.State.NOT_DOWNLOADED || + state == Download.State.DOWNLOADING || state == Download.State.QUEUE + if (state == Download.State.DOWNLOADING || state == Download.State.QUEUE) { + if (downloadIconAnimator == null) { downloadIconAnimator = ObjectAnimator.ofFloat(binding.downloadIcon, "alpha", 1f, 0f).apply { duration = 1000 @@ -49,22 +51,29 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att repeatMode = ObjectAnimator.REVERSE } downloadIconAnimator?.start() - isAnimating = true } - } else { + downloadIconAnimator?.currentPlayTime = System.currentTimeMillis() % 2000 + } else if (downloadIconAnimator != null) { downloadIconAnimator?.cancel() + downloadIconAnimator = null binding.downloadIcon.alpha = 1f - isAnimating = false } - binding.downloadQueued.isVisible = state == Download.State.QUEUE + binding.downloadProgress.isVisible = state == Download.State.DOWNLOADING + binding.downloadProgress.setProgressCompat(progress, true) - binding.downloadProgress.isVisible = state == Download.State.DOWNLOADING || - (state == Download.State.QUEUE && progress > 0) - binding.downloadProgress.progress = progress - - binding.downloadedIcon.isVisible = state == Download.State.DOWNLOADED - - binding.errorIcon.isVisible = state == Download.State.ERROR + binding.downloadStatusIcon.apply { + if (state == Download.State.DOWNLOADED || state == Download.State.ERROR) { + isVisible = true + val drawable = if (state == Download.State.DOWNLOADED) { + ContextCompat.getDrawable(context, R.drawable.ic_check_circle_24dp) + } else { + ContextCompat.getDrawable(context, R.drawable.ic_error_outline_24dp) + } + setImageDrawable(drawable) + } else { + isVisible = false + } + } } } diff --git a/app/src/main/res/drawable/ic_error_outline_24dp.xml b/app/src/main/res/drawable/ic_error_outline_24dp.xml index 5ea6b9db16..74e6527945 100644 --- a/app/src/main/res/drawable/ic_error_outline_24dp.xml +++ b/app/src/main/res/drawable/ic_error_outline_24dp.xml @@ -2,7 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="?colorError"> diff --git a/app/src/main/res/layout/chapter_download_view.xml b/app/src/main/res/layout/chapter_download_view.xml index a0d90c7900..9b5d5c6dd8 100644 --- a/app/src/main/res/layout/chapter_download_view.xml +++ b/app/src/main/res/layout/chapter_download_view.xml @@ -38,36 +38,13 @@ app:indicatorSize="24dp" app:trackThickness="2dp" /> - - - -