From c561c223d6e03c51779af489e53572ec41e07128 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 12 May 2023 17:33:06 +0800 Subject: [PATCH] Sync galleryListCard margin --- .../hippo/ehviewer/ui/scene/DownloadsScene.kt | 13 +-- .../hippo/ehviewer/ui/scene/GalleryAdapter.kt | 17 +++- .../hippo/ehviewer/ui/scene/HistoryScene.kt | 91 +++++++++++-------- .../ehviewer/ui/widget/GalleryInfoCard.kt | 7 +- .../hippo/ehviewer/ui/widget/LazyColumn.kt | 38 -------- app/src/main/res/layout/item_download.xml | 1 - app/src/main/res/layout/scene_download.xml | 2 + app/src/main/res/values-sw600dp/dimens.xml | 2 - app/src/main/res/values/dimens.xml | 4 +- 9 files changed, 84 insertions(+), 91 deletions(-) delete mode 100644 app/src/main/java/com/hippo/ehviewer/ui/widget/LazyColumn.kt diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 99ea16d9c..f941a3571 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -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) 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 aaa676c25..2cf0fb84c 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,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() diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt index 95edcf6ab..851b9d070 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt @@ -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) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt index d0283c95d..46e4f06ef 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt @@ -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)) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/LazyColumn.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/LazyColumn.kt deleted file mode 100644 index 8bc4ffeaf..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/LazyColumn.kt +++ /dev/null @@ -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, - ) - } -} diff --git a/app/src/main/res/layout/item_download.xml b/app/src/main/res/layout/item_download.xml index 17f057675..a598632ad 100644 --- a/app/src/main/res/layout/item_download.xml +++ b/app/src/main/res/layout/item_download.xml @@ -19,7 +19,6 @@ style="@style/Widget.Material3.CardView.Outlined" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="6dp" android:checkable="true" android:clickable="true" android:focusable="true" diff --git a/app/src/main/res/layout/scene_download.xml b/app/src/main/res/layout/scene_download.xml index d8260c4aa..5b02f35a8 100644 --- a/app/src/main/res/layout/scene_download.xml +++ b/app/src/main/res/layout/scene_download.xml @@ -29,6 +29,8 @@ android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingHorizontal="@dimen/gallery_list_margin_h" + android:paddingVertical="@dimen/gallery_list_margin_v" app:fitsSystemWindowsInsets="bottom" /> 12dp - - 4dp 20dp diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 5b67942a0..fd56e6998 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -36,9 +36,9 @@ 1dp - 0dp + 12dp - 4dp + 12dp 4dp