Sync galleryListCard margin

This commit is contained in:
tarsin committed 2023-05-12 17:33:06 +08:00
1 parent ba7d501a6e
commit c561c223d6
9 files changed
+84 -91

No files matched your search

@@ -19,6 +19,7 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.DialogInterface
import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
@@ -51,7 +52,6 @@ import com.hippo.easyrecyclerview.EasyRecyclerView
import com.hippo.easyrecyclerview.EasyRecyclerView.CustomChoiceListener
import com.hippo.easyrecyclerview.FastScroller.OnDragHandlerListener
import com.hippo.easyrecyclerview.HandlerDrawable
import com.hippo.easyrecyclerview.MarginItemDecoration
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
@@ -254,8 +254,7 @@ class DownloadsScene :
mAdapter = DownloadAdapter()
mAdapter!!.setHasStableIds(true)
recyclerView.adapter = mAdapter
val layoutManager =
AutoStaggeredGridLayoutManager(0, StaggeredGridLayoutManager.VERTICAL)
val layoutManager = AutoStaggeredGridLayoutManager(0, StaggeredGridLayoutManager.VERTICAL)
layoutManager.setColumnSize(resources.getDimensionPixelOffset(Settings.detailSizeResId))
layoutManager.setStrategy(STRATEGY_MIN_SIZE)
layoutManager.supportsPredictiveItemAnimations = false
@@ -270,9 +269,11 @@ class DownloadsScene :
itemAnimator.supportsChangeAnimations = false
}
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)
val decoration = MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV)
val decoration = object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.set(0, interval / 2, 0, interval / 2)
}
}
recyclerView.addItemDecoration(decoration)
if (mInitPosition >= 0) {
recyclerView.scrollToPosition(mInitPosition)
@@ -17,10 +17,13 @@ package com.hippo.ehviewer.ui.scene
import android.annotation.SuppressLint
import android.content.res.Resources
import android.graphics.Rect
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.RecyclerView.ItemDecoration
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import com.hippo.easyrecyclerview.MarginItemDecoration
import com.hippo.ehviewer.R
@@ -41,7 +44,7 @@ abstract class GalleryAdapter(
private val mPaddingTopSB: Int =
mResources.getDimensionPixelOffset(R.dimen.gallery_padding_top_search_bar)
private val mShowFavourited: Boolean
private var mListDecoration: MarginItemDecoration? = null
private var mListDecoration: ItemDecoration? = null
private var mGirdDecoration: MarginItemDecoration? = null
private var mType = TYPE_INVALID
@@ -66,7 +69,17 @@ abstract class GalleryAdapter(
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)
mListDecoration = MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV)
mListDecoration = object : ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.set(0, interval / 2, 0, interval / 2)
}
}
recyclerView.setPadding(
recyclerView.paddingLeft + paddingH,
recyclerView.paddingTop + paddingV,
recyclerView.paddingRight + paddingH,
recyclerView.paddingBottom + paddingV,
)
}
recyclerView.addItemDecoration(mListDecoration!!)
notifyDataSetChanged()
@@ -23,10 +23,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ClearAll
import androidx.compose.material.icons.filled.Menu
@@ -48,6 +51,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@@ -74,7 +78,6 @@ import com.hippo.ehviewer.ui.dialog.SelectItemWithIconAdapter
import com.hippo.ehviewer.ui.removeFromFavorites
import com.hippo.ehviewer.ui.widget.Deferred
import com.hippo.ehviewer.ui.widget.GalleryInfoListItem
import com.hippo.ehviewer.ui.widget.LazyColumnWithScrollBar
import com.hippo.ehviewer.ui.widget.rememberDialogState
import com.hippo.ehviewer.ui.widget.setMD3Content
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
@@ -82,6 +85,7 @@ import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.system.pxToDp
import kotlinx.coroutines.delay
import moe.tarsin.coroutines.runSuspendCatching
import my.nanihadesuka.compose.InternalLazyColumnScrollbar
class HistoryScene : BaseScene() {
override fun onCreateView(
@@ -124,46 +128,59 @@ class HistoryScene : BaseScene() {
)
},
) { paddingValues ->
LazyColumnWithScrollBar(
contentPadding = paddingValues,
) {
items(
count = historyData.itemCount,
key = historyData.itemKey(key = { item -> item.gid }),
contentType = historyData.itemContentType(),
) { index ->
val info = historyData[index]
// TODO: item delete & add animation
// Bug tracker: https://issuetracker.google.com/issues/150812265
info?.let {
val dismissState = rememberDismissState(
confirmValueChange = {
if (it == DismissValue.DismissedToStart) {
coroutineScope.launchIO {
EhDB.deleteHistoryInfo(info)
val state = rememberLazyListState()
Box {
LazyColumn(
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.gallery_list_margin_h), vertical = dimensionResource(id = R.dimen.gallery_list_margin_v)),
state = state,
contentPadding = paddingValues,
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.gallery_list_interval)),
) {
items(
count = historyData.itemCount,
key = historyData.itemKey(key = { item -> item.gid }),
contentType = historyData.itemContentType(),
) { index ->
val info = historyData[index]
// TODO: item delete & add animation
// Bug tracker: https://issuetracker.google.com/issues/150812265
info?.let {
val dismissState = rememberDismissState(
confirmValueChange = {
if (it == DismissValue.DismissedToStart) {
coroutineScope.launchIO {
EhDB.deleteHistoryInfo(info)
}
}
}
true
},
)
true
},
)
SwipeToDismiss(
state = dismissState,
background = {},
dismissContent = {
// TODO: item delete & add animation
// Bug tracker: https://issuetracker.google.com/issues/150812265
GalleryInfoListItem(
onClick = ::onItemClick.partially1(it),
onLongClick = ::onItemLongClick.partially1(it),
info = it,
modifier = Modifier.height(cardHeight),
)
},
directions = setOf(DismissDirection.EndToStart),
)
SwipeToDismiss(
state = dismissState,
background = {},
dismissContent = {
// TODO: item delete & add animation
// Bug tracker: https://issuetracker.google.com/issues/150812265
GalleryInfoListItem(
onClick = ::onItemClick.partially1(it),
onLongClick = ::onItemLongClick.partially1(it),
info = it,
modifier = Modifier.height(cardHeight),
)
},
directions = setOf(DismissDirection.EndToStart),
)
}
}
}
Box(modifier = Modifier.padding(paddingValues = paddingValues)) {
InternalLazyColumnScrollbar(
listState = state,
thumbColor = MaterialTheme.colorScheme.primary,
thumbSelectedColor = MaterialTheme.colorScheme.primary,
)
}
}
Deferred({ delay(200) }) {
if (historyData.itemCount == 0) {
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
@@ -45,9 +46,9 @@ fun GalleryInfoListItem(
isInFavScene: Boolean = false,
showPages: Boolean = false,
) {
CrystalCard(modifier = Modifier.padding(6.dp)) {
CrystalCard(modifier = modifier) {
Row(
modifier = modifier.combinedClickable(
modifier = Modifier.combinedClickable(
onClick = onClick,
onLongClick = onLongClick,
),
@@ -55,7 +56,7 @@ fun GalleryInfoListItem(
Card {
EhAsyncCropThumb(
model = info.thumb,
modifier = modifier.aspectRatio(0.6666667F),
modifier = Modifier.aspectRatio(0.6666667F).fillMaxSize(),
)
}
Column(modifier = Modifier.padding(8.dp, 4.dp)) {
@@ -1,38 +0,0 @@
package com.hippo.ehviewer.ui.widget
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import my.nanihadesuka.compose.InternalLazyColumnScrollbar
@Composable
fun LazyColumnWithScrollBar(
modifier: Modifier = Modifier,
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
content: LazyListScope.() -> Unit,
) = Box(
modifier = modifier,
) {
LazyColumn(
modifier = Modifier,
state = state,
contentPadding = contentPadding,
content = content,
)
Box(modifier = Modifier.padding(contentPadding)) {
InternalLazyColumnScrollbar(
listState = state,
thumbColor = MaterialTheme.colorScheme.primary,
thumbSelectedColor = MaterialTheme.colorScheme.primary,
)
}
}