优化
This commit is contained in:
@@ -8,7 +8,6 @@ import androidx.annotation.DrawableRes
|
|||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.request.RequestOptions
|
|
||||||
import io.legado.app.utils.isAbsUrl
|
import io.legado.app.utils.isAbsUrl
|
||||||
import io.legado.app.utils.isContentScheme
|
import io.legado.app.utils.isContentScheme
|
||||||
import io.legado.app.utils.isDataUrl
|
import io.legado.app.utils.isDataUrl
|
||||||
@@ -55,8 +54,7 @@ object ImageLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
|
fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
|
||||||
val requestManager = Glide.with(context).asBitmap()
|
val requestManager = Glide.with(context).`as`(Bitmap::class.java)
|
||||||
.apply(RequestOptions.decodeTypeOf(Any::class.java))
|
|
||||||
return when {
|
return when {
|
||||||
path.isNullOrEmpty() -> requestManager.load(path)
|
path.isNullOrEmpty() -> requestManager.load(path)
|
||||||
path.isDataUrl() -> requestManager.load(path)
|
path.isDataUrl() -> requestManager.load(path)
|
||||||
|
|||||||
@@ -75,6 +75,10 @@ object ImageProvider {
|
|||||||
return bitmapLruCache.get(key)
|
return bitmapLruCache.get(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun remove(key: String): Bitmap? {
|
||||||
|
return bitmapLruCache.remove(key)
|
||||||
|
}
|
||||||
|
|
||||||
private fun getNotRecycled(key: String): Bitmap? {
|
private fun getNotRecycled(key: String): Bitmap? {
|
||||||
val bitmap = bitmapLruCache.get(key) ?: return null
|
val bitmap = bitmapLruCache.get(key) ?: return null
|
||||||
if (bitmap.isRecycled) {
|
if (bitmap.isRecycled) {
|
||||||
|
|||||||
@@ -2,21 +2,20 @@ package io.legado.app.ui.association
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.drawable.Drawable
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
|
import com.bumptech.glide.request.RequestListener
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.bumptech.glide.request.target.CustomTarget
|
import com.bumptech.glide.request.target.Target
|
||||||
import com.bumptech.glide.request.transition.Transition
|
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
import io.legado.app.databinding.DialogVerificationCodeViewBinding
|
import io.legado.app.databinding.DialogVerificationCodeViewBinding
|
||||||
import io.legado.app.help.CacheManager
|
|
||||||
import io.legado.app.help.glide.ImageLoader
|
import io.legado.app.help.glide.ImageLoader
|
||||||
import io.legado.app.help.glide.OkHttpModelLoader
|
import io.legado.app.help.glide.OkHttpModelLoader
|
||||||
import io.legado.app.help.source.SourceVerificationHelp
|
import io.legado.app.help.source.SourceVerificationHelp
|
||||||
@@ -79,37 +78,37 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
|
|||||||
|
|
||||||
@SuppressLint("CheckResult")
|
@SuppressLint("CheckResult")
|
||||||
private fun loadImage(url: String, sourceUrl: String?) {
|
private fun loadImage(url: String, sourceUrl: String?) {
|
||||||
ImageProvider.bitmapLruCache.remove(url)
|
ImageProvider.remove(url)
|
||||||
ImageLoader.loadBitmap(requireContext(), url).apply {
|
ImageLoader.loadBitmap(requireContext(), url).apply {
|
||||||
sourceUrl?.let {
|
sourceUrl?.let {
|
||||||
apply(
|
apply(RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it))
|
||||||
RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}.error(R.drawable.image_loading_error)
|
}.error(R.drawable.image_loading_error)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.into(object : CustomTarget<Bitmap>() {
|
.listener(object : RequestListener<Bitmap> {
|
||||||
override fun onLoadFailed(errorDrawable: Drawable?) {
|
override fun onLoadFailed(
|
||||||
errorDrawable?.toBitmap()?.let {
|
e: GlideException?,
|
||||||
onResourceReady(it, null)
|
model: Any?,
|
||||||
}
|
target: Target<Bitmap?>,
|
||||||
|
isFirstResource: Boolean
|
||||||
|
): Boolean {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Bitmap,
|
resource: Bitmap,
|
||||||
transition: Transition<in Bitmap>?
|
model: Any,
|
||||||
) {
|
target: Target<Bitmap?>?,
|
||||||
view ?: return
|
dataSource: DataSource,
|
||||||
val bitmap = resource.copy(resource.config ?: Bitmap.Config.ARGB_8888, true)
|
isFirstResource: Boolean
|
||||||
ImageProvider.bitmapLruCache.put(url, bitmap)
|
): Boolean {
|
||||||
binding.verificationCodeImageView.setImageBitmap(bitmap)
|
val bitmap = resource.copy(resource.config!!, true)
|
||||||
}
|
ImageProvider.put(url, bitmap) // 传给 PhotoDialog
|
||||||
|
return false
|
||||||
override fun onLoadCleared(placeholder: Drawable?) {
|
|
||||||
// do nothing
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.into(binding.verificationCodeImageView)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
|
|||||||
@@ -41,36 +41,30 @@ class PhotoDialog() : BaseDialogFragment(R.layout.dialog_photo_view) {
|
|||||||
@SuppressLint("CheckResult")
|
@SuppressLint("CheckResult")
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
val arguments = arguments ?: return
|
val arguments = arguments ?: return
|
||||||
arguments.getString("src")?.let { src ->
|
val src = arguments.getString("src") ?: return
|
||||||
ImageProvider.bitmapLruCache.get(src)?.let {
|
ImageProvider.get(src)?.let {
|
||||||
binding.photoView.setImageBitmap(it)
|
binding.photoView.setImageBitmap(it)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val file = ReadBook.book?.let { book ->
|
val file = ReadBook.book?.let { book ->
|
||||||
BookHelp.getImage(book, src)
|
BookHelp.getImage(book, src)
|
||||||
}
|
}
|
||||||
if (file?.exists() == true) {
|
if (file?.exists() == true) {
|
||||||
ImageLoader.load(requireContext(), file)
|
ImageLoader.load(requireContext(), file)
|
||||||
.error(R.drawable.image_loading_error)
|
.error(R.drawable.image_loading_error)
|
||||||
.dontTransform()
|
.dontTransform()
|
||||||
.downsample(DownsampleStrategy.NONE)
|
.downsample(DownsampleStrategy.NONE)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
.into(binding.photoView)
|
.into(binding.photoView)
|
||||||
} else {
|
} else {
|
||||||
ImageLoader.load(requireContext(), src).apply {
|
ImageLoader.load(requireContext(), src).apply {
|
||||||
arguments.getString("sourceOrigin")?.let { sourceOrigin ->
|
arguments.getString("sourceOrigin")?.let { sourceOrigin ->
|
||||||
apply(
|
apply(RequestOptions().set(OkHttpModelLoader.sourceOriginOption, sourceOrigin))
|
||||||
RequestOptions().set(
|
}
|
||||||
OkHttpModelLoader.sourceOriginOption,
|
}.error(BookCover.defaultDrawable)
|
||||||
sourceOrigin
|
.dontTransform()
|
||||||
)
|
.downsample(DownsampleStrategy.NONE)
|
||||||
)
|
.into(binding.photoView)
|
||||||
}
|
|
||||||
}.error(BookCover.defaultDrawable)
|
|
||||||
.dontTransform()
|
|
||||||
.downsample(DownsampleStrategy.NONE)
|
|
||||||
.into(binding.photoView)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user