Coil 2.x upgrade (#6725)

* Migrate to Coil 2

* Adapt to use coil disk cache

* Update to alpha 7

* Update to alpha 8

* Update to rc01
This commit is contained in:
Ivan Iskandar
2022-03-05 04:04:32 +07:00
committed by GitHub
parent f312936629
commit 10eef282fa
24 changed files with 286 additions and 204 deletions

View File

@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.ui.browse.extension
import android.view.View
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import coil.load
import eu.davidea.viewholders.FlexibleViewHolder
import eu.kanade.tachiyomi.R
@@ -39,7 +39,7 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
else -> ""
}.uppercase()
binding.icon.clear()
binding.icon.dispose()
if (extension is Extension.Available) {
binding.icon.load(extension.iconUrl)
} else if (extension is Extension.Installed) {

View File

@@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.ui.browse.migration.manga
import android.view.View
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.davidea.viewholders.FlexibleViewHolder
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
@@ -23,7 +23,7 @@ class MigrationMangaHolder(
binding.title.text = item.manga.title
// Update the cover
binding.thumbnail.clear()
binding.thumbnail.loadAny(item.manga)
binding.thumbnail.dispose()
binding.thumbnail.load(item.manga)
}
}

View File

@@ -1,7 +1,7 @@
package eu.kanade.tachiyomi.ui.browse.source.browse
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import coil.imageLoader
import coil.request.ImageRequest
import coil.transition.CrossfadeTransition
@@ -48,10 +48,10 @@ class SourceComfortableGridHolder(
}
override fun setImage(manga: Manga) {
binding.thumbnail.clear()
binding.thumbnail.dispose()
if (!manga.thumbnail_url.isNullOrEmpty()) {
val crossfadeDuration = binding.root.context.imageLoader.defaults.transition.let {
if (it is CrossfadeTransition) it.durationMillis else 0
val crossfadeDuration = binding.root.context.imageLoader.defaults.transitionFactory.let {
if (it is CrossfadeTransition.Factory) it.durationMillis else 0
}
val request = ImageRequest.Builder(binding.root.context)
.data(manga)

View File

@@ -1,7 +1,7 @@
package eu.kanade.tachiyomi.ui.browse.source.browse
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import coil.imageLoader
import coil.request.ImageRequest
import coil.transition.CrossfadeTransition
@@ -48,10 +48,10 @@ class SourceCompactGridHolder(
}
override fun setImage(manga: Manga) {
binding.thumbnail.clear()
binding.thumbnail.dispose()
if (!manga.thumbnail_url.isNullOrEmpty()) {
val crossfadeDuration = binding.root.context.imageLoader.defaults.transition.let {
if (it is CrossfadeTransition) it.durationMillis else 0
val crossfadeDuration = binding.root.context.imageLoader.defaults.transitionFactory.let {
if (it is CrossfadeTransition.Factory) it.durationMillis else 0
}
val request = ImageRequest.Builder(binding.root.context)
.data(manga)

View File

@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.browse.source.browse
import android.view.View
import androidx.core.view.isVisible
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
@@ -50,9 +50,9 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
}
override fun setImage(manga: Manga) {
binding.thumbnail.clear()
binding.thumbnail.dispose()
if (!manga.thumbnail_url.isNullOrEmpty()) {
binding.thumbnail.loadAny(manga) {
binding.thumbnail.load(manga) {
setParameter(MangaCoverFetcher.USE_CUSTOM_COVER, false)
}
}

View File

@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.ui.browse.source.globalsearch
import android.view.View
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import coil.imageLoader
import coil.request.ImageRequest
import coil.transition.CrossfadeTransition
@@ -53,10 +53,10 @@ class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) :
}
fun setImage(manga: Manga) {
binding.cover.clear()
binding.cover.dispose()
if (!manga.thumbnail_url.isNullOrEmpty()) {
val crossfadeDuration = itemView.context.imageLoader.defaults.transition.let {
if (it is CrossfadeTransition) it.durationMillis else 0
val crossfadeDuration = itemView.context.imageLoader.defaults.transitionFactory.let {
if (it is CrossfadeTransition.Factory) it.durationMillis else 0
}
val request = ImageRequest.Builder(itemView.context)
.data(manga)

View File

@@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.library
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import coil.clear
import coil.dispose
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding
import eu.kanade.tachiyomi.util.view.loadAnyAutoPause
import eu.kanade.tachiyomi.util.view.loadAutoPause
/**
* Class used to hold the displayed data of a manga in the library, like the cover or the title.
@@ -55,7 +55,7 @@ class LibraryComfortableGridHolder(
binding.badges.localText.isVisible = item.isLocal
// Update the cover.
binding.thumbnail.clear()
binding.thumbnail.loadAnyAutoPause(item.manga)
binding.thumbnail.dispose()
binding.thumbnail.loadAutoPause(item.manga)
}
}

View File

@@ -1,10 +1,10 @@
package eu.kanade.tachiyomi.ui.library
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.databinding.SourceCompactGridItemBinding
import eu.kanade.tachiyomi.util.view.loadAnyAutoPause
import eu.kanade.tachiyomi.util.view.loadAutoPause
/**
* Class used to hold the displayed data of a manga in the library, like the cover or the title.
@@ -54,11 +54,11 @@ class LibraryCompactGridHolder(
binding.badges.localText.isVisible = item.isLocal
// Update the cover.
binding.thumbnail.clear()
binding.thumbnail.dispose()
if (coverOnly) {
// Cover only mode: Hides title text unless thumbnail is unavailable
if (!item.manga.thumbnail_url.isNullOrEmpty()) {
binding.thumbnail.loadAnyAutoPause(item.manga)
binding.thumbnail.loadAutoPause(item.manga)
binding.title.isVisible = false
} else {
binding.title.text = item.manga.title
@@ -66,7 +66,7 @@ class LibraryCompactGridHolder(
}
binding.thumbnail.foreground = null
} else {
binding.thumbnail.loadAnyAutoPause(item.manga)
binding.thumbnail.loadAutoPause(item.manga)
}
}
}

View File

@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.library
import android.view.View
import androidx.core.view.isVisible
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
@@ -61,7 +61,7 @@ class LibraryListHolder(
}
// Update the cover
binding.thumbnail.clear()
binding.thumbnail.loadAny(item.manga)
binding.thumbnail.dispose()
binding.thumbnail.load(item.manga)
}
}

View File

@@ -334,7 +334,7 @@ class MangaPresenter(
* @return cover as Bitmap or null if there is no thumbnail cached with the memoryCacheKey
*/
private fun coverBitmapFromImageLoader(context: Context, memoryCacheKey: MemoryCache.Key): Bitmap? {
return context.imageLoader.memoryCache[memoryCacheKey]
return context.imageLoader.memoryCache?.get(memoryCacheKey)?.bitmap
}
/**

View File

@@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.ui.base.controller.getMainAppBarHeight
import eu.kanade.tachiyomi.ui.manga.MangaController
import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.util.view.loadAnyAutoPause
import eu.kanade.tachiyomi.util.view.loadAutoPause
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
@@ -286,8 +286,8 @@ class MangaInfoHeaderAdapter(
setFavoriteButtonState(manga.favorite)
// Set cover if changed.
binding.backdrop.loadAnyAutoPause(manga)
binding.mangaCover.loadAnyAutoPause(manga)
binding.backdrop.loadAutoPause(manga)
binding.mangaCover.loadAutoPause(manga)
// Manga info section
binding.mangaSummarySection.setTags(manga.getGenres(), controller::performGenreSearch)

View File

@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.manga.track
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.kanade.tachiyomi.data.track.model.TrackSearch
import eu.kanade.tachiyomi.databinding.TrackSearchItemBinding
import java.util.Locale
@@ -20,9 +20,9 @@ class TrackSearchHolder(
}
binding.trackSearchTitle.text = track.title
binding.trackSearchCover.clear()
binding.trackSearchCover.dispose()
if (track.cover_url.isNotEmpty()) {
binding.trackSearchCover.loadAny(track.cover_url)
binding.trackSearchCover.load(track.cover_url)
}
val hasStatus = track.publishing_status.isNotBlank()

View File

@@ -17,7 +17,7 @@ import androidx.annotation.CallSuper
import androidx.annotation.StyleRes
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.view.isVisible
import coil.clear
import coil.dispose
import coil.imageLoader
import coil.request.CachePolicy
import coil.request.ImageRequest
@@ -152,7 +152,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
fun recycle() = pageView?.let {
when (it) {
is SubsamplingScaleImageView -> it.recycle()
is AppCompatImageView -> it.clear()
is AppCompatImageView -> it.dispose()
}
it.isVisible = false
}

View File

@@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.ui.recent.history
import android.view.View
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.davidea.viewholders.FlexibleViewHolder
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory
@@ -65,7 +65,7 @@ class HistoryHolder(
}
// Set cover
binding.cover.clear()
binding.cover.loadAny(item.manga)
binding.cover.dispose()
binding.cover.load(item.manga)
}
}

View File

@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.recent.updates
import android.view.View
import androidx.core.view.isVisible
import coil.clear
import coil.loadAny
import coil.dispose
import coil.load
import eu.kanade.tachiyomi.databinding.UpdatesItemBinding
import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.ui.manga.chapter.base.BaseChapterHolder
@@ -58,7 +58,7 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
binding.download.setState(item.status, item.progress)
// Set cover
binding.mangaCover.clear()
binding.mangaCover.loadAny(item.manga)
binding.mangaCover.dispose()
binding.mangaCover.load(item.manga)
}
}