From 484f1c80ed2ff6fc61b321294bfb560a638df9d7 Mon Sep 17 00:00:00 2001 From: Hocuri Date: Tue, 20 Oct 2020 10:36:21 +0200 Subject: [PATCH] "forward" should not go to overflow menu, fix #1656 --- res/values/attrs.xml | 2 +- .../ContactSelectionListFragment.java | 1 - .../securesms/ConversationFragment.java | 6 +-- ...> ConversationAdaptiveActionsToolbar.java} | 44 +++++++++---------- 4 files changed, 26 insertions(+), 27 deletions(-) rename src/org/thoughtcrime/securesms/util/views/{AdaptiveActionsToolbar.java => ConversationAdaptiveActionsToolbar.java} (58%) diff --git a/res/values/attrs.xml b/res/values/attrs.xml index f803aa234..de9709c4a 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -249,7 +249,7 @@ - + diff --git a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java index e5ef082fb..8878c1c6c 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -65,7 +65,6 @@ import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; -import org.thoughtcrime.securesms.util.views.AdaptiveActionsToolbar; import java.util.ArrayList; import java.util.LinkedList; diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index cee3efc34..c93709fee 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -75,7 +75,7 @@ import org.thoughtcrime.securesms.util.SaveAttachmentTask; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; -import org.thoughtcrime.securesms.util.views.AdaptiveActionsToolbar; +import org.thoughtcrime.securesms.util.views.ConversationAdaptiveActionsToolbar; import org.thoughtcrime.securesms.videochat.VideochatUtil; import java.util.Collections; @@ -782,7 +782,7 @@ public class ConversationFragment extends Fragment } else { Menu menu = actionMode.getMenu(); setCorrectMenuVisibility(menu); - AdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); + ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); actionMode.setTitle(String.valueOf(getListAdapter().getSelectedItems().size())); } } @@ -889,7 +889,7 @@ public class ConversationFragment extends Fragment } setCorrectMenuVisibility(menu); - AdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); + ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); return true; } diff --git a/src/org/thoughtcrime/securesms/util/views/AdaptiveActionsToolbar.java b/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java similarity index 58% rename from src/org/thoughtcrime/securesms/util/views/AdaptiveActionsToolbar.java rename to src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java index 55b94942d..40754b135 100644 --- a/src/org/thoughtcrime/securesms/util/views/AdaptiveActionsToolbar.java +++ b/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java @@ -14,41 +14,33 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.ViewUtil; /** - * AdaptiveActionsToolbar behaves like a normal {@link Toolbar} except in that it ignores the - * showAsAlways attributes of menu items added via menu inflation, opting for an adaptive algorithm - * instead. This algorithm will display as many icons as it can up to a specific percentage of the - * screen. - * - * Each ActionView icon is expected to occupy 48dp of space, including padding. Items are stacked one - * after the next with no margins. - * - * This view can be customized via attributes: - * - * aat_max_shown -- controls the max number of items to display. - * aat_percent_for_actions -- controls the max percent of screen width the buttons can occupy. + * This class was pulled from Signal (AdaptiveActionsToolbar) and then adapted to the ConversationActivity. */ -public class AdaptiveActionsToolbar extends Toolbar { +public class ConversationAdaptiveActionsToolbar extends Toolbar { - private static final int NAVIGATION_DP = 56; - private static final int ACTION_VIEW_WIDTH_DP = 48; - private static final int OVERFLOW_VIEW_WIDTH_DP = 36; + private static final int NAVIGATION_DP = 56; + private static final int ACTION_VIEW_WIDTH_DP = 48; + private static final int OVERFLOW_VIEW_WIDTH_DP = 36; + + private static final int ID_NEVER_SHOW_AS_ACTION = R.id.menu_context_reply_privately; + private static final int ID_ALWAYS_SHOW_AS_ACTION = R.id.menu_context_forward; private int maxShown; - public AdaptiveActionsToolbar(@NonNull Context context) { + public ConversationAdaptiveActionsToolbar(@NonNull Context context) { this(context, null); } - public AdaptiveActionsToolbar(@NonNull Context context, @Nullable AttributeSet attrs) { + public ConversationAdaptiveActionsToolbar(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, R.attr.toolbarStyle); } - public AdaptiveActionsToolbar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + public ConversationAdaptiveActionsToolbar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.AdaptiveActionsToolbar); + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ConversationAdaptiveActionsToolbar); - maxShown = array.getInteger(R.styleable.AdaptiveActionsToolbar_aat_max_shown, 100); + maxShown = array.getInteger(R.styleable.ConversationAdaptiveActionsToolbar_aat_max_shown, 100); array.recycle(); } @@ -78,9 +70,17 @@ public class AdaptiveActionsToolbar extends Toolbar { nItemsToShow = Math.min(maxToShow, widthAllowed / ViewUtil.dpToPx(ACTION_VIEW_WIDTH_DP)); + menu.findItem(ID_ALWAYS_SHOW_AS_ACTION).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + nItemsToShow--; + for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); - boolean neverShowAsAction = item.getItemId() == R.id.menu_context_reply_privately; + + boolean neverShowAsAction = item.getItemId() == ID_NEVER_SHOW_AS_ACTION; + boolean alwaysShowAsAction = item.getItemId() == ID_ALWAYS_SHOW_AS_ACTION; + + if (alwaysShowAsAction) continue; + if (item.isVisible() && nItemsToShow > 0 && !neverShowAsAction) { item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); nItemsToShow--;