From 480ff00eec8fe7282fc75769040717d4f3633c8d Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sun, 1 May 2022 16:00:38 -0400 Subject: [PATCH] Use image span for cloud/download icon in transition pages --- .../ui/reader/viewer/ReaderTransitionView.kt | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt index 3f24d4b4a0..b4fed13a17 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt @@ -1,14 +1,15 @@ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context -import android.graphics.drawable.Drawable +import android.text.SpannableStringBuilder +import android.text.style.ImageSpan import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout -import android.widget.TextView import androidx.annotation.ColorInt import androidx.core.text.bold import androidx.core.text.buildSpannedString +import androidx.core.text.inSpans import androidx.core.view.isVisible import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga @@ -17,6 +18,7 @@ import eu.kanade.tachiyomi.databinding.ReaderTransitionViewBinding import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.util.system.contextCompatDrawable import eu.kanade.tachiyomi.util.system.dpToPx +import kotlin.math.roundToInt class ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : LinearLayout(context, attrs) { @@ -48,27 +50,20 @@ class ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: At ) { val prevChapter = transition.to - val hasPrevChapter = prevChapter != null - binding.lowerText.isVisible = hasPrevChapter - if (hasPrevChapter) { + binding.lowerText.isVisible = prevChapter != null + if (prevChapter != null) { binding.upperText.textAlignment = TEXT_ALIGNMENT_TEXT_START - val isPrevDownloaded = downloadManager.isChapterDownloaded(prevChapter!!.chapter, manga) + val isPrevDownloaded = downloadManager.isChapterDownloaded(prevChapter.chapter, manga) val isCurrentDownloaded = downloadManager.isChapterDownloaded(transition.from.chapter, manga) - - val downloadIcon = context.contextCompatDrawable(R.drawable.ic_file_download_24dp)?.mutate() - val cloudIcon = context.contextCompatDrawable(R.drawable.ic_cloud_24dp)?.mutate() binding.upperText.text = buildSpannedString { bold { append(context.getString(R.string.previous_title)) } append("\n${prevChapter.chapter.name}") + if (isPrevDownloaded != isCurrentDownloaded) addDLImageSpan(isPrevDownloaded) } binding.lowerText.text = buildSpannedString { bold { append(context.getString(R.string.current_chapter)) } append("\n${transition.from.chapter.name}") } - - binding.lowerText.setDrawable(null) - if (isPrevDownloaded && !isCurrentDownloaded) binding.upperText.setDrawable(downloadIcon) - else if (!isPrevDownloaded && isCurrentDownloaded) binding.upperText.setDrawable(cloudIcon) } else { binding.upperText.textAlignment = TEXT_ALIGNMENT_CENTER binding.upperText.text = context.getString(R.string.theres_no_previous_chapter) @@ -85,12 +80,11 @@ class ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: At ) { val nextChapter = transition.to - val hasNextChapter = nextChapter != null - binding.lowerText.isVisible = hasNextChapter - if (hasNextChapter) { + binding.lowerText.isVisible = nextChapter != null + if (nextChapter != null) { binding.upperText.textAlignment = TEXT_ALIGNMENT_TEXT_START val isCurrentDownloaded = downloadManager.isChapterDownloaded(transition.from.chapter, manga) - val isNextDownloaded = downloadManager.isChapterDownloaded(nextChapter!!.chapter, manga) + val isNextDownloaded = downloadManager.isChapterDownloaded(nextChapter.chapter, manga) binding.upperText.text = buildSpannedString { bold { append(context.getString(R.string.finished_chapter)) } append("\n${transition.from.chapter.name}") @@ -98,24 +92,26 @@ class ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: At binding.lowerText.text = buildSpannedString { bold { append(context.getString(R.string.next_title)) } append("\n${nextChapter.chapter.name}") + if (isNextDownloaded != isCurrentDownloaded) addDLImageSpan(isNextDownloaded) } - - val downloadIcon = context.contextCompatDrawable(R.drawable.ic_file_download_24dp)?.mutate() - val cloudIcon = context.contextCompatDrawable(R.drawable.ic_cloud_24dp)?.mutate() - - binding.upperText.setDrawable(null) - if (!isCurrentDownloaded && isNextDownloaded) binding.lowerText.setDrawable(downloadIcon) - else if (isCurrentDownloaded && !isNextDownloaded) binding.lowerText.setDrawable(cloudIcon) } else { binding.upperText.textAlignment = TEXT_ALIGNMENT_CENTER binding.upperText.text = context.getString(R.string.theres_no_next_chapter) } } - private fun TextView.setDrawable(drawable: Drawable?) { - drawable?.setTint(binding.lowerText.currentTextColor) - setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawable, null) - compoundDrawablePadding = 8.dpToPx + private fun SpannableStringBuilder.addDLImageSpan(isDownloaded: Boolean) { + val icon = context.contextCompatDrawable( + if (isDownloaded) R.drawable.ic_file_download_24dp else R.drawable.ic_cloud_24dp + ) + ?.mutate() + ?.apply { + val size = binding.lowerText.textSize + 4f.dpToPx + setTint(binding.lowerText.currentTextColor) + setBounds(0, 0, size.roundToInt(), size.roundToInt()) + } ?: return + append(" ") + inSpans(ImageSpan(icon)) { append("image") } } fun setTextColors(@ColorInt color: Int) {