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 e53ab627e..e056e0ad8 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 @@ -1,14 +1,17 @@ package eu.kanade.tachiyomi.ui.manga.chapter -import android.animation.ObjectAnimator import android.content.Context +import android.content.res.ColorStateList import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import androidx.core.view.isVisible +import com.google.android.material.progressindicator.BaseProgressIndicator +import com.mikepenz.aboutlibraries.util.getThemeColor import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.databinding.ChapterDownloadViewBinding +import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.view.setVectorCompat class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : @@ -17,17 +20,15 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att 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 state: Download.State? = null + private var progress = -1 init { addView(binding.root) } - fun setState(state: Download.State, progress: Int = 0) { - val isDirty = this.state.value != state.value || this.progress != progress + fun setState(state: Download.State, progress: Int = -1) { + val isDirty = this.state?.value != state.value || this.progress != progress if (isDirty) { updateLayout(state, progress) } @@ -36,29 +37,45 @@ class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: Att private fun updateLayout(state: Download.State, progress: Int) { 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 - repeatCount = ObjectAnimator.INFINITE - repeatMode = ObjectAnimator.REVERSE - } - downloadIconAnimator?.start() - } - downloadIconAnimator?.currentPlayTime = System.currentTimeMillis() % 2000 - } else if (downloadIconAnimator != null) { - downloadIconAnimator?.cancel() - downloadIconAnimator = null - binding.downloadIcon.alpha = 1f + binding.downloadIcon.imageTintList = if (state == Download.State.DOWNLOADING && progress > 0) { + ColorStateList.valueOf(context.getThemeColor(android.R.attr.colorBackground)) + } else { + ColorStateList.valueOf(context.getThemeColor(android.R.attr.textColorHint)) } - binding.downloadProgress.isVisible = state == Download.State.DOWNLOADING || - state == Download.State.NOT_DOWNLOADED || state == Download.State.QUEUE - if (state == Download.State.DOWNLOADING) { - binding.downloadProgress.setProgressCompat(progress, true) - } else { - binding.downloadProgress.setProgressCompat(100, true) + binding.downloadProgress.apply { + val shouldBeVisible = state == Download.State.DOWNLOADING || + state == Download.State.NOT_DOWNLOADED || state == Download.State.QUEUE + if (shouldBeVisible) { + hideAnimationBehavior = BaseProgressIndicator.HIDE_NONE + show() + + if (state == Download.State.NOT_DOWNLOADED || state == Download.State.QUEUE) { + trackThickness = 2.dpToPx + setIndicatorColor(context.getThemeColor(android.R.attr.textColorHint)) + if (state == Download.State.NOT_DOWNLOADED) { + if (isIndeterminate) { + hide() + isIndeterminate = false + } + setProgressCompat(100, false) + } else if (!isIndeterminate) { + hide() + isIndeterminate = true + show() + } + } else if (state == Download.State.DOWNLOADING) { + if (isIndeterminate) { + hide() + } + trackThickness = 12.dpToPx + setIndicatorColor(context.getThemeColor(android.R.attr.textColorPrimary)) + setProgressCompat(progress, true) + } + } else { + hideAnimationBehavior = BaseProgressIndicator.HIDE_OUTWARD + hide() + } } binding.downloadStatusIcon.apply { diff --git a/app/src/main/res/layout/chapter_download_view.xml b/app/src/main/res/layout/chapter_download_view.xml index 5653c4af6..99d7c2172 100644 --- a/app/src/main/res/layout/chapter_download_view.xml +++ b/app/src/main/res/layout/chapter_download_view.xml @@ -7,6 +7,22 @@ android:background="@drawable/ripple_regular" android:padding="8dp"> + + + + - - - - diff --git a/app/src/main/res/layout/chapters_item.xml b/app/src/main/res/layout/chapters_item.xml index 6fcdc726e..544e8053c 100644 --- a/app/src/main/res/layout/chapters_item.xml +++ b/app/src/main/res/layout/chapters_item.xml @@ -6,7 +6,7 @@ android:layout_height="?android:attr/listPreferredItemHeight" android:background="@drawable/list_item_selector_background" android:paddingStart="16dp" - android:paddingEnd="4dp"> + android:paddingEnd="5dp">