From 599bb80106b6dbd3f3c540c12f60de92a9dacbce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD-=E7=99=BD?= Date: Wed, 9 Nov 2022 23:09:15 +0800 Subject: [PATCH] Fix toplist page load --- .../ehviewer/ui/scene/GalleryListScene.java | 58 ++++++++++++++++--- .../widget/GalleryInfoContentHelper.kt | 5 ++ 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index 7af8dc886..7f9b8ae2c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -25,6 +25,7 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.text.InputType; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -859,14 +860,47 @@ public final class GalleryListScene extends BaseScene return; } - var datePicker = MaterialDatePicker.Builder.datePicker() - .setTitleText(R.string.go_to) - .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) - .build(); - datePicker.show(requireActivity().getSupportFragmentManager(), "date-picker"); - datePicker.addOnPositiveButtonClickListener(v -> { - mHelper.goTo(v); - }); + if (ListUrlBuilder.MODE_TOPLIST == mUrlBuilder.getMode()) { + final int page = (mHelper.getPageForTop() == 0 ? mHelper.pgCounter : mHelper.getPageForTop()) + 1; + final int pages = 200; + String hint = getString(R.string.go_to_hint, page, pages); + final EditTextDialogBuilder builder = new EditTextDialogBuilder(context, null, hint); + builder.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + final AlertDialog dialog = builder.setTitle(R.string.go_to) + .setPositiveButton(android.R.string.ok, null) + .show(); + dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> { + if (null == mHelper) { + dialog.dismiss(); + return; + } + + String text = builder.getText().trim(); + int goTo; + try { + goTo = Integer.parseInt(text); + } catch (NumberFormatException e) { + builder.setError(getString(R.string.error_invalid_number)); + return; + } + if (goTo <= 0 || goTo > pages) { + builder.setError(getString(R.string.error_out_of_range)); + return; + } + builder.setError(null); + mHelper.goToPage(goTo); + dialog.dismiss(); + }); + } else { + var datePicker = MaterialDatePicker.Builder.datePicker() + .setTitleText(R.string.go_to) + .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) + .build(); + datePicker.show(requireActivity().getSupportFragmentManager(), "date-picker"); + datePicker.addOnPositiveButtonClickListener(v -> { + mHelper.goTo(v); + }); + } } @Override @@ -1702,11 +1736,17 @@ public final class GalleryListScene extends BaseScene } if (page != 0) - mUrlBuilder.setNextGid(minGid); + mUrlBuilder.setNextGid(mIsTopList ? page : minGid); else mUrlBuilder.setNextGid(0); + + if (jumpTo != null && mIsTopList) { + pgCounter = Integer.parseInt(jumpTo) - 1; + mUrlBuilder.setNextGid(pgCounter); + } mUrlBuilder.setJumpTo(jumpTo); jumpTo = null; + if (ListUrlBuilder.MODE_IMAGE_SEARCH == mUrlBuilder.getMode()) { EhRequest request = new EhRequest(); request.setMethod(EhClient.METHOD_IMAGE_SEARCH); diff --git a/app/src/main/java/com/hippo/ehviewer/widget/GalleryInfoContentHelper.kt b/app/src/main/java/com/hippo/ehviewer/widget/GalleryInfoContentHelper.kt index d032d3b97..613fa33b9 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/GalleryInfoContentHelper.kt +++ b/app/src/main/java/com/hippo/ehviewer/widget/GalleryInfoContentHelper.kt @@ -127,6 +127,11 @@ abstract class GalleryInfoContentHelper : ContentHelper() { doRefresh() } + fun goToPage(page: Int) { + jumpTo = page.toString() + doRefresh() + } + companion object { private const val KEY_DATA_MAP = "data_map" private const val KEY_MAX_GID = "max_gid"