diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index 25c5521b..f7619db2 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -81,6 +81,7 @@ public class ChanSettings { public static final BooleanSetting shareUrl; public static final BooleanSetting networkHttps; public static final BooleanSetting forcePhoneLayout; + public static final BooleanSetting enableReplyFab; public static final BooleanSetting anonymize; public static final BooleanSetting anonymizeIds; public static final BooleanSetting repliesButtonsBottom; @@ -145,6 +146,7 @@ public class ChanSettings { } }); forcePhoneLayout = new BooleanSetting(p, "preference_force_phone_layout", false); + enableReplyFab = new BooleanSetting(p, "preference_enable_reply_fab", true); anonymize = new BooleanSetting(p, "preference_anonymize", false); anonymizeIds = new BooleanSetting(p, "preference_anonymize_ids", false); repliesButtonsBottom = new BooleanSetting(p, "preference_buttons_bottom", false); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java index 23ca274c..ce840b3e 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java @@ -46,6 +46,7 @@ public class AdvancedSettingsController extends SettingsController { private boolean needRestart; private LinkSettingView saveLocation; private SettingView forcePhoneLayoutSetting; + private SettingView enableReplyFab; private SettingView postFullDate; private SettingView postFileInfo; private SettingView postFilename; @@ -84,7 +85,7 @@ public class AdvancedSettingsController extends SettingsController { public void onPreferenceChange(SettingView item) { super.onPreferenceChange(item); - if (item == forcePhoneLayoutSetting) { + if (item == forcePhoneLayoutSetting || item == enableReplyFab) { needRestart = true; } @@ -122,6 +123,7 @@ public class AdvancedSettingsController extends SettingsController { settings.add(new BooleanSettingView(this, ChanSettings.shareUrl, string(R.string.setting_share_url), string(R.string.setting_share_url_description))); settings.add(new BooleanSettingView(this, ChanSettings.networkHttps, string(R.string.setting_network_https), string(R.string.setting_network_https_description))); forcePhoneLayoutSetting = settings.add(new BooleanSettingView(this, ChanSettings.forcePhoneLayout, string(R.string.setting_force_phone_layout), null)); + enableReplyFab = settings.add(new BooleanSettingView(this, ChanSettings.enableReplyFab, string(R.string.setting_enable_reply_fab), string(R.string.setting_enable_reply_fab_description))); anonymize = settings.add(new BooleanSettingView(this, ChanSettings.anonymize, string(R.string.setting_anonymize), null)); anonymizeIds = settings.add(new BooleanSettingView(this, ChanSettings.anonymizeIds, string(R.string.setting_anonymize_ids), null)); settings.add(new BooleanSettingView(this, ChanSettings.repliesButtonsBottom, string(R.string.setting_buttons_bottom), null)); 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 98e503d8..fe133397 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 @@ -48,11 +48,12 @@ import java.util.List; public class BrowseController extends ThreadController implements ToolbarMenuItem.ToolbarMenuItemCallback, ThreadLayout.ThreadLayoutCallback, FloatingMenu.FloatingMenuCallback { private static final int REFRESH_ID = 1; - private static final int SEARCH_ID = 101; - private static final int SHARE_ID = 102; - private static final int VIEW_MODE_ID = 103; - private static final int ORDER_ID = 104; - private static final int OPEN_BROWSER_ID = 105; + private static final int REPLY_ID = 101; + private static final int SEARCH_ID = 102; + private static final int SHARE_ID = 103; + private static final int VIEW_MODE_ID = 104; + private static final int ORDER_ID = 105; + private static final int OPEN_BROWSER_ID = 106; private PostCellInterface.PostViewMode postViewMode; private PostsFilter.Order order; @@ -89,6 +90,9 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte overflow = menu.createOverflow(this); List items = new ArrayList<>(); + if (!ChanSettings.enableReplyFab.get()) { + items.add(new FloatingMenuItem(REPLY_ID, context.getString(R.string.action_reply))); + } items.add(new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search))); items.add(new FloatingMenuItem(SHARE_ID, context.getString(R.string.action_share))); viewModeMenuItem = new FloatingMenuItem(VIEW_MODE_ID, context.getString( @@ -115,6 +119,9 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte public void onSubMenuItemClicked(ToolbarMenuItem parent, FloatingMenuItem item) { Integer id = (Integer) item.getId(); switch (id) { + case REPLY_ID: + threadLayout.openReply(true); + break; case SEARCH_ID: ((ToolbarNavigationController) navigationController).showSearch(); break; 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 7771efea..d0f4cd38 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 @@ -28,6 +28,7 @@ import org.floens.chan.core.manager.WatchManager; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Pin; import org.floens.chan.core.presenter.ThreadPresenter; +import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.ui.cell.PostCellInterface; import org.floens.chan.ui.layout.ThreadLayout; import org.floens.chan.ui.toolbar.ToolbarMenu; @@ -35,18 +36,20 @@ import org.floens.chan.ui.toolbar.ToolbarMenuItem; import org.floens.chan.ui.view.FloatingMenuItem; import org.floens.chan.utils.AndroidUtils; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; import static org.floens.chan.utils.AndroidUtils.getAttrColor; public class ViewThreadController extends ThreadController implements ThreadLayout.ThreadLayoutCallback, ToolbarMenuItem.ToolbarMenuItemCallback { private static final int PIN_ID = 2; - private static final int REFRESH_ID = 101; - private static final int SEARCH_ID = 102; - private static final int SHARE_ID = 103; - private static final int UP_ID = 104; - private static final int DOWN_ID = 105; - private static final int OPEN_BROWSER_ID = 106; + private static final int REPLY_ID = 101; + private static final int REFRESH_ID = 102; + private static final int SEARCH_ID = 103; + private static final int SHARE_ID = 104; + private static final int UP_ID = 105; + private static final int DOWN_ID = 106; + private static final int OPEN_BROWSER_ID = 107; private ToolbarMenuItem pinItem; private Loadable loadable; @@ -71,14 +74,17 @@ public class ViewThreadController extends ThreadController implements ThreadLayo navigationItem.menu = new ToolbarMenu(context); pinItem = navigationItem.menu.addItem(new ToolbarMenuItem(context, this, PIN_ID, R.drawable.ic_bookmark_outline_white_24dp)); - navigationItem.createOverflow(context, this, Arrays.asList( - new FloatingMenuItem(REFRESH_ID, context.getString(R.string.action_reload)), - new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search)), - new FloatingMenuItem(OPEN_BROWSER_ID, context.getString(R.string.action_open_browser)), - new FloatingMenuItem(SHARE_ID, context.getString(R.string.action_share)), - new FloatingMenuItem(UP_ID, context.getString(R.string.action_up)), - new FloatingMenuItem(DOWN_ID, context.getString(R.string.action_down)) - )); + List items = new ArrayList<>(); + if (!ChanSettings.enableReplyFab.get()) { + items.add(new FloatingMenuItem(REPLY_ID, context.getString(R.string.action_reply))); + } + items.add(new FloatingMenuItem(REFRESH_ID, context.getString(R.string.action_reload))); + items.add(new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search))); + items.add(new FloatingMenuItem(OPEN_BROWSER_ID, context.getString(R.string.action_open_browser))); + items.add(new FloatingMenuItem(SHARE_ID, context.getString(R.string.action_share))); + items.add(new FloatingMenuItem(UP_ID, context.getString(R.string.action_up))); + items.add(new FloatingMenuItem(DOWN_ID, context.getString(R.string.action_down))); + navigationItem.createOverflow(context, this, items); loadThread(loadable); } @@ -161,6 +167,9 @@ public class ViewThreadController extends ThreadController implements ThreadLayo Integer id = (Integer) item.getId(); switch (id) { + case REPLY_ID: + threadLayout.openReply(true); + break; case REFRESH_ID: threadLayout.getPresenter().requestData(); break; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java index a299f498..12c5bdb2 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java @@ -100,6 +100,7 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T private Visible visible; private ProgressDialog deletingDialog; private boolean refreshedFromSwipe; + private boolean replyButtonEnabled; private boolean showingReplyButton = false; private Snackbar newPostsNotification; @@ -123,6 +124,7 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T presenter = new ThreadPresenter(this); + loadView = (LoadView) findViewById(R.id.loadview); replyButton = (FloatingActionButton) findViewById(R.id.reply_button); replyButton.setOnClickListener(this); @@ -139,6 +141,11 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T errorRetryButton = (Button) errorLayout.findViewById(R.id.button); errorRetryButton.setOnClickListener(this); + replyButtonEnabled = ChanSettings.enableReplyFab.get(); + if (!replyButtonEnabled) { + AndroidUtils.removeFromParentView(replyButton); + } + switchVisible(Visible.LOADING); } @@ -435,8 +442,12 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T return postPopupHelper.isOpen(); } + public void openReply(boolean open) { + threadListLayout.openReply(open); + } + private void showReplyButton(boolean show) { - if (show != showingReplyButton) { + if (show != showingReplyButton && replyButtonEnabled) { showingReplyButton = show; replyButton.animate() diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index b71d13b1..ea8bdaa3 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -91,6 +91,7 @@ along with this program. If not, see . Order Rename pin Rename + Reply Clover cannot open this link, opening in your browser. @@ -337,6 +338,8 @@ along with this program. If not, see . Use HTTPS Use HTTPS for all network requests Force phone layout + Enable the reply FAB + Disabling replaces it with a menu option Make everyone Anonymous Hide IDs Reply buttons on the bottom