Merge pull request #1673 from deltachat/forward-non-overflow

"forward" should not go to overflow menu, fix #1656
This commit is contained in:
bjoern 2020-10-20 15:54:38 +02:00 committed by GitHub
commit ad8fa9ab0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 27 deletions

View file

@ -249,7 +249,7 @@
<attr name="quote_colorSecondary" format="color" /> <attr name="quote_colorSecondary" format="color" />
</declare-styleable> </declare-styleable>
<declare-styleable name="AdaptiveActionsToolbar"> <declare-styleable name="ConversationAdaptiveActionsToolbar">
<attr name="aat_max_shown" format="integer" /> <attr name="aat_max_shown" format="integer" />
</declare-styleable> </declare-styleable>

View file

@ -65,7 +65,6 @@ import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.views.AdaptiveActionsToolbar;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;

View file

@ -75,7 +75,7 @@ import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; 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 org.thoughtcrime.securesms.videochat.VideochatUtil;
import java.util.Collections; import java.util.Collections;
@ -782,7 +782,7 @@ public class ConversationFragment extends Fragment
} else { } else {
Menu menu = actionMode.getMenu(); Menu menu = actionMode.getMenu();
setCorrectMenuVisibility(menu); 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())); actionMode.setTitle(String.valueOf(getListAdapter().getSelectedItems().size()));
} }
} }
@ -889,7 +889,7 @@ public class ConversationFragment extends Fragment
} }
setCorrectMenuVisibility(menu); setCorrectMenuVisibility(menu);
AdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth());
return true; return true;
} }

View file

@ -14,41 +14,33 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
/** /**
* AdaptiveActionsToolbar behaves like a normal {@link Toolbar} except in that it ignores the * This class was pulled from Signal (AdaptiveActionsToolbar) and then adapted to the ConversationActivity.
* 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.
*/ */
public class AdaptiveActionsToolbar extends Toolbar { public class ConversationAdaptiveActionsToolbar extends Toolbar {
private static final int NAVIGATION_DP = 56; private static final int NAVIGATION_DP = 56;
private static final int ACTION_VIEW_WIDTH_DP = 48; private static final int ACTION_VIEW_WIDTH_DP = 48;
private static final int OVERFLOW_VIEW_WIDTH_DP = 36; 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; private int maxShown;
public AdaptiveActionsToolbar(@NonNull Context context) { public ConversationAdaptiveActionsToolbar(@NonNull Context context) {
this(context, null); 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); 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); 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(); array.recycle();
} }
@ -78,9 +70,17 @@ public class AdaptiveActionsToolbar extends Toolbar {
nItemsToShow = Math.min(maxToShow, widthAllowed / ViewUtil.dpToPx(ACTION_VIEW_WIDTH_DP)); 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++) { for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(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) { if (item.isVisible() && nItemsToShow > 0 && !neverShowAsAction) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
nItemsToShow--; nItemsToShow--;