diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index b910394ba..2f520bd2f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -582,17 +582,16 @@ public class FavoritesScene extends SearchBarScene implements if (!mRecyclerView.isInCustomChoice()) { switch (position) { - case 0: // Open right - openDrawer(Gravity.RIGHT); - break; - case 1: // Go to - if (mHelper.canGoTo()) { - showGoToDialog(); - } - break; - case 2: // Refresh - mHelper.refresh(); - break; + // Open right + case 0 -> openDrawer(Gravity.RIGHT); + // Go to + case 1 -> { + if (mHelper.canGoTo()) showGoToDialog(); + } + // Refresh + case 2 -> mHelper.refresh(); + // Last page + case 3 -> mHelper.goToPage(Integer.MAX_VALUE - 1); } view.setExpanded(false); return; @@ -1141,7 +1140,10 @@ public class FavoritesScene extends SearchBarScene implements SimpleHandler.getInstance().post(() -> onGetFavoritesLocal(keyword, taskId)); } else { String prev = null, next = null; - if (jumpTo != null) { + if (page == Integer.MAX_VALUE - 1) { + prev = "1-0"; + jumpTo = null; + } else if (jumpTo != null) { next = Integer.toString(minGid); operation = 0; } else if (page != 0 && mHelper != null) { 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 7f0b9a26b..f7ace766b 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 @@ -150,7 +150,7 @@ public final class GalleryListScene extends SearchBarScene private EasyRecyclerView mRecyclerView; @Nullable private SearchLayout mSearchLayout; - ActivityResultLauncher selectImageLauncher = registerForActivityResult( + final ActivityResultLauncher selectImageLauncher = registerForActivityResult( new ActivityResultContracts.PickVisualMedia(), result -> mSearchLayout.setImageUri(result)); @Nullable @@ -474,23 +474,27 @@ public final class GalleryListScene extends SearchBarScene String keyword = builder.getKeyword(); int category = builder.getCategory(); - boolean isTopList = builder.getMode() == ListUrlBuilder.MODE_TOPLIST; + var mode = builder.getMode(); + boolean isPopular = mode == ListUrlBuilder.MODE_WHATS_HOT; + boolean isTopList = mode == ListUrlBuilder.MODE_TOPLIST; if (isTopList != mIsTopList) { mIsTopList = isTopList; recreateDrawerView(); mFabLayout.getSecondaryFabAt(0).setImageResource(isTopList ? R.drawable.ic_baseline_format_list_numbered_24 : R.drawable.v_magnify_x24); } - mFabLayout.setSecondaryFabVisibilityAt(1, ListUrlBuilder.MODE_WHATS_HOT != builder.getMode()); + // Update fab visibility + mFabLayout.setSecondaryFabVisibilityAt(1, !isPopular); + mFabLayout.setSecondaryFabVisibilityAt(3, !isTopList && !isPopular); // Update normal search mode - mSearchLayout.setNormalSearchMode(builder.getMode() == ListUrlBuilder.MODE_SUBSCRIPTION + mSearchLayout.setNormalSearchMode(mode == ListUrlBuilder.MODE_SUBSCRIPTION ? R.id.search_subscription_search : R.id.search_normal_search); // Update search edit text if (!TextUtils.isEmpty(keyword) && !mIsTopList) { - if (builder.getMode() == ListUrlBuilder.MODE_TAG) { + if (mode == ListUrlBuilder.MODE_TAG) { keyword = wrapTagKeyword(keyword); } setSearchBarText(keyword); @@ -505,19 +509,16 @@ public final class GalleryListScene extends SearchBarScene // Update nav checked item int checkedItemId; - if (ListUrlBuilder.MODE_NORMAL == builder.getMode() && - EhUtils.NONE == category && - TextUtils.isEmpty(keyword)) { - checkedItemId = R.id.nav_homepage; - } else if (ListUrlBuilder.MODE_SUBSCRIPTION == builder.getMode()) { - checkedItemId = R.id.nav_subscription; - } else if (ListUrlBuilder.MODE_WHATS_HOT == builder.getMode()) { - checkedItemId = R.id.nav_whats_hot; - } else if (ListUrlBuilder.MODE_TOPLIST == builder.getMode()) { - checkedItemId = R.id.nav_toplist; - } else { - checkedItemId = 0; - } + checkedItemId = switch (mode) { + case ListUrlBuilder.MODE_NORMAL -> + EhUtils.NONE == category && TextUtils.isEmpty(keyword) ? R.id.nav_homepage : 0; + case ListUrlBuilder.MODE_SUBSCRIPTION -> R.id.nav_subscription; + case ListUrlBuilder.MODE_WHATS_HOT -> R.id.nav_whats_hot; + case ListUrlBuilder.MODE_TOPLIST -> R.id.nav_toplist; + case ListUrlBuilder.MODE_TAG, ListUrlBuilder.MODE_UPLOADER, ListUrlBuilder.MODE_IMAGE_SEARCH -> + 0; + default -> throw new IllegalStateException("Unexpected value: " + mode); + }; setNavCheckedItem(checkedItemId); mNavCheckedId = checkedItemId; } @@ -797,14 +798,14 @@ public final class GalleryListScene extends SearchBarScene } } - public boolean onItemClick(int position) { + public void onItemClick(int position) { if (null == mHelper || null == mRecyclerView) { - return false; + return; } GalleryInfo gi = mHelper.getDataAtEx(position); if (gi == null) { - return true; + return; } Bundle args = new Bundle(); @@ -812,7 +813,6 @@ public final class GalleryListScene extends SearchBarScene args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi); Announcer announcer = new Announcer(GalleryDetailScene.class).setArgs(args); startScene(announcer); - return true; } @Override @@ -890,17 +890,16 @@ public final class GalleryListScene extends SearchBarScene } switch (position) { - case 0: // Open right - openDrawer(Gravity.RIGHT); - break; - case 1: // Go to - if (mHelper.canGoTo()) { - showGoToDialog(); - } - break; - case 2: // Refresh - mHelper.refresh(); - break; + // Open right + case 0 -> openDrawer(Gravity.RIGHT); + // Go to + case 1 -> { + if (mHelper.canGoTo()) showGoToDialog(); + } + // Refresh + case 2 -> mHelper.refresh(); + // Last page + case 3 -> mHelper.goToPage(Integer.MAX_VALUE - 1); } view.setExpanded(false); @@ -1607,6 +1606,9 @@ public final class GalleryListScene extends SearchBarScene } else { nextGid = page; } + } else if (page == Integer.MAX_VALUE - 1) { + prevGid = 1; + jumpTo = null; } else if (jumpTo != null) { nextGid = minGid; } else if (page != 0) { diff --git a/app/src/main/res/drawable/v_last_page_x24.xml b/app/src/main/res/drawable/v_last_page_x24.xml new file mode 100644 index 000000000..928ea25e6 --- /dev/null +++ b/app/src/main/res/drawable/v_last_page_x24.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/app/src/main/res/layout/scene_favorites.xml b/app/src/main/res/layout/scene_favorites.xml index a761fa178..faabb0b4b 100644 --- a/app/src/main/res/layout/scene_favorites.xml +++ b/app/src/main/res/layout/scene_favorites.xml @@ -32,7 +32,7 @@ android:id="@+id/fab_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingRight="@dimen/corner_fab_margin" + android:paddingEnd="@dimen/corner_fab_margin" android:paddingBottom="@dimen/corner_fab_margin" app:fitsSystemWindowsInsets="top|bottom"> @@ -54,6 +54,12 @@ android:layout_height="wrap_content" app:srcCompat="@drawable/v_refresh_dark_x24" /> + + @@ -62,6 +62,12 @@ android:layout_height="wrap_content" app:srcCompat="@drawable/v_refresh_dark_x24" /> + +