From 54a2ea64bc91751c412f5feec411c50f950892c1 Mon Sep 17 00:00:00 2001 From: tarsin Date: Mon, 10 Jul 2023 08:30:28 +0800 Subject: [PATCH] Cleanup GalleryAdapter, prepare migrate to paging3 --- .../hippo/ehviewer/ui/scene/FavoritesScene.kt | 17 ++--- .../hippo/ehviewer/ui/scene/GalleryAdapter.kt | 74 ++++++++----------- .../ehviewer/ui/scene/GalleryListScene.kt | 17 ++--- 3 files changed, 47 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt index 8dbb94956..e23ff40fa 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt @@ -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) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt index 5d532a9f3..4c63e7e40 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt @@ -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() { - 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 } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt index 6b56eaaf0..87d7f9bb4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt @@ -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 }