ADD week 5
This commit is contained in:
@ -0,0 +1,705 @@
|
||||
package androidx.appcompat.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import androidx.appcompat.R;
|
||||
import androidx.appcompat.view.ActionBarPolicy;
|
||||
import androidx.appcompat.view.menu.ActionMenuItemView;
|
||||
import androidx.appcompat.view.menu.BaseMenuPresenter;
|
||||
import androidx.appcompat.view.menu.MenuBuilder;
|
||||
import androidx.appcompat.view.menu.MenuItemImpl;
|
||||
import androidx.appcompat.view.menu.MenuPopupHelper;
|
||||
import androidx.appcompat.view.menu.MenuPresenter;
|
||||
import androidx.appcompat.view.menu.MenuView;
|
||||
import androidx.appcompat.view.menu.ShowableListMenu;
|
||||
import androidx.appcompat.view.menu.SubMenuBuilder;
|
||||
import androidx.appcompat.widget.ActionMenuView;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.core.view.ActionProvider;
|
||||
import androidx.core.view.GravityCompat;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
class ActionMenuPresenter extends BaseMenuPresenter implements ActionProvider.SubUiVisibilityListener {
|
||||
private static final String TAG = "ActionMenuPresenter";
|
||||
private final SparseBooleanArray mActionButtonGroups;
|
||||
ActionButtonSubmenu mActionButtonPopup;
|
||||
private int mActionItemWidthLimit;
|
||||
private boolean mExpandedActionViewsExclusive;
|
||||
private int mMaxItems;
|
||||
private boolean mMaxItemsSet;
|
||||
private int mMinCellSize;
|
||||
int mOpenSubMenuId;
|
||||
OverflowMenuButton mOverflowButton;
|
||||
OverflowPopup mOverflowPopup;
|
||||
private Drawable mPendingOverflowIcon;
|
||||
private boolean mPendingOverflowIconSet;
|
||||
private ActionMenuPopupCallback mPopupCallback;
|
||||
final PopupPresenterCallback mPopupPresenterCallback;
|
||||
OpenOverflowRunnable mPostedOpenRunnable;
|
||||
private boolean mReserveOverflow;
|
||||
private boolean mReserveOverflowSet;
|
||||
private boolean mStrictWidthLimit;
|
||||
private int mWidthLimit;
|
||||
private boolean mWidthLimitSet;
|
||||
|
||||
public boolean isOverflowReserved() {
|
||||
return this.mReserveOverflow;
|
||||
}
|
||||
|
||||
public void setExpandedActionViewsExclusive(boolean z) {
|
||||
this.mExpandedActionViewsExclusive = z;
|
||||
}
|
||||
|
||||
public void setItemLimit(int i) {
|
||||
this.mMaxItems = i;
|
||||
this.mMaxItemsSet = true;
|
||||
}
|
||||
|
||||
public void setReserveOverflow(boolean z) {
|
||||
this.mReserveOverflow = z;
|
||||
this.mReserveOverflowSet = true;
|
||||
}
|
||||
|
||||
public void setWidthLimit(int i, boolean z) {
|
||||
this.mWidthLimit = i;
|
||||
this.mStrictWidthLimit = z;
|
||||
this.mWidthLimitSet = true;
|
||||
}
|
||||
|
||||
public ActionMenuPresenter(Context context) {
|
||||
super(context, R.layout.abc_action_menu_layout, R.layout.abc_action_menu_item_layout);
|
||||
this.mActionButtonGroups = new SparseBooleanArray();
|
||||
this.mPopupPresenterCallback = new PopupPresenterCallback();
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public void initForMenu(Context context, MenuBuilder menuBuilder) {
|
||||
super.initForMenu(context, menuBuilder);
|
||||
Resources resources = context.getResources();
|
||||
ActionBarPolicy actionBarPolicy = ActionBarPolicy.get(context);
|
||||
if (!this.mReserveOverflowSet) {
|
||||
this.mReserveOverflow = actionBarPolicy.showsOverflowMenuButton();
|
||||
}
|
||||
if (!this.mWidthLimitSet) {
|
||||
this.mWidthLimit = actionBarPolicy.getEmbeddedMenuWidthLimit();
|
||||
}
|
||||
if (!this.mMaxItemsSet) {
|
||||
this.mMaxItems = actionBarPolicy.getMaxActionButtons();
|
||||
}
|
||||
int i = this.mWidthLimit;
|
||||
if (this.mReserveOverflow) {
|
||||
if (this.mOverflowButton == null) {
|
||||
OverflowMenuButton overflowMenuButton = new OverflowMenuButton(this.mSystemContext);
|
||||
this.mOverflowButton = overflowMenuButton;
|
||||
if (this.mPendingOverflowIconSet) {
|
||||
overflowMenuButton.setImageDrawable(this.mPendingOverflowIcon);
|
||||
this.mPendingOverflowIcon = null;
|
||||
this.mPendingOverflowIconSet = false;
|
||||
}
|
||||
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, 0);
|
||||
this.mOverflowButton.measure(makeMeasureSpec, makeMeasureSpec);
|
||||
}
|
||||
i -= this.mOverflowButton.getMeasuredWidth();
|
||||
} else {
|
||||
this.mOverflowButton = null;
|
||||
}
|
||||
this.mActionItemWidthLimit = i;
|
||||
this.mMinCellSize = (int) (resources.getDisplayMetrics().density * 56.0f);
|
||||
}
|
||||
|
||||
public void onConfigurationChanged(Configuration configuration) {
|
||||
if (!this.mMaxItemsSet) {
|
||||
this.mMaxItems = ActionBarPolicy.get(this.mContext).getMaxActionButtons();
|
||||
}
|
||||
if (this.mMenu != null) {
|
||||
this.mMenu.onItemsChanged(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void setOverflowIcon(Drawable drawable) {
|
||||
OverflowMenuButton overflowMenuButton = this.mOverflowButton;
|
||||
if (overflowMenuButton != null) {
|
||||
overflowMenuButton.setImageDrawable(drawable);
|
||||
} else {
|
||||
this.mPendingOverflowIconSet = true;
|
||||
this.mPendingOverflowIcon = drawable;
|
||||
}
|
||||
}
|
||||
|
||||
public Drawable getOverflowIcon() {
|
||||
OverflowMenuButton overflowMenuButton = this.mOverflowButton;
|
||||
if (overflowMenuButton != null) {
|
||||
return overflowMenuButton.getDrawable();
|
||||
}
|
||||
if (this.mPendingOverflowIconSet) {
|
||||
return this.mPendingOverflowIcon;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public MenuView getMenuView(ViewGroup viewGroup) {
|
||||
MenuView menuView = this.mMenuView;
|
||||
MenuView menuView2 = super.getMenuView(viewGroup);
|
||||
if (menuView != menuView2) {
|
||||
((ActionMenuView) menuView2).setPresenter(this);
|
||||
}
|
||||
return menuView2;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter
|
||||
public View getItemView(MenuItemImpl menuItemImpl, View view, ViewGroup viewGroup) {
|
||||
View actionView = menuItemImpl.getActionView();
|
||||
if (actionView == null || menuItemImpl.hasCollapsibleActionView()) {
|
||||
actionView = super.getItemView(menuItemImpl, view, viewGroup);
|
||||
}
|
||||
actionView.setVisibility(menuItemImpl.isActionViewExpanded() ? 8 : 0);
|
||||
ActionMenuView actionMenuView = (ActionMenuView) viewGroup;
|
||||
ViewGroup.LayoutParams layoutParams = actionView.getLayoutParams();
|
||||
if (!actionMenuView.checkLayoutParams(layoutParams)) {
|
||||
actionView.setLayoutParams(actionMenuView.generateLayoutParams(layoutParams));
|
||||
}
|
||||
return actionView;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter
|
||||
public void bindItemView(MenuItemImpl menuItemImpl, MenuView.ItemView itemView) {
|
||||
itemView.initialize(menuItemImpl, 0);
|
||||
ActionMenuItemView actionMenuItemView = (ActionMenuItemView) itemView;
|
||||
actionMenuItemView.setItemInvoker((ActionMenuView) this.mMenuView);
|
||||
if (this.mPopupCallback == null) {
|
||||
this.mPopupCallback = new ActionMenuPopupCallback();
|
||||
}
|
||||
actionMenuItemView.setPopupCallback(this.mPopupCallback);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter
|
||||
public boolean shouldIncludeItem(int i, MenuItemImpl menuItemImpl) {
|
||||
return menuItemImpl.isActionButton();
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public void updateMenuView(boolean z) {
|
||||
int size;
|
||||
super.updateMenuView(z);
|
||||
((View) this.mMenuView).requestLayout();
|
||||
if (this.mMenu != null) {
|
||||
ArrayList<MenuItemImpl> actionItems = this.mMenu.getActionItems();
|
||||
int size2 = actionItems.size();
|
||||
for (int i = 0; i < size2; i++) {
|
||||
ActionProvider supportActionProvider = actionItems.get(i).getSupportActionProvider();
|
||||
if (supportActionProvider != null) {
|
||||
supportActionProvider.setSubUiVisibilityListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
ArrayList<MenuItemImpl> nonActionItems = this.mMenu != null ? this.mMenu.getNonActionItems() : null;
|
||||
if (this.mReserveOverflow && nonActionItems != null && ((size = nonActionItems.size()) != 1 ? size > 0 : (!nonActionItems.get(0).isActionViewExpanded()))) {
|
||||
if (this.mOverflowButton == null) {
|
||||
this.mOverflowButton = new OverflowMenuButton(this.mSystemContext);
|
||||
}
|
||||
ViewGroup viewGroup = (ViewGroup) this.mOverflowButton.getParent();
|
||||
if (viewGroup != this.mMenuView) {
|
||||
if (viewGroup != null) {
|
||||
viewGroup.removeView(this.mOverflowButton);
|
||||
}
|
||||
ActionMenuView actionMenuView = (ActionMenuView) this.mMenuView;
|
||||
actionMenuView.addView(this.mOverflowButton, actionMenuView.generateOverflowButtonLayoutParams());
|
||||
}
|
||||
} else {
|
||||
OverflowMenuButton overflowMenuButton = this.mOverflowButton;
|
||||
if (overflowMenuButton != null && overflowMenuButton.getParent() == this.mMenuView) {
|
||||
((ViewGroup) this.mMenuView).removeView(this.mOverflowButton);
|
||||
}
|
||||
}
|
||||
((ActionMenuView) this.mMenuView).setOverflowReserved(this.mReserveOverflow);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter
|
||||
public boolean filterLeftoverView(ViewGroup viewGroup, int i) {
|
||||
if (viewGroup.getChildAt(i) == this.mOverflowButton) {
|
||||
return false;
|
||||
}
|
||||
return super.filterLeftoverView(viewGroup, i);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public boolean onSubMenuSelected(SubMenuBuilder subMenuBuilder) {
|
||||
boolean z = false;
|
||||
if (!subMenuBuilder.hasVisibleItems()) {
|
||||
return false;
|
||||
}
|
||||
SubMenuBuilder subMenuBuilder2 = subMenuBuilder;
|
||||
while (subMenuBuilder2.getParentMenu() != this.mMenu) {
|
||||
subMenuBuilder2 = (SubMenuBuilder) subMenuBuilder2.getParentMenu();
|
||||
}
|
||||
View findViewForItem = findViewForItem(subMenuBuilder2.getItem());
|
||||
if (findViewForItem == null) {
|
||||
return false;
|
||||
}
|
||||
this.mOpenSubMenuId = subMenuBuilder.getItem().getItemId();
|
||||
int size = subMenuBuilder.size();
|
||||
int i = 0;
|
||||
while (true) {
|
||||
if (i >= size) {
|
||||
break;
|
||||
}
|
||||
MenuItem item = subMenuBuilder.getItem(i);
|
||||
if (item.isVisible() && item.getIcon() != null) {
|
||||
z = true;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
ActionButtonSubmenu actionButtonSubmenu = new ActionButtonSubmenu(this.mContext, subMenuBuilder, findViewForItem);
|
||||
this.mActionButtonPopup = actionButtonSubmenu;
|
||||
actionButtonSubmenu.setForceShowIcon(z);
|
||||
this.mActionButtonPopup.show();
|
||||
super.onSubMenuSelected(subMenuBuilder);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
private View findViewForItem(MenuItem menuItem) {
|
||||
ViewGroup viewGroup = (ViewGroup) this.mMenuView;
|
||||
if (viewGroup == null) {
|
||||
return null;
|
||||
}
|
||||
int childCount = viewGroup.getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View childAt = viewGroup.getChildAt(i);
|
||||
if ((childAt instanceof MenuView.ItemView) && ((MenuView.ItemView) childAt).getItemData() == menuItem) {
|
||||
return childAt;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean showOverflowMenu() {
|
||||
if (!this.mReserveOverflow || isOverflowMenuShowing() || this.mMenu == null || this.mMenuView == null || this.mPostedOpenRunnable != null || this.mMenu.getNonActionItems().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
this.mPostedOpenRunnable = new OpenOverflowRunnable(new OverflowPopup(this.mContext, this.mMenu, this.mOverflowButton, true));
|
||||
((View) this.mMenuView).post(this.mPostedOpenRunnable);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean hideOverflowMenu() {
|
||||
if (this.mPostedOpenRunnable != null && this.mMenuView != null) {
|
||||
((View) this.mMenuView).removeCallbacks(this.mPostedOpenRunnable);
|
||||
this.mPostedOpenRunnable = null;
|
||||
return true;
|
||||
}
|
||||
OverflowPopup overflowPopup = this.mOverflowPopup;
|
||||
if (overflowPopup == null) {
|
||||
return false;
|
||||
}
|
||||
overflowPopup.dismiss();
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean dismissPopupMenus() {
|
||||
return hideOverflowMenu() | hideSubMenus();
|
||||
}
|
||||
|
||||
public boolean hideSubMenus() {
|
||||
ActionButtonSubmenu actionButtonSubmenu = this.mActionButtonPopup;
|
||||
if (actionButtonSubmenu == null) {
|
||||
return false;
|
||||
}
|
||||
actionButtonSubmenu.dismiss();
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isOverflowMenuShowing() {
|
||||
OverflowPopup overflowPopup = this.mOverflowPopup;
|
||||
return overflowPopup != null && overflowPopup.isShowing();
|
||||
}
|
||||
|
||||
public boolean isOverflowMenuShowPending() {
|
||||
return this.mPostedOpenRunnable != null || isOverflowMenuShowing();
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public boolean flagActionItems() {
|
||||
ArrayList<MenuItemImpl> arrayList;
|
||||
int i;
|
||||
int i2;
|
||||
int i3;
|
||||
int i4;
|
||||
ActionMenuPresenter actionMenuPresenter = this;
|
||||
View view = null;
|
||||
int i5 = 0;
|
||||
if (actionMenuPresenter.mMenu != null) {
|
||||
arrayList = actionMenuPresenter.mMenu.getVisibleItems();
|
||||
i = arrayList.size();
|
||||
} else {
|
||||
arrayList = null;
|
||||
i = 0;
|
||||
}
|
||||
int i6 = actionMenuPresenter.mMaxItems;
|
||||
int i7 = actionMenuPresenter.mActionItemWidthLimit;
|
||||
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, 0);
|
||||
ViewGroup viewGroup = (ViewGroup) actionMenuPresenter.mMenuView;
|
||||
boolean z = false;
|
||||
int i8 = 0;
|
||||
int i9 = 0;
|
||||
for (int i10 = 0; i10 < i; i10++) {
|
||||
MenuItemImpl menuItemImpl = arrayList.get(i10);
|
||||
if (menuItemImpl.requiresActionButton()) {
|
||||
i8++;
|
||||
} else if (menuItemImpl.requestsActionButton()) {
|
||||
i9++;
|
||||
} else {
|
||||
z = true;
|
||||
}
|
||||
if (actionMenuPresenter.mExpandedActionViewsExclusive && menuItemImpl.isActionViewExpanded()) {
|
||||
i6 = 0;
|
||||
}
|
||||
}
|
||||
if (actionMenuPresenter.mReserveOverflow && (z || i9 + i8 > i6)) {
|
||||
i6--;
|
||||
}
|
||||
int i11 = i6 - i8;
|
||||
SparseBooleanArray sparseBooleanArray = actionMenuPresenter.mActionButtonGroups;
|
||||
sparseBooleanArray.clear();
|
||||
if (actionMenuPresenter.mStrictWidthLimit) {
|
||||
int i12 = actionMenuPresenter.mMinCellSize;
|
||||
i3 = i7 / i12;
|
||||
i2 = i12 + ((i7 % i12) / i3);
|
||||
} else {
|
||||
i2 = 0;
|
||||
i3 = 0;
|
||||
}
|
||||
int i13 = 0;
|
||||
int i14 = 0;
|
||||
while (i13 < i) {
|
||||
MenuItemImpl menuItemImpl2 = arrayList.get(i13);
|
||||
if (menuItemImpl2.requiresActionButton()) {
|
||||
View itemView = actionMenuPresenter.getItemView(menuItemImpl2, view, viewGroup);
|
||||
if (actionMenuPresenter.mStrictWidthLimit) {
|
||||
i3 -= ActionMenuView.measureChildForCells(itemView, i2, i3, makeMeasureSpec, i5);
|
||||
} else {
|
||||
itemView.measure(makeMeasureSpec, makeMeasureSpec);
|
||||
}
|
||||
int measuredWidth = itemView.getMeasuredWidth();
|
||||
i7 -= measuredWidth;
|
||||
if (i14 == 0) {
|
||||
i14 = measuredWidth;
|
||||
}
|
||||
int groupId = menuItemImpl2.getGroupId();
|
||||
if (groupId != 0) {
|
||||
sparseBooleanArray.put(groupId, true);
|
||||
}
|
||||
menuItemImpl2.setIsActionButton(true);
|
||||
i4 = i;
|
||||
} else if (menuItemImpl2.requestsActionButton()) {
|
||||
int groupId2 = menuItemImpl2.getGroupId();
|
||||
boolean z2 = sparseBooleanArray.get(groupId2);
|
||||
boolean z3 = (i11 > 0 || z2) && i7 > 0 && (!actionMenuPresenter.mStrictWidthLimit || i3 > 0);
|
||||
boolean z4 = z3;
|
||||
i4 = i;
|
||||
if (z3) {
|
||||
View itemView2 = actionMenuPresenter.getItemView(menuItemImpl2, null, viewGroup);
|
||||
if (actionMenuPresenter.mStrictWidthLimit) {
|
||||
int measureChildForCells = ActionMenuView.measureChildForCells(itemView2, i2, i3, makeMeasureSpec, 0);
|
||||
i3 -= measureChildForCells;
|
||||
if (measureChildForCells == 0) {
|
||||
z4 = false;
|
||||
}
|
||||
} else {
|
||||
itemView2.measure(makeMeasureSpec, makeMeasureSpec);
|
||||
}
|
||||
boolean z5 = z4;
|
||||
int measuredWidth2 = itemView2.getMeasuredWidth();
|
||||
i7 -= measuredWidth2;
|
||||
if (i14 == 0) {
|
||||
i14 = measuredWidth2;
|
||||
}
|
||||
z3 = z5 & (!actionMenuPresenter.mStrictWidthLimit ? i7 + i14 <= 0 : i7 < 0);
|
||||
}
|
||||
if (z3 && groupId2 != 0) {
|
||||
sparseBooleanArray.put(groupId2, true);
|
||||
} else if (z2) {
|
||||
sparseBooleanArray.put(groupId2, false);
|
||||
for (int i15 = 0; i15 < i13; i15++) {
|
||||
MenuItemImpl menuItemImpl3 = arrayList.get(i15);
|
||||
if (menuItemImpl3.getGroupId() == groupId2) {
|
||||
if (menuItemImpl3.isActionButton()) {
|
||||
i11++;
|
||||
}
|
||||
menuItemImpl3.setIsActionButton(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (z3) {
|
||||
i11--;
|
||||
}
|
||||
menuItemImpl2.setIsActionButton(z3);
|
||||
} else {
|
||||
i4 = i;
|
||||
menuItemImpl2.setIsActionButton(false);
|
||||
i13++;
|
||||
view = null;
|
||||
actionMenuPresenter = this;
|
||||
i = i4;
|
||||
i5 = 0;
|
||||
}
|
||||
i13++;
|
||||
view = null;
|
||||
actionMenuPresenter = this;
|
||||
i = i4;
|
||||
i5 = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.BaseMenuPresenter, androidx.appcompat.view.menu.MenuPresenter
|
||||
public void onCloseMenu(MenuBuilder menuBuilder, boolean z) {
|
||||
dismissPopupMenus();
|
||||
super.onCloseMenu(menuBuilder, z);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPresenter
|
||||
public Parcelable onSaveInstanceState() {
|
||||
SavedState savedState = new SavedState();
|
||||
savedState.openSubMenuId = this.mOpenSubMenuId;
|
||||
return savedState;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPresenter
|
||||
public void onRestoreInstanceState(Parcelable parcelable) {
|
||||
MenuItem findItem;
|
||||
if (parcelable instanceof SavedState) {
|
||||
SavedState savedState = (SavedState) parcelable;
|
||||
if (savedState.openSubMenuId <= 0 || (findItem = this.mMenu.findItem(savedState.openSubMenuId)) == null) {
|
||||
return;
|
||||
}
|
||||
onSubMenuSelected((SubMenuBuilder) findItem.getSubMenu());
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.core.view.ActionProvider.SubUiVisibilityListener
|
||||
public void onSubUiVisibilityChanged(boolean z) {
|
||||
if (z) {
|
||||
super.onSubMenuSelected(null);
|
||||
} else if (this.mMenu != null) {
|
||||
this.mMenu.close(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void setMenuView(ActionMenuView actionMenuView) {
|
||||
this.mMenuView = actionMenuView;
|
||||
actionMenuView.initialize(this.mMenu);
|
||||
}
|
||||
|
||||
private static class SavedState implements Parcelable {
|
||||
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { // from class: androidx.appcompat.widget.ActionMenuPresenter.SavedState.1
|
||||
/* JADX WARN: Can't rename method to resolve collision */
|
||||
@Override // android.os.Parcelable.Creator
|
||||
public SavedState createFromParcel(Parcel parcel) {
|
||||
return new SavedState(parcel);
|
||||
}
|
||||
|
||||
/* JADX WARN: Can't rename method to resolve collision */
|
||||
@Override // android.os.Parcelable.Creator
|
||||
public SavedState[] newArray(int i) {
|
||||
return new SavedState[i];
|
||||
}
|
||||
};
|
||||
public int openSubMenuId;
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
SavedState() {
|
||||
}
|
||||
|
||||
SavedState(Parcel parcel) {
|
||||
this.openSubMenuId = parcel.readInt();
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public void writeToParcel(Parcel parcel, int i) {
|
||||
parcel.writeInt(this.openSubMenuId);
|
||||
}
|
||||
}
|
||||
|
||||
private class OverflowMenuButton extends AppCompatImageView implements ActionMenuView.ActionMenuChildView {
|
||||
@Override // androidx.appcompat.widget.ActionMenuView.ActionMenuChildView
|
||||
public boolean needsDividerAfter() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.widget.ActionMenuView.ActionMenuChildView
|
||||
public boolean needsDividerBefore() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public OverflowMenuButton(Context context) {
|
||||
super(context, null, R.attr.actionOverflowButtonStyle);
|
||||
setClickable(true);
|
||||
setFocusable(true);
|
||||
setVisibility(0);
|
||||
setEnabled(true);
|
||||
TooltipCompat.setTooltipText(this, getContentDescription());
|
||||
setOnTouchListener(new ForwardingListener(this) { // from class: androidx.appcompat.widget.ActionMenuPresenter.OverflowMenuButton.1
|
||||
@Override // androidx.appcompat.widget.ForwardingListener
|
||||
public ShowableListMenu getPopup() {
|
||||
if (ActionMenuPresenter.this.mOverflowPopup == null) {
|
||||
return null;
|
||||
}
|
||||
return ActionMenuPresenter.this.mOverflowPopup.getPopup();
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.widget.ForwardingListener
|
||||
public boolean onForwardingStarted() {
|
||||
ActionMenuPresenter.this.showOverflowMenu();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.widget.ForwardingListener
|
||||
public boolean onForwardingStopped() {
|
||||
if (ActionMenuPresenter.this.mPostedOpenRunnable != null) {
|
||||
return false;
|
||||
}
|
||||
ActionMenuPresenter.this.hideOverflowMenu();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public boolean performClick() {
|
||||
if (super.performClick()) {
|
||||
return true;
|
||||
}
|
||||
playSoundEffect(0);
|
||||
ActionMenuPresenter.this.showOverflowMenu();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override // android.widget.ImageView
|
||||
protected boolean setFrame(int i, int i2, int i3, int i4) {
|
||||
boolean frame = super.setFrame(i, i2, i3, i4);
|
||||
Drawable drawable = getDrawable();
|
||||
Drawable background = getBackground();
|
||||
if (drawable != null && background != null) {
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
int max = Math.max(width, height) / 2;
|
||||
int paddingLeft = (width + (getPaddingLeft() - getPaddingRight())) / 2;
|
||||
int paddingTop = (height + (getPaddingTop() - getPaddingBottom())) / 2;
|
||||
DrawableCompat.setHotspotBounds(background, paddingLeft - max, paddingTop - max, paddingLeft + max, paddingTop + max);
|
||||
}
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
|
||||
private class OverflowPopup extends MenuPopupHelper {
|
||||
public OverflowPopup(Context context, MenuBuilder menuBuilder, View view, boolean z) {
|
||||
super(context, menuBuilder, view, z, R.attr.actionOverflowMenuStyle);
|
||||
setGravity(GravityCompat.END);
|
||||
setPresenterCallback(ActionMenuPresenter.this.mPopupPresenterCallback);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPopupHelper
|
||||
protected void onDismiss() {
|
||||
if (ActionMenuPresenter.this.mMenu != null) {
|
||||
ActionMenuPresenter.this.mMenu.close();
|
||||
}
|
||||
ActionMenuPresenter.this.mOverflowPopup = null;
|
||||
super.onDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
private class ActionButtonSubmenu extends MenuPopupHelper {
|
||||
public ActionButtonSubmenu(Context context, SubMenuBuilder subMenuBuilder, View view) {
|
||||
super(context, subMenuBuilder, view, false, R.attr.actionOverflowMenuStyle);
|
||||
if (!((MenuItemImpl) subMenuBuilder.getItem()).isActionButton()) {
|
||||
setAnchorView(ActionMenuPresenter.this.mOverflowButton == null ? (View) ActionMenuPresenter.this.mMenuView : ActionMenuPresenter.this.mOverflowButton);
|
||||
}
|
||||
setPresenterCallback(ActionMenuPresenter.this.mPopupPresenterCallback);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPopupHelper
|
||||
protected void onDismiss() {
|
||||
ActionMenuPresenter.this.mActionButtonPopup = null;
|
||||
ActionMenuPresenter.this.mOpenSubMenuId = 0;
|
||||
super.onDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
private class PopupPresenterCallback implements MenuPresenter.Callback {
|
||||
PopupPresenterCallback() {
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPresenter.Callback
|
||||
public boolean onOpenSubMenu(MenuBuilder menuBuilder) {
|
||||
if (menuBuilder == ActionMenuPresenter.this.mMenu) {
|
||||
return false;
|
||||
}
|
||||
ActionMenuPresenter.this.mOpenSubMenuId = ((SubMenuBuilder) menuBuilder).getItem().getItemId();
|
||||
MenuPresenter.Callback callback = ActionMenuPresenter.this.getCallback();
|
||||
if (callback != null) {
|
||||
return callback.onOpenSubMenu(menuBuilder);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.MenuPresenter.Callback
|
||||
public void onCloseMenu(MenuBuilder menuBuilder, boolean z) {
|
||||
if (menuBuilder instanceof SubMenuBuilder) {
|
||||
menuBuilder.getRootMenu().close(false);
|
||||
}
|
||||
MenuPresenter.Callback callback = ActionMenuPresenter.this.getCallback();
|
||||
if (callback != null) {
|
||||
callback.onCloseMenu(menuBuilder, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class OpenOverflowRunnable implements Runnable {
|
||||
private OverflowPopup mPopup;
|
||||
|
||||
public OpenOverflowRunnable(OverflowPopup overflowPopup) {
|
||||
this.mPopup = overflowPopup;
|
||||
}
|
||||
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
if (ActionMenuPresenter.this.mMenu != null) {
|
||||
ActionMenuPresenter.this.mMenu.changeMenuMode();
|
||||
}
|
||||
View view = (View) ActionMenuPresenter.this.mMenuView;
|
||||
if (view != null && view.getWindowToken() != null && this.mPopup.tryShow()) {
|
||||
ActionMenuPresenter.this.mOverflowPopup = this.mPopup;
|
||||
}
|
||||
ActionMenuPresenter.this.mPostedOpenRunnable = null;
|
||||
}
|
||||
}
|
||||
|
||||
private class ActionMenuPopupCallback extends ActionMenuItemView.PopupCallback {
|
||||
ActionMenuPopupCallback() {
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.view.menu.ActionMenuItemView.PopupCallback
|
||||
public ShowableListMenu getPopup() {
|
||||
if (ActionMenuPresenter.this.mActionButtonPopup != null) {
|
||||
return ActionMenuPresenter.this.mActionButtonPopup.getPopup();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user