Convert footer holder to compose

This commit is contained in:
tarsin committed 2023-03-12 15:05:17 +08:00
1 parent 029d6bf7f6
commit 9e77f104f6
3 files changed
+39 -36

No files matched your search

@@ -1,29 +1,29 @@
package com.hippo.ehviewer.ui.scene
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.fillMaxWidth
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.recyclerview.widget.RecyclerView
import com.hippo.ehviewer.databinding.ItemGalleryPreviewFooterBinding
import com.google.accompanist.themeadapter.material3.Mdc3Theme
class FooterAdapter(private val onClick: () -> Unit) :
RecyclerView.Adapter<FooterAdapter.ViewHolder>() {
var text: String? = null
set(value) {
field = value
notifyItemChanged(0)
}
var text by mutableStateOf("")
inner class ViewHolder(val binding: ItemGalleryPreviewFooterBinding) :
RecyclerView.ViewHolder(binding.root) {
init {
itemView.setOnClickListener { onClick() }
}
}
inner class ViewHolder(val composeView: ComposeView) : RecyclerView.ViewHolder(composeView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemGalleryPreviewFooterBinding.inflate(inflater, parent, false)
return ViewHolder(binding)
return ViewHolder(ComposeView(parent.context))
}
override fun getItemCount(): Int {
@@ -31,6 +31,23 @@ class FooterAdapter(private val onClick: () -> Unit) :
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.binding.text.text = text
holder.composeView.setContent {
Mdc3Theme {
Column {
Box(
contentAlignment = Alignment.Center
) {
Card(
onClick = onClick,
modifier = Modifier
.fillMaxWidth()
.aspectRatio(0.6666667F)
) {}
Text(text)
}
Text("")
}
}
}
}
}
@@ -156,6 +156,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
private var mCurrentFunds: HomeParser.Funds? = null
private var previewsAdapter: GalleryPreviewsAdapter? = null
private var footerAdapter: FooterAdapter? = null
private var headerAdapter: FooterAdapter? = null
@State
private var mState = STATE_INIT
@@ -412,7 +413,8 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
mainActivity!!.startReaderActivity(mGalleryDetail!!, it.position)
}
footerAdapter = FooterAdapter { navigateToPreview(true) }
adapter = ConcatAdapter(previewsAdapter, footerAdapter)
headerAdapter = FooterAdapter { navigateToPreview() }
adapter = ConcatAdapter(headerAdapter, previewsAdapter, footerAdapter)
val columnWidth = Settings.thumbSize
layoutManager = AutoGridLayoutManager(context, columnWidth).apply {
setStrategy(SimpleGridAutoSpanLayout.STRATEGY_SUITABLE_SIZE)
@@ -452,6 +454,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
mViewTransition2 = null
previewsAdapter = null
footerAdapter = null
headerAdapter = null
_binding = null
}
@@ -728,6 +731,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl
private fun bindPreviews(gd: GalleryDetail) {
_binding ?: return
val previewList = gd.previewList
headerAdapter?.text = getString(R.string.more_previews)
if (gd.previewPages <= 0 || previewList.isEmpty()) {
footerAdapter?.text = getString(R.string.no_previews)
return
@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/Widget.Material3.CardView.Outlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:strokeColor="@android:color/transparent">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/text_little_small"
android:gravity="center" />
</com.google.android.material.card.MaterialCardView>