From 691dc18f3bf77dd68bf55c33997801ddd601a04f Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Fri, 3 Mar 2023 20:30:39 +0800 Subject: [PATCH] Refactor GalleryPreviewsScene --- .../ehviewer/ui/scene/GalleryPreviewsScene.kt | 88 +++++-------------- .../java/com/hippo/widget/ContentLayout.java | 4 + 2 files changed, 25 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt index b7b803efb..d36f03bf2 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt @@ -16,9 +16,7 @@ package com.hippo.ehviewer.ui.scene import android.annotation.SuppressLint -import android.app.Dialog import android.content.Context -import android.content.DialogInterface import android.content.Intent import android.os.Bundle import android.util.Pair @@ -26,10 +24,7 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.widget.TextView -import androidx.appcompat.app.AlertDialog import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.slider.Slider import com.hippo.app.BaseDialogBuilder import com.hippo.easyrecyclerview.MarginItemDecoration import com.hippo.ehviewer.R @@ -40,13 +35,13 @@ import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.data.GalleryDetail import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.client.exception.EhException +import com.hippo.ehviewer.databinding.DialogGoToBinding +import com.hippo.ehviewer.databinding.ItemGalleryPreviewBinding import com.hippo.ehviewer.databinding.SceneGalleryPreviewsBinding import com.hippo.util.getParcelableCompat import com.hippo.widget.ContentLayout.ContentHelper -import com.hippo.widget.LoadImageView import com.hippo.widget.recyclerview.AutoGridLayoutManager import com.hippo.yorozuya.LayoutUtils -import com.hippo.yorozuya.ViewUtils import eu.kanade.tachiyomi.ui.reader.ReaderActivity import java.util.Locale @@ -161,13 +156,7 @@ class GalleryPreviewsScene : BaseToolbarScene() { } val pages = mHelper!!.pages if (pages > 1 && mHelper!!.canGoTo()) { - val helper = GoToDialogHelper(pages, mHelper!!.pageForTop) - val dialog = BaseDialogBuilder(context).setTitle(R.string.go_to) - .setView(R.layout.dialog_go_to) - .setPositiveButton(android.R.string.ok, null) - .create() - dialog.show() - helper.setDialog(dialog) + showGoToDialog(context, pages, mHelper!!.pageForBottom) } return true } @@ -201,15 +190,8 @@ class GalleryPreviewsScene : BaseToolbarScene() { } } - private class GalleryPreviewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - var image: LoadImageView - var text: TextView - - init { - image = itemView.findViewById(R.id.image) - text = itemView.findViewById(R.id.text) - } - } + private class GalleryPreviewHolder(val binding: ItemGalleryPreviewBinding) : + RecyclerView.ViewHolder(binding.root) private inner class GetPreviewListListener( context: Context, @@ -232,13 +214,7 @@ class GalleryPreviewsScene : BaseToolbarScene() { private val mInflater: LayoutInflater = layoutInflater override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GalleryPreviewHolder { - return GalleryPreviewHolder( - mInflater.inflate( - R.layout.item_gallery_preview, - parent, - false - ) - ) + return GalleryPreviewHolder(ItemGalleryPreviewBinding.inflate(mInflater, parent, false)) } @SuppressLint("SetTextI18n") @@ -246,8 +222,8 @@ class GalleryPreviewsScene : BaseToolbarScene() { if (null != mHelper) { val preview = mHelper!!.getDataAtEx(position) if (preview != null) { - preview.load(holder.image) - holder.text.text = (preview.position + 1).toString() + preview.load(holder.binding.image) + holder.binding.text.text = (preview.position + 1).toString() } } holder.itemView.setOnClickListener { onItemClick(position) } @@ -302,43 +278,21 @@ class GalleryPreviewsScene : BaseToolbarScene() { } } - private inner class GoToDialogHelper(private val mPages: Int, private val mCurrentPage: Int) : - View.OnClickListener, DialogInterface.OnDismissListener { - private var mSlider: Slider? = null - private var mDialog: Dialog? = null - fun setDialog(dialog: AlertDialog) { - mDialog = dialog - (ViewUtils.`$$`(dialog, R.id.start) as TextView).text = - String.format(Locale.US, "%d", 1) - (ViewUtils.`$$`(dialog, R.id.end) as TextView).text = - String.format(Locale.US, "%d", mPages) - mSlider = ViewUtils.`$$`(dialog, R.id.slider) as Slider - mSlider!!.valueTo = mPages.toFloat() - mSlider!!.value = (mCurrentPage + 1).toFloat() - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(this) - dialog.setOnDismissListener(this) - } - - override fun onClick(v: View) { - if (null == mSlider) { - return - } - val page = (mSlider!!.value - 1).toInt() - if (page in 0 until mPages && mHelper != null) { + private fun showGoToDialog(context: Context, pages: Int, currentPage: Int) { + val dialogBinding = DialogGoToBinding.inflate(layoutInflater) + dialogBinding.start.text = String.format(Locale.US, "%d", 1) + dialogBinding.end.text = String.format(Locale.US, "%d", pages) + dialogBinding.slider.valueTo = pages.toFloat() + dialogBinding.slider.value = (currentPage + 1).toFloat() + val dialog = BaseDialogBuilder(context) + .setTitle(R.string.go_to) + .setView(dialogBinding.root) + .setPositiveButton(android.R.string.ok) { _, _ -> + val page = (dialogBinding.slider.value - 1).toInt() mHelper!!.goTo(page) - if (mDialog != null) { - mDialog!!.dismiss() - mDialog = null - } - } else { - showTip(R.string.error_out_of_range, LENGTH_LONG) } - } - - override fun onDismiss(dialog: DialogInterface) { - mDialog = null - mSlider = null - } + .create() + dialog.show() } companion object { diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 722d232f6..f22f0e241 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -735,6 +735,10 @@ public class ContentLayout extends FrameLayout { return getPageForPosition(LayoutManagerUtils.getFirstVisibleItemPosition(mRecyclerView.getLayoutManager())); } + public int getPageForBottom() { + return getPageForPosition(LayoutManagerUtils.getLastVisibleItemPosition(mRecyclerView.getLayoutManager())); + } + public boolean canGoTo() { return isContentShowing(); }