优化
This commit is contained in:
@@ -5,6 +5,7 @@ import android.content.Context
|
|||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import androidx.annotation.Keep
|
import androidx.annotation.Keep
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
||||||
@@ -29,6 +30,7 @@ import io.legado.app.utils.fromJsonObject
|
|||||||
import io.legado.app.utils.getPrefBoolean
|
import io.legado.app.utils.getPrefBoolean
|
||||||
import io.legado.app.utils.getPrefString
|
import io.legado.app.utils.getPrefString
|
||||||
import splitties.init.appCtx
|
import splitties.init.appCtx
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
object BookCover {
|
object BookCover {
|
||||||
@@ -102,20 +104,34 @@ object BookCover {
|
|||||||
path: String?,
|
path: String?,
|
||||||
loadOnlyWifi: Boolean = false,
|
loadOnlyWifi: Boolean = false,
|
||||||
sourceOrigin: String? = null,
|
sourceOrigin: String? = null,
|
||||||
manga: Boolean = false,
|
|
||||||
useDefaultCover: Drawable? = null,
|
|
||||||
): RequestBuilder<Drawable> {
|
): RequestBuilder<Drawable> {
|
||||||
var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi)
|
var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi)
|
||||||
.set(OkHttpModelLoader.mangaOption, manga)
|
.set(OkHttpModelLoader.mangaOption, true)
|
||||||
if (sourceOrigin != null) {
|
if (sourceOrigin != null) {
|
||||||
options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin)
|
options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin)
|
||||||
}
|
}
|
||||||
return ImageLoader.load(context, path)
|
return ImageLoader.load(context, path)
|
||||||
.apply(options)
|
.apply(options)
|
||||||
.override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL)
|
.override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL)
|
||||||
.placeholder(useDefaultCover)
|
|
||||||
.error(useDefaultCover)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||||
|
.skipMemoryCache(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun preloadManga(
|
||||||
|
context: Context,
|
||||||
|
path: String?,
|
||||||
|
loadOnlyWifi: Boolean = false,
|
||||||
|
sourceOrigin: String? = null,
|
||||||
|
): RequestBuilder<File?> {
|
||||||
|
var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi)
|
||||||
|
.set(OkHttpModelLoader.mangaOption, true)
|
||||||
|
if (sourceOrigin != null) {
|
||||||
|
options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin)
|
||||||
|
}
|
||||||
|
return Glide.with(context)
|
||||||
|
.downloadOnly()
|
||||||
|
.apply(options)
|
||||||
|
.load(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,18 +17,17 @@ import androidx.viewbinding.ViewBinding
|
|||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.ListPreloader.PreloadModelProvider
|
import com.bumptech.glide.ListPreloader.PreloadModelProvider
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import io.legado.app.R
|
|
||||||
import io.legado.app.base.adapter.ItemViewHolder
|
import io.legado.app.base.adapter.ItemViewHolder
|
||||||
import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW
|
import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW
|
||||||
import io.legado.app.databinding.BookComicLoadingRvBinding
|
import io.legado.app.databinding.BookComicLoadingRvBinding
|
||||||
import io.legado.app.databinding.BookComicRvBinding
|
import io.legado.app.databinding.BookComicRvBinding
|
||||||
import io.legado.app.help.glide.progress.ProgressManager
|
import io.legado.app.help.glide.progress.ProgressManager
|
||||||
|
import io.legado.app.help.globalExecutor
|
||||||
import io.legado.app.model.BookCover
|
import io.legado.app.model.BookCover
|
||||||
import io.legado.app.model.ReadManga
|
import io.legado.app.model.ReadManga
|
||||||
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig
|
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig
|
||||||
import io.legado.app.ui.book.manga.entities.MangaPage
|
import io.legado.app.ui.book.manga.entities.MangaPage
|
||||||
import io.legado.app.ui.book.manga.entities.ReaderLoading
|
import io.legado.app.ui.book.manga.entities.ReaderLoading
|
||||||
import io.legado.app.utils.getCompatDrawable
|
|
||||||
|
|
||||||
|
|
||||||
class MangaAdapter(private val context: Context) :
|
class MangaAdapter(private val context: Context) :
|
||||||
@@ -171,7 +170,9 @@ class MangaAdapter(private val context: Context) :
|
|||||||
vh.itemView.updateLayoutParams<ViewGroup.LayoutParams> {
|
vh.itemView.updateLayoutParams<ViewGroup.LayoutParams> {
|
||||||
height = MATCH_PARENT
|
height = MATCH_PARENT
|
||||||
}
|
}
|
||||||
Glide.with(context).clear(vh.binding.image)
|
globalExecutor.execute {
|
||||||
|
Glide.with(context).clear(vh.binding.image)
|
||||||
|
}
|
||||||
if (vh.binding.image.tag is String) {
|
if (vh.binding.image.tag is String) {
|
||||||
ProgressManager.removeListener(vh.binding.image.tag as String)
|
ProgressManager.removeListener(vh.binding.image.tag as String)
|
||||||
}
|
}
|
||||||
@@ -223,12 +224,10 @@ class MangaAdapter(private val context: Context) :
|
|||||||
|
|
||||||
override fun getPreloadRequestBuilder(item: Any): RequestBuilder<*>? {
|
override fun getPreloadRequestBuilder(item: Any): RequestBuilder<*>? {
|
||||||
if (item is MangaPage) {
|
if (item is MangaPage) {
|
||||||
return BookCover.loadManga(
|
return BookCover.preloadManga(
|
||||||
context,
|
context,
|
||||||
item.mImageUrl,
|
item.mImageUrl,
|
||||||
sourceOrigin = ReadManga.book?.origin,
|
sourceOrigin = ReadManga.book?.origin,
|
||||||
manga = true,
|
|
||||||
useDefaultCover = context.getCompatDrawable(R.color.book_ant_10)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ import com.bumptech.glide.load.DataSource
|
|||||||
import com.bumptech.glide.load.engine.GlideException
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.request.RequestListener
|
import com.bumptech.glide.request.RequestListener
|
||||||
import com.bumptech.glide.request.target.Target
|
import com.bumptech.glide.request.target.Target
|
||||||
import io.legado.app.R
|
|
||||||
import io.legado.app.help.glide.progress.ProgressManager
|
import io.legado.app.help.glide.progress.ProgressManager
|
||||||
import io.legado.app.model.BookCover
|
import io.legado.app.model.BookCover
|
||||||
import io.legado.app.model.ReadManga
|
import io.legado.app.model.ReadManga
|
||||||
import io.legado.app.utils.getCompatDrawable
|
|
||||||
import io.legado.app.utils.printOnDebug
|
import io.legado.app.utils.printOnDebug
|
||||||
|
|
||||||
open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Context) :
|
open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Context) :
|
||||||
@@ -66,8 +64,6 @@ open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Conte
|
|||||||
context,
|
context,
|
||||||
imageUrl,
|
imageUrl,
|
||||||
sourceOrigin = ReadManga.book?.origin,
|
sourceOrigin = ReadManga.book?.origin,
|
||||||
manga = true,
|
|
||||||
useDefaultCover = context.getCompatDrawable(R.color.book_ant_10)
|
|
||||||
).addListener(object : RequestListener<Drawable> {
|
).addListener(object : RequestListener<Drawable> {
|
||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
|
|||||||
Reference in New Issue
Block a user