Cleanup GalleryAdapter, prepare migrate to paging3
This commit is contained in:
1 parent
200882e13c
commit
54a2ea64bc
3 files changed
+47
-61
No files matched your search
@@ -677,19 +677,18 @@ class FavoritesScene :
|
||||
resources: Resources,
|
||||
recyclerView: RecyclerView,
|
||||
type: Int,
|
||||
) : GalleryAdapter(resources, recyclerView, type, false) {
|
||||
) : GalleryAdapter(
|
||||
resources,
|
||||
recyclerView,
|
||||
type,
|
||||
false,
|
||||
{ onItemClick(it) },
|
||||
{ onItemLongClick(it) },
|
||||
) {
|
||||
override fun getItemCount(): Int {
|
||||
return mHelper.size()
|
||||
}
|
||||
|
||||
override fun onItemClick(position: Int) {
|
||||
this@FavoritesScene.onItemClick(position)
|
||||
}
|
||||
|
||||
override fun onItemLongClick(position: Int): Boolean {
|
||||
return this@FavoritesScene.onItemLongClick(position)
|
||||
}
|
||||
|
||||
override fun getDataAt(position: Int): GalleryInfo? {
|
||||
return mHelper.getDataAtEx(position)
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.hippo.ehviewer.ui.scene
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Rect
|
||||
import android.view.View
|
||||
@@ -36,14 +35,15 @@ import com.hippo.ehviewer.yorozuya.dp2px
|
||||
import splitties.init.appCtx
|
||||
|
||||
abstract class GalleryAdapter(
|
||||
private val mResources: Resources,
|
||||
private val mRecyclerView: RecyclerView,
|
||||
private val resources: Resources,
|
||||
private val recyclerView: RecyclerView,
|
||||
type: Int,
|
||||
showFavourited: Boolean,
|
||||
private val showFavorite: Boolean,
|
||||
private val onItemClick: (Int) -> Unit,
|
||||
private val onItemLongClick: (Int) -> Unit,
|
||||
) : RecyclerView.Adapter<GalleryHolder>() {
|
||||
private val mLayoutManager: AutoStaggeredGridLayoutManager = AutoStaggeredGridLayoutManager(0, StaggeredGridLayoutManager.VERTICAL)
|
||||
private val mPaddingTopSB: Int = mResources.getDimensionPixelOffset(R.dimen.gallery_padding_top_search_bar)
|
||||
private val mShowFavourited: Boolean
|
||||
private val layoutManager: AutoStaggeredGridLayoutManager = AutoStaggeredGridLayoutManager(0, StaggeredGridLayoutManager.VERTICAL)
|
||||
private val mPaddingTopSB: Int = resources.getDimensionPixelOffset(R.dimen.gallery_padding_top_search_bar)
|
||||
private var mListDecoration: ItemDecoration? = null
|
||||
private var mGirdDecoration: MarginItemDecoration? = null
|
||||
private var mType = TYPE_INVALID
|
||||
@@ -51,26 +51,23 @@ abstract class GalleryAdapter(
|
||||
var type: Int
|
||||
get() = mType
|
||||
set(type) {
|
||||
if (type == mType) {
|
||||
return
|
||||
}
|
||||
if (type == mType) return
|
||||
mType = type
|
||||
val recyclerView = mRecyclerView
|
||||
when (type) {
|
||||
TYPE_LIST -> {
|
||||
val columnWidth = mResources.getDimensionPixelOffset(
|
||||
val columnWidth = resources.getDimensionPixelOffset(
|
||||
when (detailSize) {
|
||||
0 -> R.dimen.gallery_list_column_width_long
|
||||
1 -> R.dimen.gallery_list_column_width_short
|
||||
else -> throw IllegalStateException("Unexpected value: $detailSize")
|
||||
else -> error("Unexpected value: $detailSize")
|
||||
},
|
||||
)
|
||||
mLayoutManager.setColumnSize(columnWidth)
|
||||
mLayoutManager.setStrategy(STRATEGY_MIN_SIZE)
|
||||
layoutManager.setColumnSize(columnWidth)
|
||||
layoutManager.setStrategy(STRATEGY_MIN_SIZE)
|
||||
if (null != mGirdDecoration) {
|
||||
recyclerView.removeItemDecoration(mGirdDecoration!!)
|
||||
val paddingH = mResources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_h)
|
||||
val paddingV = mResources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_v)
|
||||
val paddingH = resources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_h)
|
||||
val paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_v)
|
||||
recyclerView.setPadding(
|
||||
recyclerView.paddingLeft - paddingH,
|
||||
recyclerView.paddingTop - paddingV,
|
||||
@@ -80,9 +77,9 @@ abstract class GalleryAdapter(
|
||||
mGirdDecoration = null
|
||||
}
|
||||
if (null == mListDecoration) {
|
||||
val interval = mResources.getDimensionPixelOffset(R.dimen.gallery_list_interval)
|
||||
val paddingH = mResources.getDimensionPixelOffset(R.dimen.gallery_list_margin_h)
|
||||
val paddingV = mResources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v)
|
||||
val interval = resources.getDimensionPixelOffset(R.dimen.gallery_list_interval)
|
||||
val paddingH = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_h)
|
||||
val paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v)
|
||||
mListDecoration = object : ItemDecoration() {
|
||||
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
|
||||
outRect.set(0, interval / 2, 0, interval / 2)
|
||||
@@ -96,17 +93,16 @@ abstract class GalleryAdapter(
|
||||
)
|
||||
recyclerView.addItemDecoration(mListDecoration!!)
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
TYPE_GRID -> {
|
||||
val columnWidth = dp2px(appCtx, thumbSizeDp.toFloat())
|
||||
mLayoutManager.setColumnSize(columnWidth)
|
||||
mLayoutManager.setStrategy(STRATEGY_SUITABLE_SIZE)
|
||||
layoutManager.setColumnSize(columnWidth)
|
||||
layoutManager.setStrategy(STRATEGY_SUITABLE_SIZE)
|
||||
if (null != mListDecoration) {
|
||||
recyclerView.removeItemDecoration(mListDecoration!!)
|
||||
val paddingH = mResources.getDimensionPixelOffset(R.dimen.gallery_list_margin_h)
|
||||
val paddingV = mResources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v)
|
||||
val paddingH = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_h)
|
||||
val paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v)
|
||||
recyclerView.setPadding(
|
||||
recyclerView.paddingLeft - paddingH,
|
||||
recyclerView.paddingTop - paddingV,
|
||||
@@ -116,9 +112,9 @@ abstract class GalleryAdapter(
|
||||
mListDecoration = null
|
||||
}
|
||||
if (null == mGirdDecoration) {
|
||||
val interval = mResources.getDimensionPixelOffset(R.dimen.gallery_grid_interval)
|
||||
val paddingH = mResources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_h)
|
||||
val paddingV = mResources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_v)
|
||||
val interval = resources.getDimensionPixelOffset(R.dimen.gallery_grid_interval)
|
||||
val paddingH = resources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_h)
|
||||
val paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_grid_margin_v)
|
||||
mGirdDecoration = MarginItemDecoration(interval, 0, 0, 0, 0)
|
||||
recyclerView.setPadding(
|
||||
recyclerView.paddingLeft + paddingH,
|
||||
@@ -128,22 +124,19 @@ abstract class GalleryAdapter(
|
||||
)
|
||||
recyclerView.addItemDecoration(mGirdDecoration!!)
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
init {
|
||||
mShowFavourited = showFavourited
|
||||
mRecyclerView.adapter = this
|
||||
mRecyclerView.layoutManager = mLayoutManager
|
||||
@SuppressLint("InflateParams")
|
||||
recyclerView.adapter = this
|
||||
recyclerView.layoutManager = layoutManager
|
||||
this.type = type
|
||||
adjustPaddings()
|
||||
}
|
||||
|
||||
private fun adjustPaddings() {
|
||||
val recyclerView = mRecyclerView
|
||||
recyclerView.setPadding(
|
||||
recyclerView.paddingLeft,
|
||||
recyclerView.paddingTop + mPaddingTopSB,
|
||||
@@ -152,17 +145,12 @@ abstract class GalleryAdapter(
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GalleryHolder {
|
||||
val holder = when (viewType) {
|
||||
TYPE_LIST -> ListGalleryHolder(CheckableComposeView(parent.context), mShowFavourited)
|
||||
TYPE_GRID -> GridGalleryHolder(CheckableComposeView(parent.context))
|
||||
else -> throw IllegalStateException("Unexpected value: $viewType")
|
||||
}
|
||||
return holder
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) {
|
||||
TYPE_LIST -> ListGalleryHolder(CheckableComposeView(parent.context), showFavorite)
|
||||
TYPE_GRID -> GridGalleryHolder(CheckableComposeView(parent.context))
|
||||
else -> error("Unexpected value: $viewType")
|
||||
}
|
||||
|
||||
abstract fun onItemClick(position: Int)
|
||||
abstract fun onItemLongClick(position: Int): Boolean
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return mType
|
||||
}
|
||||
|
||||
@@ -1047,19 +1047,18 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
|
||||
resources: Resources,
|
||||
recyclerView: RecyclerView,
|
||||
type: Int,
|
||||
) : GalleryAdapter(resources, recyclerView, type, true) {
|
||||
) : GalleryAdapter(
|
||||
resources,
|
||||
recyclerView,
|
||||
type,
|
||||
true,
|
||||
{ onItemClick(it) },
|
||||
{ onItemLongClick(it) },
|
||||
) {
|
||||
override fun getItemCount(): Int {
|
||||
return if (null != mHelper) mHelper!!.size() else 0
|
||||
}
|
||||
|
||||
override fun onItemClick(position: Int) {
|
||||
this@GalleryListScene.onItemClick(position)
|
||||
}
|
||||
|
||||
override fun onItemLongClick(position: Int): Boolean {
|
||||
return this@GalleryListScene.onItemLongClick(position)
|
||||
}
|
||||
|
||||
override fun getDataAt(position: Int): GalleryInfo? {
|
||||
return if (null != mHelper) mHelper!!.getDataAtEx(position) else null
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user