Skip to content

Commit

Permalink
优化
Browse files Browse the repository at this point in the history
  • Loading branch information
821938089 committed Jan 28, 2025
1 parent 86d424f commit fae0dd6
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 57 deletions.
4 changes: 1 addition & 3 deletions app/src/main/java/io/legado/app/help/glide/ImageLoader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import androidx.annotation.DrawableRes
import androidx.lifecycle.Lifecycle
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.request.RequestOptions
import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.isContentScheme
import io.legado.app.utils.isDataUrl
Expand Down Expand Up @@ -55,8 +54,7 @@ object ImageLoader {
}

fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
val requestManager = Glide.with(context).asBitmap()
.apply(RequestOptions.decodeTypeOf(Any::class.java))
val requestManager = Glide.with(context).`as`(Bitmap::class.java)
return when {
path.isNullOrEmpty() -> requestManager.load(path)
path.isDataUrl() -> requestManager.load(path)
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/io/legado/app/model/ImageProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ object ImageProvider {
return bitmapLruCache.get(key)
}

fun remove(key: String): Bitmap? {
return bitmapLruCache.remove(key)
}

private fun getNotRecycled(key: String): Bitmap? {
val bitmap = bitmapLruCache.get(key) ?: return null
if (bitmap.isRecycled) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@ package io.legado.app.ui.association

import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
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.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.bumptech.glide.request.target.Target
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
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.OkHttpModelLoader
import io.legado.app.help.source.SourceVerificationHelp
Expand Down Expand Up @@ -79,37 +78,37 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification

@SuppressLint("CheckResult")
private fun loadImage(url: String, sourceUrl: String?) {
ImageProvider.bitmapLruCache.remove(url)
ImageProvider.remove(url)
ImageLoader.loadBitmap(requireContext(), url).apply {
sourceUrl?.let {
apply(
RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it)
)
apply(RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it))
}
}.error(R.drawable.image_loading_error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(object : CustomTarget<Bitmap>() {
override fun onLoadFailed(errorDrawable: Drawable?) {
errorDrawable?.toBitmap()?.let {
onResourceReady(it, null)
}
.listener(object : RequestListener<Bitmap> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Bitmap?>,
isFirstResource: Boolean
): Boolean {
return false
}

override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
view ?: return
val bitmap = resource.copy(resource.config ?: Bitmap.Config.ARGB_8888, true)
ImageProvider.bitmapLruCache.put(url, bitmap)
binding.verificationCodeImageView.setImageBitmap(bitmap)
}

override fun onLoadCleared(placeholder: Drawable?) {
// do nothing
model: Any,
target: Target<Bitmap?>?,
dataSource: DataSource,
isFirstResource: Boolean
): Boolean {
val bitmap = resource.copy(resource.config!!, true)
ImageProvider.put(url, bitmap) // 传给 PhotoDialog
return false
}
})
.into(binding.verificationCodeImageView)
}

@SuppressLint("InflateParams")
Expand Down
54 changes: 24 additions & 30 deletions app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,36 +41,30 @@ class PhotoDialog() : BaseDialogFragment(R.layout.dialog_photo_view) {
@SuppressLint("CheckResult")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
val arguments = arguments ?: return
arguments.getString("src")?.let { src ->
ImageProvider.bitmapLruCache.get(src)?.let {
binding.photoView.setImageBitmap(it)
return
}
val file = ReadBook.book?.let { book ->
BookHelp.getImage(book, src)
}
if (file?.exists() == true) {
ImageLoader.load(requireContext(), file)
.error(R.drawable.image_loading_error)
.dontTransform()
.downsample(DownsampleStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(binding.photoView)
} else {
ImageLoader.load(requireContext(), src).apply {
arguments.getString("sourceOrigin")?.let { sourceOrigin ->
apply(
RequestOptions().set(
OkHttpModelLoader.sourceOriginOption,
sourceOrigin
)
)
}
}.error(BookCover.defaultDrawable)
.dontTransform()
.downsample(DownsampleStrategy.NONE)
.into(binding.photoView)
}
val src = arguments.getString("src") ?: return
ImageProvider.get(src)?.let {
binding.photoView.setImageBitmap(it)
return
}
val file = ReadBook.book?.let { book ->
BookHelp.getImage(book, src)
}
if (file?.exists() == true) {
ImageLoader.load(requireContext(), file)
.error(R.drawable.image_loading_error)
.dontTransform()
.downsample(DownsampleStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(binding.photoView)
} else {
ImageLoader.load(requireContext(), src).apply {
arguments.getString("sourceOrigin")?.let { sourceOrigin ->
apply(RequestOptions().set(OkHttpModelLoader.sourceOriginOption, sourceOrigin))
}
}.error(BookCover.defaultDrawable)
.dontTransform()
.downsample(DownsampleStrategy.NONE)
.into(binding.photoView)
}
}

Expand Down

0 comments on commit fae0dd6

Please sign in to comment.