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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-