diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java
index f851b6a1c..165d5568f 100755
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java
@@ -36,15 +36,14 @@ import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Pair;
-import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
-import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RatingBar;
@@ -59,7 +58,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.widget.PopupMenu;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
@@ -137,7 +135,7 @@ import java.util.List;
import okhttp3.HttpUrl;
import rikka.core.res.ResourcesKt;
-public class GalleryDetailScene extends BaseScene implements View.OnClickListener,
+public class GalleryDetailScene extends ToolbarScene implements View.OnClickListener,
com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener,
View.OnLongClickListener {
@@ -178,8 +176,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
@Nullable
private TextView mCategory;
@Nullable
- private ImageView mOtherActions;
- @Nullable
private ViewGroup mActionGroup;
@Nullable
private TextView mDownload;
@@ -250,8 +246,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
private View mProgress;
@Nullable
private ViewTransition mViewTransition2;
- @Nullable
- private PopupMenu mPopupMenu;
@WholeLifeCircle
private int mDownloadState;
@Nullable
@@ -499,10 +493,62 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
outState.putInt(KEY_REQUEST_ID, mRequestId);
}
+ @Override
+ public int getMenuResId() {
+ return R.menu.scene_gallery_detail;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ setNavigationIcon(R.drawable.v_arrow_left_dark_x24);
+ }
+
+ @Override
+ public void onNavigationClick() {
+ onBackPressed();
+ super.onNavigationClick();
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ int itemId = item.getItemId();
+ if (itemId == R.id.action_open_in_other_app) {
+ String url = getGalleryDetailUrl(false);
+ Activity activity = getMainActivity();
+ if (null != url && null != activity) {
+ UrlOpener.openUrl(activity, url, false);
+ }
+ } else if (itemId == R.id.action_refresh) {
+ if (mState != STATE_REFRESH && mState != STATE_REFRESH_HEADER) {
+ adjustViewVisibility(STATE_REFRESH, true);
+ request();
+ }
+ } else if (itemId == R.id.action_add_tag) {
+ if (mGalleryDetail == null) {
+ return false;
+ }
+ if (mGalleryDetail.apiUid < 0) {
+ showTip(R.string.sign_in_first, LENGTH_LONG);
+ return false;
+ }
+ EditTextDialogBuilder builder = new EditTextDialogBuilder(requireContext(), "", getString(R.string.action_add_tag_tip));
+ builder.setPositiveButton(android.R.string.ok, null);
+ AlertDialog dialog = builder.setTitle(R.string.action_add_tag)
+ .show();
+ dialog.getButton(DialogInterface.BUTTON_POSITIVE)
+ .setOnClickListener(v -> {
+ voteTag(builder.getText().trim(), 1);
+ dialog.dismiss();
+ });
+ }
+ return true;
+ }
+
@Nullable
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
+ public View onCreateViewWithToolbar(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
// Get download state
long gid = getGid();
if (gid != -1) {
@@ -541,14 +587,12 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mTitle = (TextView) ViewUtils.$$(mHeader, R.id.title);
mUploader = (TextView) ViewUtils.$$(mHeader, R.id.uploader);
mCategory = (TextView) ViewUtils.$$(mHeader, R.id.category);
- mOtherActions = (ImageView) ViewUtils.$$(mHeader, R.id.other_actions);
mActionGroup = (ViewGroup) ViewUtils.$$(mHeader, R.id.action_card);
mDownload = (TextView) ViewUtils.$$(mActionGroup, R.id.download);
mRead = (TextView) ViewUtils.$$(mActionGroup, R.id.read);
mUploader.setOnClickListener(this);
mCategory.setOnClickListener(this);
- mOtherActions.setOnClickListener(this);
mDownload.setOnClickListener(this);
mDownload.setOnLongClickListener(this);
mRead.setOnClickListener(this);
@@ -650,7 +694,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mTitle = null;
mUploader = null;
mCategory = null;
- mOtherActions = null;
mActionGroup = null;
mDownload = null;
mRead = null;
@@ -690,8 +733,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mProgress = null;
mViewTransition2 = null;
-
- mPopupMenu = null;
}
private boolean prepareData() {
@@ -1084,51 +1125,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
}
}
- private void ensurePopMenu() {
- if (mPopupMenu != null) {
- return;
- }
-
- Context context = getContext();
- AssertUtils.assertNotNull(context);
- PopupMenu popup = new PopupMenu(context, mOtherActions, Gravity.TOP);
- mPopupMenu = popup;
- popup.getMenuInflater().inflate(R.menu.scene_gallery_detail, popup.getMenu());
- popup.setOnMenuItemClickListener(item -> {
- int itemId = item.getItemId();
- if (itemId == R.id.action_open_in_other_app) {
- String url = getGalleryDetailUrl(false);
- Activity activity = getMainActivity();
- if (null != url && null != activity) {
- UrlOpener.openUrl(activity, url, false);
- }
- } else if (itemId == R.id.action_refresh) {
- if (mState != STATE_REFRESH && mState != STATE_REFRESH_HEADER) {
- adjustViewVisibility(STATE_REFRESH, true);
- request();
- }
- } else if (itemId == R.id.action_add_tag) {
- if (mGalleryDetail == null) {
- return false;
- }
- if (mGalleryDetail.apiUid < 0) {
- showTip(R.string.sign_in_first, LENGTH_LONG);
- return false;
- }
- EditTextDialogBuilder builder = new EditTextDialogBuilder(context, "", getString(R.string.action_add_tag_tip));
- builder.setPositiveButton(android.R.string.ok, null);
- AlertDialog dialog = builder.setTitle(R.string.action_add_tag)
- .show();
- dialog.getButton(DialogInterface.BUTTON_POSITIVE)
- .setOnClickListener(v -> {
- voteTag(builder.getText().trim(), 1);
- dialog.dismiss();
- });
- }
- return true;
- });
- }
-
private void showSimilarGalleryList() {
GalleryDetail gd = mGalleryDetail;
if (null == gd) {
@@ -1203,11 +1199,6 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
if (request()) {
adjustViewVisibility(STATE_REFRESH, true);
}
- } else if (mOtherActions == v) {
- ensurePopMenu();
- if (mPopupMenu != null) {
- mPopupMenu.show();
- }
} else if (mUploader == v) {
String uploader = getUploader();
if (TextUtils.isEmpty(uploader)) {
diff --git a/app/src/main/res/layout/gallery_detail_header.xml b/app/src/main/res/layout/gallery_detail_header.xml
index ff20cfc71..5d179a768 100644
--- a/app/src/main/res/layout/gallery_detail_header.xml
+++ b/app/src/main/res/layout/gallery_detail_header.xml
@@ -44,70 +44,69 @@
android:layout_height="wrap_content"
android:orientation="vertical">
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+