Merge "Force Autofill in FloatingToolbar overflow menu" into oc-dev

am: bc626c6358

Change-Id: I8688bda33124a78d439f1cbcf23926a0672b0735
This commit is contained in:
Siyamed Sinir
2017-06-09 21:37:17 +00:00
committed by android-build-merger
4 changed files with 52 additions and 9 deletions

View File

@@ -71,6 +71,11 @@ public interface MenuItem {
*/ */
public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;
/**
* @hide
*/
int SHOW_AS_OVERFLOW_ALWAYS = 1 << 31;
/** /**
* Interface definition for a callback to be invoked when a menu item is * Interface definition for a callback to be invoked when a menu item is
* clicked. * clicked.
@@ -799,4 +804,14 @@ public interface MenuItem {
default CharSequence getTooltipText() { default CharSequence getTooltipText() {
return null; return null;
} }
/**
* Returns true if {@link #setShowAsAction(int)} was set to {@link #SHOW_AS_OVERFLOW_ALWAYS}.
* Default value if {@code false}.
*
* @hide
*/
default boolean requiresOverflow() {
return false;
}
} }

View File

@@ -3846,7 +3846,7 @@ public class Editor {
if (selected == null || selected.isEmpty()) { if (selected == null || selected.isEmpty()) {
menu.add(Menu.NONE, TextView.ID_AUTOFILL, MENU_ITEM_ORDER_AUTOFILL, menu.add(Menu.NONE, TextView.ID_AUTOFILL, MENU_ITEM_ORDER_AUTOFILL,
com.android.internal.R.string.autofill) com.android.internal.R.string.autofill)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); .setShowAsAction(MenuItem.SHOW_AS_OVERFLOW_ALWAYS);
} }
} }

View File

@@ -656,6 +656,11 @@ public final class MenuItemImpl implements MenuItem {
return (mShowAsAction & SHOW_AS_ACTION_ALWAYS) == SHOW_AS_ACTION_ALWAYS; return (mShowAsAction & SHOW_AS_ACTION_ALWAYS) == SHOW_AS_ACTION_ALWAYS;
} }
@Override
public boolean requiresOverflow() {
return (mShowAsAction & SHOW_AS_OVERFLOW_ALWAYS) == SHOW_AS_OVERFLOW_ALWAYS;
}
public void setIsActionButton(boolean isActionButton) { public void setIsActionButton(boolean isActionButton) {
if (isActionButton) { if (isActionButton) {
mFlags |= IS_ACTION; mFlags |= IS_ACTION;

View File

@@ -49,9 +49,9 @@ import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationSet; import android.view.animation.AnimationSet;
import android.view.animation.Transformation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator; import android.view.animation.Interpolator;
import android.view.animation.Transformation;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
@@ -60,12 +60,12 @@ import android.widget.ListView;
import android.widget.PopupWindow; import android.widget.PopupWindow;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.R;
import com.android.internal.util.Preconditions;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import com.android.internal.R;
import com.android.internal.util.Preconditions;
import java.util.Objects; import java.util.Objects;
/** /**
@@ -1141,7 +1141,18 @@ public final class FloatingToolbar {
Preconditions.checkNotNull(menuItems); Preconditions.checkNotNull(menuItems);
int availableWidth = toolbarWidth; int availableWidth = toolbarWidth;
final LinkedList<MenuItem> remainingMenuItems = new LinkedList<MenuItem>(menuItems);
final LinkedList<MenuItem> remainingMenuItems = new LinkedList<>();
// add the overflow menu items to the end of the remainingMenuItems list.
final LinkedList<MenuItem> overflowMenuItems = new LinkedList();
for (MenuItem menuItem : menuItems) {
if (menuItem.requiresOverflow()) {
overflowMenuItems.add(menuItem);
} else {
remainingMenuItems.add(menuItem);
}
}
remainingMenuItems.addAll(overflowMenuItems);
mMainPanel.removeAllViews(); mMainPanel.removeAllViews();
mMainPanel.setPaddingRelative(0, 0, 0, 0); mMainPanel.setPaddingRelative(0, 0, 0, 0);
@@ -1150,6 +1161,14 @@ public final class FloatingToolbar {
boolean isFirstItem = true; boolean isFirstItem = true;
while (!remainingMenuItems.isEmpty()) { while (!remainingMenuItems.isEmpty()) {
final MenuItem menuItem = remainingMenuItems.peek(); final MenuItem menuItem = remainingMenuItems.peek();
// if this is the first item, regardless of requiresOverflow(), it should be
// displayed on the main panel. Otherwise all items including this one will be
// overflow items, and should be displayed in overflow panel.
if(!isFirstItem && menuItem.requiresOverflow()) {
break;
}
View menuItemButton = createMenuItemButton(mContext, menuItem, mIconTextSpacing); View menuItemButton = createMenuItemButton(mContext, menuItem, mIconTextSpacing);
// Adding additional start padding for the first button to even out button spacing. // Adding additional start padding for the first button to even out button spacing.
@@ -1226,13 +1245,17 @@ public final class FloatingToolbar {
availableWidth -= menuItemButtonWidth + extraPadding; availableWidth -= menuItemButtonWidth + extraPadding;
remainingMenuItems.pop(); remainingMenuItems.pop();
} else { } else {
// Reserve space for overflowButton.
mMainPanel.setPaddingRelative(0, 0, mOverflowButtonSize.getWidth(), 0);
break; break;
} }
lastGroupId = menuItem.getGroupId(); lastGroupId = menuItem.getGroupId();
isFirstItem = false; isFirstItem = false;
} }
if (!remainingMenuItems.isEmpty()) {
// Reserve space for overflowButton.
mMainPanel.setPaddingRelative(0, 0, mOverflowButtonSize.getWidth(), 0);
}
mMainPanelSize = measure(mMainPanel); mMainPanelSize = measure(mMainPanel);
return remainingMenuItems; return remainingMenuItems;
} }