From be1d80de0f5fca174fa7063f55cc7016583dbb95 Mon Sep 17 00:00:00 2001 From: tarsin Date: Mon, 10 Apr 2023 17:11:55 +0800 Subject: [PATCH] Convert GalleryPreviewsAdapter holder to compose --- .../ehviewer/ui/scene/BaseListAdapter.kt | 12 ---- .../hippo/ehviewer/ui/scene/BaseViewHolder.kt | 17 ----- .../ui/scene/GalleryPreviewsAdapter.kt | 65 +++++++++++++------ .../hippo/ehviewer/ui/widget/EhAsyncThumb.kt | 2 +- .../main/res/layout/item_gallery_preview.xml | 44 ------------- 5 files changed, 46 insertions(+), 94 deletions(-) delete mode 100644 app/src/main/java/com/hippo/ehviewer/ui/scene/BaseListAdapter.kt delete mode 100644 app/src/main/java/com/hippo/ehviewer/ui/scene/BaseViewHolder.kt delete mode 100644 app/src/main/res/layout/item_gallery_preview.xml diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseListAdapter.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseListAdapter.kt deleted file mode 100644 index ecac9a91b..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseListAdapter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.hippo.ehviewer.ui.scene - -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter - -abstract class BaseListAdapter(diffCallback: DiffUtil.ItemCallback) : - ListAdapter>(diffCallback) { - override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { - val item = getItem(position) - holder.bind(item) - } -} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseViewHolder.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseViewHolder.kt deleted file mode 100644 index d8b9461e6..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseViewHolder.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.hippo.ehviewer.ui.scene - -import androidx.recyclerview.widget.RecyclerView -import androidx.viewbinding.ViewBinding - -abstract class BaseViewHolder(binding: ViewBinding, onClick: (T) -> Unit) : - RecyclerView.ViewHolder(binding.root) { - protected var currentItem: T? = null - - init { - itemView.setOnClickListener { - currentItem?.let { onClick(it) } - } - } - - abstract fun bind(item: T) -} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt index 6c9634b78..b384d111b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt @@ -1,33 +1,58 @@ package com.hippo.ehviewer.ui.scene -import android.annotation.SuppressLint -import android.view.LayoutInflater import android.view.ViewGroup +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Text +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.ComposeView import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import arrow.core.partially1 +import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.hippo.ehviewer.client.data.GalleryPreview -import com.hippo.ehviewer.databinding.ItemGalleryPreviewBinding +import com.hippo.ehviewer.ui.widget.CrystalCard +import com.hippo.ehviewer.ui.widget.EhAsyncPreview -class GalleryPreviewsAdapter(private val onClick: (GalleryPreview) -> Unit) : - BaseListAdapter(PreviewDiffCallback) { - class GalleryPreviewHolder( - private val binding: ItemGalleryPreviewBinding, - onClick: (GalleryPreview) -> Unit, - ) : BaseViewHolder(binding, onClick) { - @SuppressLint("SetTextI18n") - override fun bind(item: GalleryPreview) { - currentItem = item - item.load(binding.image) - binding.text.text = (item.position + 1).toString() - } - } +class GalleryPreviewsAdapter(private val onClick: (GalleryPreview) -> Unit) : ListAdapter(PreviewDiffCallback) { + class ComposeHolder(val composeView: ComposeView) : RecyclerView.ViewHolder(composeView) override fun onCreateViewHolder( parent: ViewGroup, viewType: Int, - ): BaseViewHolder { - val inflater = LayoutInflater.from(parent.context) - val binding = ItemGalleryPreviewBinding.inflate(inflater, parent, false) - return GalleryPreviewHolder(binding, onClick) + ): ComposeHolder { + return ComposeHolder(ComposeView(parent.context)) + } + + override fun onBindViewHolder(holder: ComposeHolder, position: Int) { + val it = getItem(position) + holder.composeView.setContent { + Mdc3Theme { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Box(contentAlignment = Alignment.Center) { + CrystalCard( + onClick = onClick.partially1(it), + modifier = Modifier + .fillMaxWidth() + .aspectRatio(0.6666667F), + ) { + EhAsyncPreview( + model = it, + modifier = Modifier.fillMaxSize(), + ) + } + } + Text((it.position + 1).toString()) + } + } + } } override fun getItemId(position: Int): Long { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt index 91fc8c441..09a52427f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt @@ -61,7 +61,7 @@ fun EhAsyncPreview( painter = BitmapPainter( (it.result.drawable as BitmapDrawable).bitmap.asImageBitmap(), IntOffset(offsetX, offsetY), - IntSize(clipWidth, clipHeight - 1), + IntSize(clipWidth - 1, clipHeight - 1), ), ) } else { diff --git a/app/src/main/res/layout/item_gallery_preview.xml b/app/src/main/res/layout/item_gallery_preview.xml deleted file mode 100644 index db0a10a4a..000000000 --- a/app/src/main/res/layout/item_gallery_preview.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - -