Add option to replace the reply button with a menu entry

multisite
Floens 10 years ago
parent a24ffa5b3b
commit 5f58cd8c04
  1. 2
      Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
  2. 4
      Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java
  3. 17
      Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java
  4. 39
      Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java
  5. 13
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java
  6. 3
      Clover/app/src/main/res/values/strings.xml

@ -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);

@ -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));

@ -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<FloatingMenuItem> 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;

@ -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<FloatingMenuItem> 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;

@ -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()

@ -91,6 +91,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="action_order">Order</string>
<string name="action_rename_pin">Rename pin</string>
<string name="action_rename">Rename</string>
<string name="action_reply">Reply</string>
<string name="open_link_not_matched">Clover cannot open this link, opening in your browser.</string>
@ -337,6 +338,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="setting_network_https">Use HTTPS</string>
<string name="setting_network_https_description">Use HTTPS for all network requests</string>
<string name="setting_force_phone_layout">Force phone layout</string>
<string name="setting_enable_reply_fab">Enable the reply FAB</string>
<string name="setting_enable_reply_fab_description">Disabling replaces it with a menu option</string>
<string name="setting_anonymize">Make everyone Anonymous</string>
<string name="setting_anonymize_ids">Hide IDs</string>
<string name="setting_buttons_bottom">Reply buttons on the bottom</string>

Loading…
Cancel
Save