feat(cover): Custom cover now shown globally

This commit is contained in:
Ahmad Ansori Palembani 2024-08-21 06:27:04 +07:00
parent e8fc16d166
commit b044842475
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
6 changed files with 18 additions and 47 deletions

View file

@ -13,7 +13,7 @@ import uy.kohesive.injekt.injectLazy
class LibraryMangaImageTarget(
override val view: ImageView,
val libraryManga: Manga,
private val libraryManga: Manga,
) : ImageViewTarget(view) {
private val coverCache: CoverCache by injectLazy()

View file

@ -5,10 +5,7 @@ import androidx.appcompat.widget.PopupMenu
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import coil3.imageLoader
import coil3.request.ImageRequest
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.CoverViewTarget
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.databinding.MangaGridItemBinding
@ -24,13 +21,14 @@ import eu.kanade.tachiyomi.util.system.setExtras
import eu.kanade.tachiyomi.util.view.setCards
import eu.kanade.tachiyomi.util.view.setVectorCompat
import eu.kanade.tachiyomi.util.view.withFadeTransaction
import java.text.DecimalFormat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import uy.kohesive.injekt.injectLazy
import yokai.domain.manga.models.cover
import yokai.i18n.MR
import yokai.presentation.core.util.coil.loadManga
import yokai.util.lang.getString
import java.text.DecimalFormat
class MigrationProcessHolder(
private val view: View,
@ -149,11 +147,9 @@ class MigrationProcessHolder(
(root.layoutParams as ConstraintLayout.LayoutParams).verticalBias = 1f
progress.isVisible = false
val request = ImageRequest.Builder(view.context).data(manga.cover())
.target(CoverViewTarget(coverThumbnail, progress))
.setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false)
.build()
view.context.imageLoader.enqueue(request)
coverThumbnail.loadManga(manga.cover(), progress) {
setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false)
}
compactTitle.isVisible = true
gradient.isVisible = true

View file

@ -6,18 +6,14 @@ import androidx.core.graphics.ColorUtils
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import coil3.dispose
import coil3.imageLoader
import coil3.request.ImageRequest
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.data.coil.CoverViewTarget
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
import eu.kanade.tachiyomi.databinding.MangaGridItemBinding
import eu.kanade.tachiyomi.domain.manga.models.Manga
import eu.kanade.tachiyomi.ui.library.LibraryCategoryAdapter
import eu.kanade.tachiyomi.util.system.setExtras
import eu.kanade.tachiyomi.util.view.setCards
import yokai.domain.manga.models.cover
import yokai.presentation.core.util.coil.loadManga
/**
* Class used to hold the displayed data of a manga in the library, like the cover or the title.
@ -67,12 +63,7 @@ class BrowseSourceGridHolder(
binding.coverThumbnail.dispose()
} else {
manga.id ?: return
val request = ImageRequest.Builder(view.context).data(manga.cover())
.target(CoverViewTarget(binding.coverThumbnail, binding.progress))
.setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false)
.build()
view.context.imageLoader.enqueue(request)
binding.coverThumbnail.loadManga(manga.cover(), binding.progress)
binding.coverThumbnail.alpha = if (manga.favorite) 0.34f else 1.0f
binding.card.strokeColorStateList?.defaultColor?.let { color ->
binding.card.strokeColor = ColorUtils.setAlphaComponent(color, if (manga.favorite) 87 else 255)

View file

@ -4,17 +4,13 @@ import android.view.View
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import coil3.dispose
import coil3.imageLoader
import coil3.request.ImageRequest
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.data.coil.CoverViewTarget
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
import eu.kanade.tachiyomi.databinding.MangaListItemBinding
import eu.kanade.tachiyomi.domain.manga.models.Manga
import eu.kanade.tachiyomi.util.system.setExtras
import eu.kanade.tachiyomi.util.view.setCards
import yokai.domain.manga.models.cover
import yokai.presentation.core.util.coil.loadManga
/**
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
@ -56,12 +52,7 @@ class BrowseSourceListHolder(
binding.coverThumbnail.dispose()
} else {
manga.id ?: return
val request = ImageRequest.Builder(view.context).data(manga.cover())
.target(CoverViewTarget(binding.coverThumbnail))
.setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false)
.build()
view.context.imageLoader.enqueue(request)
binding.coverThumbnail.loadManga(manga.cover())
binding.coverThumbnail.alpha = if (manga.favorite) 0.34f else 1.0f
}
}

View file

@ -4,21 +4,14 @@ import android.graphics.drawable.RippleDrawable
import android.view.View
import androidx.core.view.isVisible
import coil3.dispose
import coil3.imageLoader
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import coil3.request.placeholder
import eu.kanade.tachiyomi.data.coil.CoverViewTarget
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
import eu.kanade.tachiyomi.databinding.SourceGlobalSearchControllerCardItemBinding
import eu.kanade.tachiyomi.domain.manga.models.Manga
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.setExtras
import eu.kanade.tachiyomi.util.view.makeShapeCorners
import eu.kanade.tachiyomi.util.view.setCards
import yokai.domain.manga.models.cover
import android.R as AR
import yokai.presentation.core.util.coil.loadManga
class GlobalSearchMangaHolder(view: View, adapter: GlobalSearchCardAdapter) :
BaseFlexibleViewHolder(view, adapter) {
@ -57,13 +50,7 @@ class GlobalSearchMangaHolder(view: View, adapter: GlobalSearchCardAdapter) :
fun setImage(manga: Manga) {
binding.itemImage.dispose()
if (!manga.thumbnail_url.isNullOrEmpty()) {
val request = ImageRequest.Builder(itemView.context).data(manga.cover())
.placeholder(AR.color.transparent)
.memoryCachePolicy(CachePolicy.DISABLED)
.target(CoverViewTarget(binding.itemImage, binding.progress))
.setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false)
.build()
itemView.context.imageLoader.enqueue(request)
binding.itemImage.loadManga(manga.cover(), binding.progress)
}
}
}

View file

@ -1,5 +1,6 @@
package yokai.presentation.core.util.coil
import android.view.View
import android.widget.ImageView
import coil3.ImageLoader
import coil3.imageLoader
@ -7,6 +8,8 @@ import coil3.request.Disposable
import coil3.request.ImageRequest
import coil3.size.Precision
import coil3.size.SizeResolver
import coil3.target.ImageViewTarget
import eu.kanade.tachiyomi.data.coil.CoverViewTarget
import eu.kanade.tachiyomi.data.coil.LibraryMangaImageTarget
import eu.kanade.tachiyomi.domain.manga.models.Manga
import yokai.domain.manga.models.MangaCover
@ -29,11 +32,14 @@ fun ImageView.loadManga(
fun ImageView.loadManga(
cover: MangaCover,
progress: View? = null,
target: ImageViewTarget? = null,
imageLoader: ImageLoader = context.imageLoader,
builder: ImageRequest.Builder.() -> Unit = {},
): Disposable {
val request = ImageRequest.Builder(context)
.data(cover)
.target(target ?: CoverViewTarget(this, progress))
.size(SizeResolver.ORIGINAL)
.precision(Precision.INEXACT)
.apply(builder)