Highlight original status and series type in edit manga dialog

This commit is contained in:
Jays2Kings 2022-04-09 13:12:05 -05:00
parent 39a2f4a243
commit 9e86556bb5
3 changed files with 56 additions and 0 deletions

View file

@ -24,10 +24,13 @@ import eu.kanade.tachiyomi.data.image.coil.MangaFetcher
import eu.kanade.tachiyomi.data.image.coil.loadManga
import eu.kanade.tachiyomi.databinding.EditMangaDialogBinding
import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.icon
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.isLocal
import eu.kanade.tachiyomi.util.lang.chop
import eu.kanade.tachiyomi.util.system.ImageUtil
import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.isInNightMode
import eu.kanade.tachiyomi.util.system.materialAlertDialog
@ -124,6 +127,15 @@ class EditMangaDialog : DialogController {
}
}
setGenreTags(manga.getGenres().orEmpty())
if (!isLocal) {
binding.mangaStatus.originalPosition = manga.originalStatus
binding.seriesType.originalPosition = manga.seriesType(true) - 1
infoController.presenter.source.icon()?.let { icon ->
val bitD = ImageUtil.resizeBitMapDrawable(icon, resources, 24.dpToPx)
binding.mangaStatus.originalIcon = bitD ?: icon
binding.seriesType.originalIcon = bitD ?: icon
}
}
binding.mangaStatus.setSelection(manga.status.coerceIn(SManga.UNKNOWN, SManga.ON_HIATUS))
val oldType = manga.seriesType()
binding.seriesType.setSelection(oldType - 1)

View file

@ -2,11 +2,13 @@ package eu.kanade.tachiyomi.util.system
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Rect
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable
@ -53,6 +55,17 @@ object ImageUtil {
return null
}
fun resizeBitMapDrawable(drawable: Drawable, resources: Resources?, size: Int): Drawable? {
val b = (drawable as? BitmapDrawable)?.bitmap
val bitmapResized: Bitmap? = if (b != null) {
Bitmap.createScaledBitmap(b, size, size, false)
} else {
null
}
return if (bitmapResized != null) BitmapDrawable(resources, bitmapResized)
else null
}
fun isAnimatedAndSupported(stream: InputStream): Boolean {
try {
val type = getImageType(stream) ?: return false

View file

@ -30,6 +30,8 @@ class MaterialSpinnerView constructor(context: Context, attrs: AttributeSet?) :
private var entries = emptyList<String>()
var selectedPosition = 0
private set
var originalPosition: Int? = null
var originalIcon: Drawable? = null
private var pref: Preference<Int>? = null
private var prefOffset = 0
private var popup: PopupMenu? = null
@ -47,6 +49,14 @@ class MaterialSpinnerView constructor(context: Context, attrs: AttributeSet?) :
0.5f
)
private val slightAccent by lazy {
ColorUtils.blendARGB(
context.getResourceColor(R.attr.colorSecondary),
context.getResourceColor(R.attr.colorOnBackground),
0.9f
)
}
var onItemSelectedListener: ((Int) -> Unit)? = null
set(value) {
field = value
@ -115,6 +125,7 @@ class MaterialSpinnerView constructor(context: Context, attrs: AttributeSet?) :
it.title = it.title?.tintText(blendedAccent)
}
}
updateOriginalPositionMenu()
binding.detailView.text = entries.getOrNull(selection).orEmpty()
}
@ -253,10 +264,30 @@ class MaterialSpinnerView constructor(context: Context, attrs: AttributeSet?) :
menuItem.title =
menuItem.title?.tintText(blendedAccent)
}
updateOriginalPositionMenu()
this.popup = popup
return popup
}
private fun updateOriginalPositionMenu() {
popup ?: return
val originalPosition = originalPosition ?: return
if (originalPosition != selectedPosition &&
originalPosition >= 0 && originalPosition < popup?.menu?.size() ?: 0
) {
popup?.menu?.getItem(originalPosition)?.let { menuItem ->
menuItem.icon = tintedOG()
menuItem
}
}
}
private fun tintedOG(): Drawable? {
return originalIcon ?: ContextCompat.getDrawable(context, R.drawable.ic_browse_outline_24dp)?.mutate()?.apply {
setTint(slightAccent)
}
}
private fun tintedCheck(): Drawable? {
return ContextCompat.getDrawable(context, R.drawable.ic_check_24dp)?.mutate()?.apply {
setTint(blendedAccent)