diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java index ab25d311..58661015 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java @@ -75,6 +75,7 @@ public class ThreadPresenter implements ChanThreadLoader.ChanLoaderCallback, Pos private static final int POST_OPTION_HIDE = 12; private static final int POST_OPTION_OPEN_BROWSER = 13; private static final int POST_OPTION_FILTER_TRIPCODE = 14; + private static final int POST_OPTION_EXTRA = 15; private ThreadPresenterCallback threadPresenterCallback; private WatchManager watchManager; @@ -442,7 +443,8 @@ public class ThreadPresenter implements ChanThreadLoader.ChanLoaderCallback, Pos } @Override - public void onPopulatePostOptions(Post post, List menu) { + public Object onPopulatePostOptions(Post post, List menu, + List extraMenu) { if (!loadable.isThreadMode()) { menu.add(new FloatingMenuItem(POST_OPTION_PIN, R.string.action_pin)); } else { @@ -450,20 +452,14 @@ public class ThreadPresenter implements ChanThreadLoader.ChanLoaderCallback, Pos menu.add(new FloatingMenuItem(POST_OPTION_QUOTE_TEXT, R.string.post_quote_text)); } - menu.add(new FloatingMenuItem(POST_OPTION_INFO, R.string.post_info)); - menu.add(new FloatingMenuItem(POST_OPTION_LINKS, R.string.post_show_links)); - menu.add(new FloatingMenuItem(POST_OPTION_OPEN_BROWSER, R.string.action_open_browser)); - menu.add(new FloatingMenuItem(POST_OPTION_SHARE, R.string.post_share)); - menu.add(new FloatingMenuItem(POST_OPTION_COPY_TEXT, R.string.post_copy_text)); + if (!loadable.isThreadMode()) { + menu.add(new FloatingMenuItem(POST_OPTION_HIDE, R.string.post_hide)); + } if (loadable.getSite().feature(Site.Feature.POST_REPORT)) { menu.add(new FloatingMenuItem(POST_OPTION_REPORT, R.string.post_report)); } - if (!loadable.isThreadMode()) { - menu.add(new FloatingMenuItem(POST_OPTION_HIDE, R.string.post_hide)); - } - if (loadable.isThreadMode()) { if (!TextUtils.isEmpty(post.id)) { menu.add(new FloatingMenuItem(POST_OPTION_HIGHLIGHT_ID, R.string.post_highlight_id)); @@ -480,9 +476,19 @@ public class ThreadPresenter implements ChanThreadLoader.ChanLoaderCallback, Pos menu.add(new FloatingMenuItem(POST_OPTION_DELETE, R.string.delete)); } + menu.add(new FloatingMenuItem(POST_OPTION_EXTRA, R.string.post_more)); + + extraMenu.add(new FloatingMenuItem(POST_OPTION_INFO, R.string.post_info)); + extraMenu.add(new FloatingMenuItem(POST_OPTION_LINKS, R.string.post_show_links)); + extraMenu.add(new FloatingMenuItem(POST_OPTION_OPEN_BROWSER, R.string.action_open_browser)); + extraMenu.add(new FloatingMenuItem(POST_OPTION_SHARE, R.string.post_share)); + extraMenu.add(new FloatingMenuItem(POST_OPTION_COPY_TEXT, R.string.post_copy_text)); + if (ChanSettings.developer.get()) { - menu.add(new FloatingMenuItem(POST_OPTION_SAVE, "Save")); + extraMenu.add(new FloatingMenuItem(POST_OPTION_SAVE, "Save")); } + + return POST_OPTION_EXTRA; } public void onPostOptionClicked(Post post, Object id) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java index 93a03f7d..451118be 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java @@ -97,22 +97,31 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On options.setOnClickListener(v -> { List items = new ArrayList<>(); + List extraItems = new ArrayList<>(); + Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); + showOptions(v, items, extraItems, extraOption); + }); + } - callback.onPopulatePostOptions(post, items); - - FloatingMenu menu = new FloatingMenu(getContext(), v, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - callback.onPostOptionClicked(post, item.getId()); + private void showOptions(View anchor, List items, + List extraItems, + Object extraOption) { + FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); + menu.setCallback(new FloatingMenu.FloatingMenuCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + if (item.getId() == extraOption) { + showOptions(anchor, extraItems, null, null); } - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); + callback.onPostOptionClicked(post, item.getId()); + } + + @Override + public void onFloatingMenuDismissed(FloatingMenu menu) { + } }); + menu.show(); } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java index 2ad9b6b4..9d5d93cd 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java @@ -200,30 +200,39 @@ public class PostCell extends LinearLayout implements PostCellInterface { }); options.setOnClickListener(v -> { - if (ThemeHelper.getInstance().getTheme().isLightTheme) { - options.setImageResource(R.drawable.ic_overflow_black); - } - List items = new ArrayList<>(); + List extraItems = new ArrayList<>(); + Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); + showOptions(v, items, extraItems, extraOption); + }); - callback.onPopulatePostOptions(post, items); + setOnClickListener(selfClicked); + } - FloatingMenu menu = new FloatingMenu(getContext(), v, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - callback.onPostOptionClicked(post, item.getId()); - } + private void showOptions(View anchor, List items, + List extraItems, + Object extraOption) { + if (ThemeHelper.getInstance().getTheme().isLightTheme) { + options.setImageResource(R.drawable.ic_overflow_black); + } - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - options.setImageResource(R.drawable.ic_overflow); + FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); + menu.setCallback(new FloatingMenu.FloatingMenuCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + if (item.getId() == extraOption) { + showOptions(anchor, extraItems, null, null); } - }); - menu.show(); - }); - setOnClickListener(selfClicked); + callback.onPostOptionClicked(post, item.getId()); + } + + @Override + public void onFloatingMenuDismissed(FloatingMenu menu) { + options.setImageResource(R.drawable.ic_overflow); + } + }); + menu.show(); } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java index 6721e6f1..e1ad8b09 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java @@ -53,7 +53,8 @@ public interface PostCellInterface { void onShowPostReplies(Post post); - void onPopulatePostOptions(Post post, List menu); + Object onPopulatePostOptions(Post post, List menu, + List extraMenu); void onPostOptionClicked(Post post, Object id); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java index 690698a0..06e35990 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java @@ -91,27 +91,33 @@ public class PostStubCell extends RelativeLayout implements PostCellInterface, V setOnClickListener(this); - options.setOnClickListener(new OnClickListener() { + options.setOnClickListener(v -> { + List items = new ArrayList<>(); + List extraItems = new ArrayList<>(); + Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); + showOptions(v, items, extraItems, extraOption); + }); + } + + private void showOptions(View anchor, List items, + List extraItems, + Object extraOption) { + FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); + menu.setCallback(new FloatingMenu.FloatingMenuCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + if (item.getId() == extraOption) { + showOptions(anchor, extraItems, null, null); + } + + callback.onPostOptionClicked(post, item.getId()); + } + @Override - public void onClick(View v) { - List items = new ArrayList<>(); - - callback.onPopulatePostOptions(post, items); - - FloatingMenu menu = new FloatingMenu(getContext(), v, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - callback.onPostOptionClicked(post, item.getId()); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); + public void onFloatingMenuDismissed(FloatingMenu menu) { } }); + menu.show(); } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java index dbd7be71..24352476 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java @@ -126,12 +126,12 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte if (!ChanSettings.enableReplyFab.get()) { items.add(new FloatingMenuItem(REPLY_ID, R.string.action_reply)); } - items.add(new FloatingMenuItem(SHARE_ID, R.string.action_share)); viewModeMenuItem = new FloatingMenuItem(VIEW_MODE_ID, postViewMode == ChanSettings.PostViewMode.LIST ? R.string.action_switch_catalog : R.string.action_switch_board); items.add(viewModeMenuItem); items.add(new FloatingMenuItem(ORDER_ID, R.string.action_order)); items.add(new FloatingMenuItem(OPEN_BROWSER_ID, R.string.action_open_browser)); + items.add(new FloatingMenuItem(SHARE_ID, R.string.action_share)); overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items)); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java index 864bd1dc..3f2fdf6e 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java @@ -102,8 +102,9 @@ public class ThemeSettingsController extends Controller implements View.OnClickL } @Override - public void onPopulatePostOptions(Post post, List menu) { + public Object onPopulatePostOptions(Post post, List menu, List extraMenu) { menu.add(new FloatingMenuItem(1, "Option")); + return 0; } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java index 73537e15..2f1302fa 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java @@ -90,8 +90,8 @@ public class ViewThreadController extends ThreadController implements ThreadLayo if (!ChanSettings.enableReplyFab.get()) { items.add(new FloatingMenuItem(REPLY_ID, context.getString(R.string.action_reply))); } - items.add(new FloatingMenuItem(REFRESH_ID, R.string.action_reload)); items.add(new FloatingMenuItem(SEARCH_ID, R.string.action_search)); + items.add(new FloatingMenuItem(REFRESH_ID, R.string.action_reload)); items.add(new FloatingMenuItem(OPEN_BROWSER_ID, R.string.action_open_browser)); items.add(new FloatingMenuItem(SHARE_ID, R.string.action_share)); items.add(new FloatingMenuItem(UP_ID, R.string.action_up)); diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 6339ea24..aa9742cd 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -296,6 +296,7 @@ Re-enable this permission in the app settings if you permanently disabled it."Hide Thread hidden Delete + More… Name Options