优化
This commit is contained in:
@@ -5,11 +5,14 @@ import android.graphics.Bitmap
|
|||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
|
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 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
|
||||||
|
import io.legado.app.utils.lifecycle
|
||||||
|
import splitties.init.appCtx
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
//https://bumptech.github.io/glide/doc/generatedapi.html
|
//https://bumptech.github.io/glide/doc/generatedapi.html
|
||||||
@@ -34,6 +37,22 @@ object ImageLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun load(lifecycle: Lifecycle, path: String?): RequestBuilder<Drawable> {
|
||||||
|
val requestManager = Glide.with(appCtx).lifecycle(lifecycle)
|
||||||
|
return when {
|
||||||
|
path.isNullOrEmpty() -> requestManager.load(path)
|
||||||
|
path.isDataUrl() -> requestManager.load(path)
|
||||||
|
path.isAbsUrl() -> requestManager.load(path)
|
||||||
|
path.isContentScheme() -> requestManager.load(Uri.parse(path))
|
||||||
|
|
||||||
|
else -> kotlin.runCatching {
|
||||||
|
requestManager.load(File(path))
|
||||||
|
}.getOrElse {
|
||||||
|
requestManager.load(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
|
fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
|
||||||
return when {
|
return when {
|
||||||
path.isNullOrEmpty() -> Glide.with(context).asBitmap().load(path)
|
path.isNullOrEmpty() -> Glide.with(context).asBitmap().load(path)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.content.Context
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.adapter.ItemViewHolder
|
import io.legado.app.base.adapter.ItemViewHolder
|
||||||
@@ -14,7 +15,7 @@ import io.legado.app.help.glide.ImageLoader
|
|||||||
import io.legado.app.help.glide.OkHttpModelLoader
|
import io.legado.app.help.glide.OkHttpModelLoader
|
||||||
import splitties.views.onLongClick
|
import splitties.views.onLongClick
|
||||||
|
|
||||||
class RssAdapter(context: Context, val callBack: CallBack) :
|
class RssAdapter(context: Context, val callBack: CallBack, val lifecycle: Lifecycle) :
|
||||||
RecyclerAdapter<RssSource, ItemRssBinding>(context) {
|
RecyclerAdapter<RssSource, ItemRssBinding>(context) {
|
||||||
|
|
||||||
override fun getViewBinding(parent: ViewGroup): ItemRssBinding {
|
override fun getViewBinding(parent: ViewGroup): ItemRssBinding {
|
||||||
@@ -31,7 +32,7 @@ class RssAdapter(context: Context, val callBack: CallBack) :
|
|||||||
tvName.text = item.sourceName
|
tvName.text = item.sourceName
|
||||||
val options = RequestOptions()
|
val options = RequestOptions()
|
||||||
.set(OkHttpModelLoader.sourceOriginOption, item.sourceUrl)
|
.set(OkHttpModelLoader.sourceOriginOption, item.sourceUrl)
|
||||||
ImageLoader.load(context, item.sourceIcon)
|
ImageLoader.load(lifecycle, item.sourceIcon)
|
||||||
.apply(options)
|
.apply(options)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.placeholder(R.drawable.image_rss)
|
.placeholder(R.drawable.image_rss)
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class RssFragment() : VMBaseFragment<RssViewModel>(R.layout.fragment_rss),
|
|||||||
|
|
||||||
private val binding by viewBinding(FragmentRssBinding::bind)
|
private val binding by viewBinding(FragmentRssBinding::bind)
|
||||||
override val viewModel by viewModels<RssViewModel>()
|
override val viewModel by viewModels<RssViewModel>()
|
||||||
private val adapter by lazy { RssAdapter(requireContext(), this) }
|
private val adapter by lazy { RssAdapter(requireContext(), this, lifecycle) }
|
||||||
private val searchView: SearchView by lazy {
|
private val searchView: SearchView by lazy {
|
||||||
binding.titleBar.findViewById(R.id.search_view)
|
binding.titleBar.findViewById(R.id.search_view)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package io.legado.app.utils
|
||||||
|
|
||||||
|
import androidx.lifecycle.DefaultLifecycleObserver
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.LifecycleOwner
|
||||||
|
import com.bumptech.glide.RequestManager
|
||||||
|
|
||||||
|
fun RequestManager.lifecycle(lifecycle: Lifecycle): RequestManager {
|
||||||
|
|
||||||
|
val observer = object : DefaultLifecycleObserver {
|
||||||
|
override fun onStart(owner: LifecycleOwner) = onStart()
|
||||||
|
override fun onStop(owner: LifecycleOwner) = onStop()
|
||||||
|
override fun onResume(owner: LifecycleOwner) = onStart()
|
||||||
|
override fun onPause(owner: LifecycleOwner) = onStop()
|
||||||
|
override fun onDestroy(owner: LifecycleOwner) {
|
||||||
|
onDestroy()
|
||||||
|
owner.lifecycle.removeObserver(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycle.addObserver(observer)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user