From 923ec7ce5e7fbff9559f84dd10b62c118e23a415 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Fri, 10 Mar 2023 07:40:10 +0800 Subject: [PATCH] Convert previews in GalleryDetailScene to RecyclerView --- .../ehviewer/ui/scene/GalleryDetailScene.kt | 54 ++++++++----------- .../res/layout/gallery_detail_previews.xml | 10 ++-- 2 files changed, 27 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index 1f10daabc..0dbb9dad4 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -16,7 +16,6 @@ package com.hippo.ehviewer.ui.scene import android.Manifest -import android.annotation.SuppressLint import android.app.Activity import android.app.Dialog import android.app.DownloadManager @@ -54,6 +53,7 @@ import com.google.android.material.snackbar.Snackbar import com.hippo.app.BaseDialogBuilder import com.hippo.app.CheckBoxDialogBuilder import com.hippo.app.EditTextDialogBuilder +import com.hippo.easyrecyclerview.MarginItemDecoration import com.hippo.ehviewer.EhApplication import com.hippo.ehviewer.EhApplication.Companion.galleryDetailCache import com.hippo.ehviewer.EhDB @@ -106,8 +106,10 @@ import com.hippo.widget.AutoWrapLayout import com.hippo.widget.LoadImageView import com.hippo.widget.ObservedTextView import com.hippo.widget.SimpleGridAutoSpanLayout +import com.hippo.widget.recyclerview.AutoGridLayoutManager import com.hippo.yorozuya.FileUtils import com.hippo.yorozuya.IntIdGenerator +import com.hippo.yorozuya.LayoutUtils import com.hippo.yorozuya.ViewUtils import com.hippo.yorozuya.collect.IntList import eu.kanade.tachiyomi.ui.reader.ReaderActivity @@ -151,6 +153,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl private var mArchiveFormParamOr: String? = null private var mArchiveList: List? = null private var mCurrentFunds: HomeParser.Funds? = null + private var previewsAdapter: GalleryPreviewsAdapter? = null @State private var mState = STATE_INIT @@ -404,6 +407,22 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } binding.content.previews.previews.setOnClickListener { navigateToPreview() } binding.content.previews.previewText.setOnClickListener { navigateToPreview(true) } + binding.content.previews.recyclerView.run { + previewsAdapter = GalleryPreviewsAdapter { + mainActivity!!.startReaderActivity(mGalleryDetail!!, it.position) + } + adapter = previewsAdapter + val columnWidth = Settings.thumbSize + layoutManager = AutoGridLayoutManager(context, columnWidth).apply { + setStrategy(SimpleGridAutoSpanLayout.STRATEGY_SUITABLE_SIZE) + } + val padding = LayoutUtils.dp2pix(context, 8f) + val decoration = MarginItemDecoration(padding, padding, padding, padding, padding) + addItemDecoration(decoration) + val lp = layoutParams + lp.height = resources.displayMetrics.heightPixels * 6 / 7 + layoutParams = lp + } mViewTransition2 = ViewTransition(binding.content.belowHeader, binding.content.progress) if (prepareData()) { if (mGalleryDetail != null) { @@ -430,6 +449,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl (requireActivity() as MainActivity).mShareUrl = null mViewTransition = null mViewTransition2 = null + previewsAdapter = null _binding = null } @@ -703,13 +723,9 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } } - @SuppressLint("SetTextI18n") private fun bindPreviews(gd: GalleryDetail) { - val inflater = layoutInflater - resourcesOrNull ?: return _binding ?: return binding.content.previews.run { - gridLayout.removeAllViews() val previewList = gd.previewList if (gd.previewPages <= 0 || previewList.isEmpty()) { previewText.setText(R.string.no_previews) @@ -719,23 +735,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } else { previewText.setText(R.string.more_previews) } - val columnWidth = Settings.thumbSize - gridLayout.setColumnSize(columnWidth) - gridLayout.setStrategy(SimpleGridAutoSpanLayout.STRATEGY_SUITABLE_SIZE) - viewLifecycleOwner.lifecycleScope.launchIO { - previewList.forEach { - val view = inflater.inflate(R.layout.item_gallery_preview, gridLayout, false) - val image = view.findViewById(R.id.image) - withUIContext { - gridLayout.addView(view) - image.setTag(R.id.index, it.position) - image.setOnClickListener(this@GalleryDetailScene) - val text = view.findViewById(R.id.text) - text.text = (it.position + 1).toString() - } - it.load(image) - } - } + previewsAdapter?.submitList(previewList) } } @@ -997,7 +997,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } else -> { - var o = v.getTag(R.id.tag) + val o = v.getTag(R.id.tag) if (o is String) { val lub = ListUrlBuilder() lub.mode = ListUrlBuilder.MODE_TAG @@ -1005,14 +1005,6 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl navigate(R.id.galleryListScene, lub.toStartArgs(), true) return } - o = v.getTag(R.id.index) - if (o is Int) { - val intent = Intent(context, ReaderActivity::class.java) - intent.action = ReaderActivity.ACTION_EH - intent.putExtra(ReaderActivity.KEY_GALLERY_INFO, galleryDetail) - intent.putExtra(ReaderActivity.KEY_PAGE, o) - startActivity(intent) - } } } } diff --git a/app/src/main/res/layout/gallery_detail_previews.xml b/app/src/main/res/layout/gallery_detail_previews.xml index 0d9b9abf6..03d36d35d 100644 --- a/app/src/main/res/layout/gallery_detail_previews.xml +++ b/app/src/main/res/layout/gallery_detail_previews.xml @@ -28,16 +28,14 @@ android:showDividers="middle" app:fitsSystemWindowsInsets="bottom"> - + android:layout_height="wrap_content" />