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 1d5a8005c..ea847453a 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 @@ -822,16 +822,16 @@ class FavoritesScene : resources: Resources, recyclerView: RecyclerView, type: Int, - ) : GalleryAdapter(inflater, resources, recyclerView, type, false) { + ) : GalleryAdapter(resources, recyclerView, type, false) { override fun getItemCount(): Int { return if (null != mHelper) mHelper!!.size() else 0 } - override fun onItemClick(view: View, position: Int) { + override fun onItemClick(position: Int) { this@FavoritesScene.onItemClick(position) } - override fun onItemLongClick(view: View, position: Int): Boolean { + override fun onItemLongClick(position: Int): Boolean { return this@FavoritesScene.onItemLongClick(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 2343b0749..27a4cfa3d 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 @@ -17,24 +17,20 @@ package com.hippo.ehviewer.ui.scene import android.annotation.SuppressLint import android.content.res.Resources -import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.annotation.IntDef +import androidx.compose.ui.platform.ComposeView import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.hippo.easyrecyclerview.MarginItemDecoration import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.databinding.ItemGalleryGridBinding -import com.hippo.ehviewer.databinding.ItemGalleryListBinding import com.hippo.widget.recyclerview.AutoStaggeredGridLayoutManager import com.hippo.widget.recyclerview.STRATEGY_MIN_SIZE import com.hippo.widget.recyclerview.STRATEGY_SUITABLE_SIZE -internal abstract class GalleryAdapter( - private val mInflater: LayoutInflater, +abstract class GalleryAdapter( private val mResources: Resources, private val mRecyclerView: RecyclerView, type: Int, @@ -125,24 +121,17 @@ internal abstract class GalleryAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GalleryHolder { val holder = when (viewType) { TYPE_LIST -> ListGalleryHolder( - ItemGalleryListBinding.inflate(mInflater, parent, false), + ComposeView(parent.context), mShowFavourited, ) - - TYPE_GRID -> GridGalleryHolder(ItemGalleryGridBinding.inflate(mInflater, parent, false)) + TYPE_GRID -> GridGalleryHolder(ComposeView(parent.context)) else -> throw IllegalStateException("Unexpected value: $viewType") } - holder.itemView.setOnClickListener { - onItemClick(holder.itemView, holder.bindingAdapterPosition) - } - holder.itemView.setOnLongClickListener { - onItemLongClick(holder.itemView, holder.bindingAdapterPosition) - } return holder } - abstract fun onItemClick(view: View, position: Int) - abstract fun onItemLongClick(view: View, position: Int): Boolean + abstract fun onItemClick(position: Int) + abstract fun onItemLongClick(position: Int): Boolean override fun getItemViewType(position: Int): Int { return mType } @@ -151,7 +140,11 @@ internal abstract class GalleryAdapter( override fun onBindViewHolder(holder: GalleryHolder, position: Int) { val gi = getDataAt(position) ?: return - holder.bind(gi) + holder.bind( + gi, + { onItemClick(position) }, + { onItemLongClick(position) }, + ) } @IntDef(TYPE_LIST, TYPE_GRID) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt index f17c84623..d4dc076d9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt @@ -15,107 +15,68 @@ */ package com.hippo.ehviewer.ui.scene -import android.annotation.SuppressLint -import android.text.TextUtils -import android.view.View +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.material3.Card +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ElevatedCard import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.unit.dp import androidx.recyclerview.widget.RecyclerView -import androidx.viewbinding.ViewBinding -import com.hippo.drawable.TriangleDrawable import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.databinding.ItemGalleryGridBinding -import com.hippo.ehviewer.databinding.ItemGalleryListBinding -import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ui.widget.EhAsyncThumb +import com.hippo.ehviewer.ui.widget.ListInfoCard import com.hippo.ehviewer.ui.widget.setMD3Content import eu.kanade.tachiyomi.util.system.pxToDp -internal abstract class GalleryHolder(binding: ViewBinding) : - RecyclerView.ViewHolder(binding.root) { - abstract fun bind(galleryInfo: GalleryInfo) +abstract class GalleryHolder(composeView: ComposeView) : RecyclerView.ViewHolder(composeView) { + abstract fun bind( + galleryInfo: GalleryInfo, + onClick: () -> Unit, + onLongClick: () -> Unit, + ) } -internal class ListGalleryHolder( - private val binding: ItemGalleryListBinding, +class ListGalleryHolder( + private val composeView: ComposeView, private val showFavourited: Boolean, -) : GalleryHolder(binding) { +) : GalleryHolder(composeView) { private val height = (Settings.listThumbSize * 3).pxToDp.dp - @SuppressLint("SetTextI18n") - override fun bind(galleryInfo: GalleryInfo) { - binding.run { - thumb.setMD3Content { - Card { - EhAsyncThumb( - model = galleryInfo.thumb, - contentScale = ContentScale.Crop, - modifier = Modifier - .height(height) - .aspectRatio(0.6666667F), - ) - } - } - title.text = EhUtils.getSuitableTitle(galleryInfo) - uploader.text = galleryInfo.uploader - uploader.alpha = if (galleryInfo.disowned) .5f else 1f - rating.rating = galleryInfo.rating - val newCategoryText = EhUtils.getCategory(galleryInfo.category) - if (newCategoryText != category.text.toString()) { - category.text = newCategoryText - category.setBackgroundColor(EhUtils.getCategoryColor(galleryInfo.category)) - } - posted.text = galleryInfo.posted - if (galleryInfo.pages == 0 || !Settings.showGalleryPages) { - pages.text = null - pages.visibility = View.GONE - } else { - pages.text = "${galleryInfo.pages}P" - pages.visibility = View.VISIBLE - } - if (TextUtils.isEmpty(galleryInfo.simpleLanguage)) { - simpleLanguage.text = null - simpleLanguage.visibility = View.GONE - } else { - simpleLanguage.text = galleryInfo.simpleLanguage - simpleLanguage.visibility = View.VISIBLE - } - favourited.visibility = - if (showFavourited && galleryInfo.favoriteSlot >= -1 && galleryInfo.favoriteSlot <= 10) View.VISIBLE else View.GONE - downloaded.visibility = - if (DownloadManager.containDownloadInfo(galleryInfo.gid)) View.VISIBLE else View.GONE + override fun bind(galleryInfo: GalleryInfo, onClick: () -> Unit, onLongClick: () -> Unit) { + composeView.setMD3Content { + ListInfoCard( + onClick = onClick, + onLongClick = onLongClick, + info = galleryInfo, + modifier = Modifier.height(height), + ) } } } -internal class GridGalleryHolder(private val binding: ItemGalleryGridBinding) : - GalleryHolder(binding) { - override fun bind(galleryInfo: GalleryInfo) { - binding.run { - val aspect = (galleryInfo.thumbWidth.toFloat() / galleryInfo.thumbHeight).coerceIn(0.33F, 1.5F) - thumb.setMD3Content { +class GridGalleryHolder(private val composeView: ComposeView) : GalleryHolder(composeView) { + override fun bind(galleryInfo: GalleryInfo, onClick: () -> Unit, onLongClick: () -> Unit) { + val aspect = (galleryInfo.thumbWidth.toFloat() / galleryInfo.thumbHeight).coerceIn(0.33F, 1.5F) + val color = EhUtils.getCategoryColor(galleryInfo.category) + val simpleLang = galleryInfo.simpleLanguage + composeView.setMD3Content { + ElevatedCard(modifier = Modifier.padding(2.dp)) { EhAsyncThumb( model = galleryInfo.thumb, - modifier = Modifier.aspectRatio(aspect), + modifier = Modifier.aspectRatio(aspect).fillMaxWidth().combinedClickable( + onClick = onClick, + onLongClick = onLongClick, + ), contentScale = ContentScale.Crop, ) } - var drawable = category.background - val color = EhUtils.getCategoryColor(galleryInfo.category) - if (drawable !is TriangleDrawable) { - drawable = TriangleDrawable(color) - category.background = drawable - } else { - drawable.setColor(color) - } - simpleLanguage.text = galleryInfo.simpleLanguage } } } 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 2905b4842..d8232cb8b 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 @@ -1257,16 +1257,16 @@ class GalleryListScene : resources: Resources, recyclerView: RecyclerView, type: Int, - ) : GalleryAdapter(inflater, resources, recyclerView, type, true) { + ) : GalleryAdapter(resources, recyclerView, type, true) { override fun getItemCount(): Int { return if (null != mHelper) mHelper!!.size() else 0 } - override fun onItemClick(view: View, position: Int) { + override fun onItemClick(position: Int) { this@GalleryListScene.onItemClick(position) } - override fun onItemLongClick(view: View, position: Int): Boolean { + override fun onItemLongClick(position: Int): Boolean { return this@GalleryListScene.onItemLongClick(position) } diff --git a/app/src/main/res/layout/item_gallery_grid.xml b/app/src/main/res/layout/item_gallery_grid.xml deleted file mode 100644 index ebec57487..000000000 --- a/app/src/main/res/layout/item_gallery_grid.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/item_gallery_list.xml b/app/src/main/res/layout/item_gallery_list.xml deleted file mode 100644 index b3a72077c..000000000 --- a/app/src/main/res/layout/item_gallery_list.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -