983 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			983 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.view.menu;
 | |
| 
 | |
| import android.content.ComponentName;
 | |
| import android.content.Context;
 | |
| import android.content.Intent;
 | |
| import android.content.pm.PackageManager;
 | |
| import android.content.pm.ResolveInfo;
 | |
| import android.content.res.Resources;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.os.Bundle;
 | |
| import android.os.Parcelable;
 | |
| import android.util.SparseArray;
 | |
| import android.view.ContextMenu;
 | |
| import android.view.KeyCharacterMap;
 | |
| import android.view.KeyEvent;
 | |
| import android.view.MenuItem;
 | |
| import android.view.SubMenu;
 | |
| import android.view.View;
 | |
| import androidx.core.content.ContextCompat;
 | |
| import androidx.core.internal.view.SupportMenu;
 | |
| import androidx.core.view.ActionProvider;
 | |
| import java.lang.ref.WeakReference;
 | |
| import java.util.ArrayList;
 | |
| import java.util.Iterator;
 | |
| import java.util.List;
 | |
| import java.util.concurrent.CopyOnWriteArrayList;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MenuBuilder implements SupportMenu {
 | |
|     private static final String ACTION_VIEW_STATES_KEY = "android:menu:actionviewstates";
 | |
|     private static final String EXPANDED_ACTION_VIEW_ID = "android:menu:expandedactionview";
 | |
|     private static final String PRESENTER_KEY = "android:menu:presenters";
 | |
|     private static final String TAG = "MenuBuilder";
 | |
|     private static final int[] sCategoryToOrder = {1, 4, 5, 3, 2, 0};
 | |
|     private Callback mCallback;
 | |
|     private final Context mContext;
 | |
|     private ContextMenu.ContextMenuInfo mCurrentMenuInfo;
 | |
|     private MenuItemImpl mExpandedItem;
 | |
|     Drawable mHeaderIcon;
 | |
|     CharSequence mHeaderTitle;
 | |
|     View mHeaderView;
 | |
|     private boolean mOverrideVisibleItems;
 | |
|     private boolean mQwertyMode;
 | |
|     private final Resources mResources;
 | |
|     private boolean mShortcutsVisible;
 | |
|     private int mDefaultShowAsAction = 0;
 | |
|     private boolean mPreventDispatchingItemsChanged = false;
 | |
|     private boolean mItemsChangedWhileDispatchPrevented = false;
 | |
|     private boolean mStructureChangedWhileDispatchPrevented = false;
 | |
|     private boolean mOptionalIconsVisible = false;
 | |
|     private boolean mIsClosing = false;
 | |
|     private ArrayList<MenuItemImpl> mTempShortcutItemList = new ArrayList<>();
 | |
|     private CopyOnWriteArrayList<WeakReference<MenuPresenter>> mPresenters = new CopyOnWriteArrayList<>();
 | |
|     private boolean mGroupDividerEnabled = false;
 | |
|     private ArrayList<MenuItemImpl> mItems = new ArrayList<>();
 | |
|     private ArrayList<MenuItemImpl> mVisibleItems = new ArrayList<>();
 | |
|     private boolean mIsVisibleItemsStale = true;
 | |
|     private ArrayList<MenuItemImpl> mActionItems = new ArrayList<>();
 | |
|     private ArrayList<MenuItemImpl> mNonActionItems = new ArrayList<>();
 | |
|     private boolean mIsActionItemsStale = true;
 | |
| 
 | |
|     public interface Callback {
 | |
|         boolean onMenuItemSelected(MenuBuilder menuBuilder, MenuItem menuItem);
 | |
| 
 | |
|         void onMenuModeChange(MenuBuilder menuBuilder);
 | |
|     }
 | |
| 
 | |
|     public interface ItemInvoker {
 | |
|         boolean invokeItem(MenuItemImpl menuItemImpl);
 | |
|     }
 | |
| 
 | |
|     protected String getActionViewStatesKey() {
 | |
|         return ACTION_VIEW_STATES_KEY;
 | |
|     }
 | |
| 
 | |
|     public Context getContext() {
 | |
|         return this.mContext;
 | |
|     }
 | |
| 
 | |
|     public MenuItemImpl getExpandedItem() {
 | |
|         return this.mExpandedItem;
 | |
|     }
 | |
| 
 | |
|     public Drawable getHeaderIcon() {
 | |
|         return this.mHeaderIcon;
 | |
|     }
 | |
| 
 | |
|     public CharSequence getHeaderTitle() {
 | |
|         return this.mHeaderTitle;
 | |
|     }
 | |
| 
 | |
|     public View getHeaderView() {
 | |
|         return this.mHeaderView;
 | |
|     }
 | |
| 
 | |
|     boolean getOptionalIconsVisible() {
 | |
|         return this.mOptionalIconsVisible;
 | |
|     }
 | |
| 
 | |
|     Resources getResources() {
 | |
|         return this.mResources;
 | |
|     }
 | |
| 
 | |
|     public MenuBuilder getRootMenu() {
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public boolean isGroupDividerEnabled() {
 | |
|         return this.mGroupDividerEnabled;
 | |
|     }
 | |
| 
 | |
|     boolean isQwertyMode() {
 | |
|         return this.mQwertyMode;
 | |
|     }
 | |
| 
 | |
|     public boolean isShortcutsVisible() {
 | |
|         return this.mShortcutsVisible;
 | |
|     }
 | |
| 
 | |
|     public void setCallback(Callback callback) {
 | |
|         this.mCallback = callback;
 | |
|     }
 | |
| 
 | |
|     public void setCurrentMenuInfo(ContextMenu.ContextMenuInfo contextMenuInfo) {
 | |
|         this.mCurrentMenuInfo = contextMenuInfo;
 | |
|     }
 | |
| 
 | |
|     public MenuBuilder setDefaultShowAsAction(int i) {
 | |
|         this.mDefaultShowAsAction = i;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.internal.view.SupportMenu, android.view.Menu
 | |
|     public void setGroupDividerEnabled(boolean z) {
 | |
|         this.mGroupDividerEnabled = z;
 | |
|     }
 | |
| 
 | |
|     public void setOptionalIconsVisible(boolean z) {
 | |
|         this.mOptionalIconsVisible = z;
 | |
|     }
 | |
| 
 | |
|     public void setOverrideVisibleItems(boolean z) {
 | |
|         this.mOverrideVisibleItems = z;
 | |
|     }
 | |
| 
 | |
|     public void stopDispatchingItemsChanged() {
 | |
|         if (this.mPreventDispatchingItemsChanged) {
 | |
|             return;
 | |
|         }
 | |
|         this.mPreventDispatchingItemsChanged = true;
 | |
|         this.mItemsChangedWhileDispatchPrevented = false;
 | |
|         this.mStructureChangedWhileDispatchPrevented = false;
 | |
|     }
 | |
| 
 | |
|     public MenuBuilder(Context context) {
 | |
|         this.mContext = context;
 | |
|         this.mResources = context.getResources();
 | |
|         setShortcutsVisibleInner(true);
 | |
|     }
 | |
| 
 | |
|     public void addMenuPresenter(MenuPresenter menuPresenter) {
 | |
|         addMenuPresenter(menuPresenter, this.mContext);
 | |
|     }
 | |
| 
 | |
|     public void addMenuPresenter(MenuPresenter menuPresenter, Context context) {
 | |
|         this.mPresenters.add(new WeakReference<>(menuPresenter));
 | |
|         menuPresenter.initForMenu(context, this);
 | |
|         this.mIsActionItemsStale = true;
 | |
|     }
 | |
| 
 | |
|     public void removeMenuPresenter(MenuPresenter menuPresenter) {
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter2 = next.get();
 | |
|             if (menuPresenter2 == null || menuPresenter2 == menuPresenter) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void dispatchPresenterUpdate(boolean z) {
 | |
|         if (this.mPresenters.isEmpty()) {
 | |
|             return;
 | |
|         }
 | |
|         stopDispatchingItemsChanged();
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter = next.get();
 | |
|             if (menuPresenter == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else {
 | |
|                 menuPresenter.updateMenuView(z);
 | |
|             }
 | |
|         }
 | |
|         startDispatchingItemsChanged();
 | |
|     }
 | |
| 
 | |
|     private boolean dispatchSubMenuSelected(SubMenuBuilder subMenuBuilder, MenuPresenter menuPresenter) {
 | |
|         if (this.mPresenters.isEmpty()) {
 | |
|             return false;
 | |
|         }
 | |
|         boolean onSubMenuSelected = menuPresenter != null ? menuPresenter.onSubMenuSelected(subMenuBuilder) : false;
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter2 = next.get();
 | |
|             if (menuPresenter2 == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else if (!onSubMenuSelected) {
 | |
|                 onSubMenuSelected = menuPresenter2.onSubMenuSelected(subMenuBuilder);
 | |
|             }
 | |
|         }
 | |
|         return onSubMenuSelected;
 | |
|     }
 | |
| 
 | |
|     private void dispatchSaveInstanceState(Bundle bundle) {
 | |
|         Parcelable onSaveInstanceState;
 | |
|         if (this.mPresenters.isEmpty()) {
 | |
|             return;
 | |
|         }
 | |
|         SparseArray<? extends Parcelable> sparseArray = new SparseArray<>();
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter = next.get();
 | |
|             if (menuPresenter == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else {
 | |
|                 int id = menuPresenter.getId();
 | |
|                 if (id > 0 && (onSaveInstanceState = menuPresenter.onSaveInstanceState()) != null) {
 | |
|                     sparseArray.put(id, onSaveInstanceState);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         bundle.putSparseParcelableArray(PRESENTER_KEY, sparseArray);
 | |
|     }
 | |
| 
 | |
|     private void dispatchRestoreInstanceState(Bundle bundle) {
 | |
|         Parcelable parcelable;
 | |
|         SparseArray sparseParcelableArray = bundle.getSparseParcelableArray(PRESENTER_KEY);
 | |
|         if (sparseParcelableArray == null || this.mPresenters.isEmpty()) {
 | |
|             return;
 | |
|         }
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter = next.get();
 | |
|             if (menuPresenter == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else {
 | |
|                 int id = menuPresenter.getId();
 | |
|                 if (id > 0 && (parcelable = (Parcelable) sparseParcelableArray.get(id)) != null) {
 | |
|                     menuPresenter.onRestoreInstanceState(parcelable);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void savePresenterStates(Bundle bundle) {
 | |
|         dispatchSaveInstanceState(bundle);
 | |
|     }
 | |
| 
 | |
|     public void restorePresenterStates(Bundle bundle) {
 | |
|         dispatchRestoreInstanceState(bundle);
 | |
|     }
 | |
| 
 | |
|     public void saveActionViewStates(Bundle bundle) {
 | |
|         int size = size();
 | |
|         SparseArray<? extends Parcelable> sparseArray = null;
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             MenuItem item = getItem(i);
 | |
|             View actionView = item.getActionView();
 | |
|             if (actionView != null && actionView.getId() != -1) {
 | |
|                 if (sparseArray == null) {
 | |
|                     sparseArray = new SparseArray<>();
 | |
|                 }
 | |
|                 actionView.saveHierarchyState(sparseArray);
 | |
|                 if (item.isActionViewExpanded()) {
 | |
|                     bundle.putInt(EXPANDED_ACTION_VIEW_ID, item.getItemId());
 | |
|                 }
 | |
|             }
 | |
|             if (item.hasSubMenu()) {
 | |
|                 ((SubMenuBuilder) item.getSubMenu()).saveActionViewStates(bundle);
 | |
|             }
 | |
|         }
 | |
|         if (sparseArray != null) {
 | |
|             bundle.putSparseParcelableArray(getActionViewStatesKey(), sparseArray);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void restoreActionViewStates(Bundle bundle) {
 | |
|         MenuItem findItem;
 | |
|         if (bundle == null) {
 | |
|             return;
 | |
|         }
 | |
|         SparseArray<Parcelable> sparseParcelableArray = bundle.getSparseParcelableArray(getActionViewStatesKey());
 | |
|         int size = size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             MenuItem item = getItem(i);
 | |
|             View actionView = item.getActionView();
 | |
|             if (actionView != null && actionView.getId() != -1) {
 | |
|                 actionView.restoreHierarchyState(sparseParcelableArray);
 | |
|             }
 | |
|             if (item.hasSubMenu()) {
 | |
|                 ((SubMenuBuilder) item.getSubMenu()).restoreActionViewStates(bundle);
 | |
|             }
 | |
|         }
 | |
|         int i2 = bundle.getInt(EXPANDED_ACTION_VIEW_ID);
 | |
|         if (i2 <= 0 || (findItem = findItem(i2)) == null) {
 | |
|             return;
 | |
|         }
 | |
|         findItem.expandActionView();
 | |
|     }
 | |
| 
 | |
|     protected MenuItem addInternal(int i, int i2, int i3, CharSequence charSequence) {
 | |
|         int ordering = getOrdering(i3);
 | |
|         MenuItemImpl createNewMenuItem = createNewMenuItem(i, i2, i3, ordering, charSequence, this.mDefaultShowAsAction);
 | |
|         ContextMenu.ContextMenuInfo contextMenuInfo = this.mCurrentMenuInfo;
 | |
|         if (contextMenuInfo != null) {
 | |
|             createNewMenuItem.setMenuInfo(contextMenuInfo);
 | |
|         }
 | |
|         ArrayList<MenuItemImpl> arrayList = this.mItems;
 | |
|         arrayList.add(findInsertIndex(arrayList, ordering), createNewMenuItem);
 | |
|         onItemsChanged(true);
 | |
|         return createNewMenuItem;
 | |
|     }
 | |
| 
 | |
|     private MenuItemImpl createNewMenuItem(int i, int i2, int i3, int i4, CharSequence charSequence, int i5) {
 | |
|         return new MenuItemImpl(this, i, i2, i3, i4, charSequence, i5);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem add(CharSequence charSequence) {
 | |
|         return addInternal(0, 0, 0, charSequence);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem add(int i) {
 | |
|         return addInternal(0, 0, 0, this.mResources.getString(i));
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem add(int i, int i2, int i3, CharSequence charSequence) {
 | |
|         return addInternal(i, i2, i3, charSequence);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem add(int i, int i2, int i3, int i4) {
 | |
|         return addInternal(i, i2, i3, this.mResources.getString(i4));
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public SubMenu addSubMenu(CharSequence charSequence) {
 | |
|         return addSubMenu(0, 0, 0, charSequence);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public SubMenu addSubMenu(int i) {
 | |
|         return addSubMenu(0, 0, 0, this.mResources.getString(i));
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public SubMenu addSubMenu(int i, int i2, int i3, CharSequence charSequence) {
 | |
|         MenuItemImpl menuItemImpl = (MenuItemImpl) addInternal(i, i2, i3, charSequence);
 | |
|         SubMenuBuilder subMenuBuilder = new SubMenuBuilder(this.mContext, this, menuItemImpl);
 | |
|         menuItemImpl.setSubMenu(subMenuBuilder);
 | |
|         return subMenuBuilder;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public SubMenu addSubMenu(int i, int i2, int i3, int i4) {
 | |
|         return addSubMenu(i, i2, i3, this.mResources.getString(i4));
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public int addIntentOptions(int i, int i2, int i3, ComponentName componentName, Intent[] intentArr, Intent intent, int i4, MenuItem[] menuItemArr) {
 | |
|         PackageManager packageManager = this.mContext.getPackageManager();
 | |
|         List<ResolveInfo> queryIntentActivityOptions = packageManager.queryIntentActivityOptions(componentName, intentArr, intent, 0);
 | |
|         int size = queryIntentActivityOptions != null ? queryIntentActivityOptions.size() : 0;
 | |
|         if ((i4 & 1) == 0) {
 | |
|             removeGroup(i);
 | |
|         }
 | |
|         for (int i5 = 0; i5 < size; i5++) {
 | |
|             ResolveInfo resolveInfo = queryIntentActivityOptions.get(i5);
 | |
|             Intent intent2 = new Intent(resolveInfo.specificIndex < 0 ? intent : intentArr[resolveInfo.specificIndex]);
 | |
|             intent2.setComponent(new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName, resolveInfo.activityInfo.name));
 | |
|             MenuItem intent3 = add(i, i2, i3, resolveInfo.loadLabel(packageManager)).setIcon(resolveInfo.loadIcon(packageManager)).setIntent(intent2);
 | |
|             if (menuItemArr != null && resolveInfo.specificIndex >= 0) {
 | |
|                 menuItemArr[resolveInfo.specificIndex] = intent3;
 | |
|             }
 | |
|         }
 | |
|         return size;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void removeItem(int i) {
 | |
|         removeItemAtInt(findItemIndex(i), true);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void removeGroup(int i) {
 | |
|         int findGroupIndex = findGroupIndex(i);
 | |
|         if (findGroupIndex >= 0) {
 | |
|             int size = this.mItems.size() - findGroupIndex;
 | |
|             int i2 = 0;
 | |
|             while (true) {
 | |
|                 int i3 = i2 + 1;
 | |
|                 if (i2 >= size || this.mItems.get(findGroupIndex).getGroupId() != i) {
 | |
|                     break;
 | |
|                 }
 | |
|                 removeItemAtInt(findGroupIndex, false);
 | |
|                 i2 = i3;
 | |
|             }
 | |
|             onItemsChanged(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void removeItemAtInt(int i, boolean z) {
 | |
|         if (i < 0 || i >= this.mItems.size()) {
 | |
|             return;
 | |
|         }
 | |
|         this.mItems.remove(i);
 | |
|         if (z) {
 | |
|             onItemsChanged(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void removeItemAt(int i) {
 | |
|         removeItemAtInt(i, true);
 | |
|     }
 | |
| 
 | |
|     public void clearAll() {
 | |
|         this.mPreventDispatchingItemsChanged = true;
 | |
|         clear();
 | |
|         clearHeader();
 | |
|         this.mPresenters.clear();
 | |
|         this.mPreventDispatchingItemsChanged = false;
 | |
|         this.mItemsChangedWhileDispatchPrevented = false;
 | |
|         this.mStructureChangedWhileDispatchPrevented = false;
 | |
|         onItemsChanged(true);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void clear() {
 | |
|         MenuItemImpl menuItemImpl = this.mExpandedItem;
 | |
|         if (menuItemImpl != null) {
 | |
|             collapseItemActionView(menuItemImpl);
 | |
|         }
 | |
|         this.mItems.clear();
 | |
|         onItemsChanged(true);
 | |
|     }
 | |
| 
 | |
|     void setExclusiveItemChecked(MenuItem menuItem) {
 | |
|         int groupId = menuItem.getGroupId();
 | |
|         int size = this.mItems.size();
 | |
|         stopDispatchingItemsChanged();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i);
 | |
|             if (menuItemImpl.getGroupId() == groupId && menuItemImpl.isExclusiveCheckable() && menuItemImpl.isCheckable()) {
 | |
|                 menuItemImpl.setCheckedInt(menuItemImpl == menuItem);
 | |
|             }
 | |
|         }
 | |
|         startDispatchingItemsChanged();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void setGroupCheckable(int i, boolean z, boolean z2) {
 | |
|         int size = this.mItems.size();
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i2);
 | |
|             if (menuItemImpl.getGroupId() == i) {
 | |
|                 menuItemImpl.setExclusiveCheckable(z2);
 | |
|                 menuItemImpl.setCheckable(z);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void setGroupVisible(int i, boolean z) {
 | |
|         int size = this.mItems.size();
 | |
|         boolean z2 = false;
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i2);
 | |
|             if (menuItemImpl.getGroupId() == i && menuItemImpl.setVisibleInt(z)) {
 | |
|                 z2 = true;
 | |
|             }
 | |
|         }
 | |
|         if (z2) {
 | |
|             onItemsChanged(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void setGroupEnabled(int i, boolean z) {
 | |
|         int size = this.mItems.size();
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i2);
 | |
|             if (menuItemImpl.getGroupId() == i) {
 | |
|                 menuItemImpl.setEnabled(z);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public boolean hasVisibleItems() {
 | |
|         if (this.mOverrideVisibleItems) {
 | |
|             return true;
 | |
|         }
 | |
|         int size = size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             if (this.mItems.get(i).isVisible()) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem findItem(int i) {
 | |
|         MenuItem findItem;
 | |
|         int size = size();
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i2);
 | |
|             if (menuItemImpl.getItemId() == i) {
 | |
|                 return menuItemImpl;
 | |
|             }
 | |
|             if (menuItemImpl.hasSubMenu() && (findItem = menuItemImpl.getSubMenu().findItem(i)) != null) {
 | |
|                 return findItem;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     public int findItemIndex(int i) {
 | |
|         int size = size();
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             if (this.mItems.get(i2).getItemId() == i) {
 | |
|                 return i2;
 | |
|             }
 | |
|         }
 | |
|         return -1;
 | |
|     }
 | |
| 
 | |
|     public int findGroupIndex(int i) {
 | |
|         return findGroupIndex(i, 0);
 | |
|     }
 | |
| 
 | |
|     public int findGroupIndex(int i, int i2) {
 | |
|         int size = size();
 | |
|         if (i2 < 0) {
 | |
|             i2 = 0;
 | |
|         }
 | |
|         while (i2 < size) {
 | |
|             if (this.mItems.get(i2).getGroupId() == i) {
 | |
|                 return i2;
 | |
|             }
 | |
|             i2++;
 | |
|         }
 | |
|         return -1;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public int size() {
 | |
|         return this.mItems.size();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public MenuItem getItem(int i) {
 | |
|         return this.mItems.get(i);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public boolean isShortcutKey(int i, KeyEvent keyEvent) {
 | |
|         return findItemWithShortcutForKey(i, keyEvent) != null;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void setQwertyMode(boolean z) {
 | |
|         this.mQwertyMode = z;
 | |
|         onItemsChanged(false);
 | |
|     }
 | |
| 
 | |
|     private static int getOrdering(int i) {
 | |
|         int i2 = ((-65536) & i) >> 16;
 | |
|         if (i2 >= 0) {
 | |
|             int[] iArr = sCategoryToOrder;
 | |
|             if (i2 < iArr.length) {
 | |
|                 return (i & SupportMenu.USER_MASK) | (iArr[i2] << 16);
 | |
|             }
 | |
|         }
 | |
|         throw new IllegalArgumentException("order does not contain a valid category.");
 | |
|     }
 | |
| 
 | |
|     public void setShortcutsVisible(boolean z) {
 | |
|         if (this.mShortcutsVisible == z) {
 | |
|             return;
 | |
|         }
 | |
|         setShortcutsVisibleInner(z);
 | |
|         onItemsChanged(false);
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:5:0x0019, code lost:
 | |
|     
 | |
|         if (androidx.core.view.ViewConfigurationCompat.shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration.get(r2.mContext), r2.mContext) != false) goto L9;
 | |
|      */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     private void setShortcutsVisibleInner(boolean r3) {
 | |
|         /*
 | |
|             r2 = this;
 | |
|             if (r3 == 0) goto L1c
 | |
|             android.content.res.Resources r3 = r2.mResources
 | |
|             android.content.res.Configuration r3 = r3.getConfiguration()
 | |
|             int r3 = r3.keyboard
 | |
|             r0 = 1
 | |
|             if (r3 == r0) goto L1c
 | |
|             android.content.Context r3 = r2.mContext
 | |
|             android.view.ViewConfiguration r3 = android.view.ViewConfiguration.get(r3)
 | |
|             android.content.Context r1 = r2.mContext
 | |
|             boolean r3 = androidx.core.view.ViewConfigurationCompat.shouldShowMenuShortcutsWhenKeyboardPresent(r3, r1)
 | |
|             if (r3 == 0) goto L1c
 | |
|             goto L1d
 | |
|         L1c:
 | |
|             r0 = 0
 | |
|         L1d:
 | |
|             r2.mShortcutsVisible = r0
 | |
|             return
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.appcompat.view.menu.MenuBuilder.setShortcutsVisibleInner(boolean):void");
 | |
|     }
 | |
| 
 | |
|     boolean dispatchMenuItemSelected(MenuBuilder menuBuilder, MenuItem menuItem) {
 | |
|         Callback callback = this.mCallback;
 | |
|         return callback != null && callback.onMenuItemSelected(menuBuilder, menuItem);
 | |
|     }
 | |
| 
 | |
|     public void changeMenuMode() {
 | |
|         Callback callback = this.mCallback;
 | |
|         if (callback != null) {
 | |
|             callback.onMenuModeChange(this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static int findInsertIndex(ArrayList<MenuItemImpl> arrayList, int i) {
 | |
|         for (int size = arrayList.size() - 1; size >= 0; size--) {
 | |
|             if (arrayList.get(size).getOrdering() <= i) {
 | |
|                 return size + 1;
 | |
|             }
 | |
|         }
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public boolean performShortcut(int i, KeyEvent keyEvent, int i2) {
 | |
|         MenuItemImpl findItemWithShortcutForKey = findItemWithShortcutForKey(i, keyEvent);
 | |
|         boolean performItemAction = findItemWithShortcutForKey != null ? performItemAction(findItemWithShortcutForKey, i2) : false;
 | |
|         if ((i2 & 2) != 0) {
 | |
|             close(true);
 | |
|         }
 | |
|         return performItemAction;
 | |
|     }
 | |
| 
 | |
|     void findItemsWithShortcutForKey(List<MenuItemImpl> list, int i, KeyEvent keyEvent) {
 | |
|         boolean isQwertyMode = isQwertyMode();
 | |
|         int modifiers = keyEvent.getModifiers();
 | |
|         KeyCharacterMap.KeyData keyData = new KeyCharacterMap.KeyData();
 | |
|         if (keyEvent.getKeyData(keyData) || i == 67) {
 | |
|             int size = this.mItems.size();
 | |
|             for (int i2 = 0; i2 < size; i2++) {
 | |
|                 MenuItemImpl menuItemImpl = this.mItems.get(i2);
 | |
|                 if (menuItemImpl.hasSubMenu()) {
 | |
|                     ((MenuBuilder) menuItemImpl.getSubMenu()).findItemsWithShortcutForKey(list, i, keyEvent);
 | |
|                 }
 | |
|                 char alphabeticShortcut = isQwertyMode ? menuItemImpl.getAlphabeticShortcut() : menuItemImpl.getNumericShortcut();
 | |
|                 if ((modifiers & SupportMenu.SUPPORTED_MODIFIERS_MASK) == ((isQwertyMode ? menuItemImpl.getAlphabeticModifiers() : menuItemImpl.getNumericModifiers()) & SupportMenu.SUPPORTED_MODIFIERS_MASK) && alphabeticShortcut != 0 && ((alphabeticShortcut == keyData.meta[0] || alphabeticShortcut == keyData.meta[2] || (isQwertyMode && alphabeticShortcut == '\b' && i == 67)) && menuItemImpl.isEnabled())) {
 | |
|                     list.add(menuItemImpl);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     MenuItemImpl findItemWithShortcutForKey(int i, KeyEvent keyEvent) {
 | |
|         char numericShortcut;
 | |
|         ArrayList<MenuItemImpl> arrayList = this.mTempShortcutItemList;
 | |
|         arrayList.clear();
 | |
|         findItemsWithShortcutForKey(arrayList, i, keyEvent);
 | |
|         if (arrayList.isEmpty()) {
 | |
|             return null;
 | |
|         }
 | |
|         int metaState = keyEvent.getMetaState();
 | |
|         KeyCharacterMap.KeyData keyData = new KeyCharacterMap.KeyData();
 | |
|         keyEvent.getKeyData(keyData);
 | |
|         int size = arrayList.size();
 | |
|         if (size == 1) {
 | |
|             return arrayList.get(0);
 | |
|         }
 | |
|         boolean isQwertyMode = isQwertyMode();
 | |
|         for (int i2 = 0; i2 < size; i2++) {
 | |
|             MenuItemImpl menuItemImpl = arrayList.get(i2);
 | |
|             if (isQwertyMode) {
 | |
|                 numericShortcut = menuItemImpl.getAlphabeticShortcut();
 | |
|             } else {
 | |
|                 numericShortcut = menuItemImpl.getNumericShortcut();
 | |
|             }
 | |
|             if ((numericShortcut == keyData.meta[0] && (metaState & 2) == 0) || ((numericShortcut == keyData.meta[2] && (metaState & 2) != 0) || (isQwertyMode && numericShortcut == '\b' && i == 67))) {
 | |
|                 return menuItemImpl;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public boolean performIdentifierAction(int i, int i2) {
 | |
|         return performItemAction(findItem(i), i2);
 | |
|     }
 | |
| 
 | |
|     public boolean performItemAction(MenuItem menuItem, int i) {
 | |
|         return performItemAction(menuItem, null, i);
 | |
|     }
 | |
| 
 | |
|     public boolean performItemAction(MenuItem menuItem, MenuPresenter menuPresenter, int i) {
 | |
|         MenuItemImpl menuItemImpl = (MenuItemImpl) menuItem;
 | |
|         if (menuItemImpl == null || !menuItemImpl.isEnabled()) {
 | |
|             return false;
 | |
|         }
 | |
|         boolean invoke = menuItemImpl.invoke();
 | |
|         ActionProvider supportActionProvider = menuItemImpl.getSupportActionProvider();
 | |
|         boolean z = supportActionProvider != null && supportActionProvider.hasSubMenu();
 | |
|         if (menuItemImpl.hasCollapsibleActionView()) {
 | |
|             invoke |= menuItemImpl.expandActionView();
 | |
|             if (invoke) {
 | |
|                 close(true);
 | |
|             }
 | |
|         } else if (menuItemImpl.hasSubMenu() || z) {
 | |
|             if ((i & 4) == 0) {
 | |
|                 close(false);
 | |
|             }
 | |
|             if (!menuItemImpl.hasSubMenu()) {
 | |
|                 menuItemImpl.setSubMenu(new SubMenuBuilder(getContext(), this, menuItemImpl));
 | |
|             }
 | |
|             SubMenuBuilder subMenuBuilder = (SubMenuBuilder) menuItemImpl.getSubMenu();
 | |
|             if (z) {
 | |
|                 supportActionProvider.onPrepareSubMenu(subMenuBuilder);
 | |
|             }
 | |
|             invoke |= dispatchSubMenuSelected(subMenuBuilder, menuPresenter);
 | |
|             if (!invoke) {
 | |
|                 close(true);
 | |
|             }
 | |
|         } else if ((i & 1) == 0) {
 | |
|             close(true);
 | |
|         }
 | |
|         return invoke;
 | |
|     }
 | |
| 
 | |
|     public final void close(boolean z) {
 | |
|         if (this.mIsClosing) {
 | |
|             return;
 | |
|         }
 | |
|         this.mIsClosing = true;
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter = next.get();
 | |
|             if (menuPresenter == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else {
 | |
|                 menuPresenter.onCloseMenu(this, z);
 | |
|             }
 | |
|         }
 | |
|         this.mIsClosing = false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.Menu
 | |
|     public void close() {
 | |
|         close(true);
 | |
|     }
 | |
| 
 | |
|     public void onItemsChanged(boolean z) {
 | |
|         if (this.mPreventDispatchingItemsChanged) {
 | |
|             this.mItemsChangedWhileDispatchPrevented = true;
 | |
|             if (z) {
 | |
|                 this.mStructureChangedWhileDispatchPrevented = true;
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         if (z) {
 | |
|             this.mIsVisibleItemsStale = true;
 | |
|             this.mIsActionItemsStale = true;
 | |
|         }
 | |
|         dispatchPresenterUpdate(z);
 | |
|     }
 | |
| 
 | |
|     public void startDispatchingItemsChanged() {
 | |
|         this.mPreventDispatchingItemsChanged = false;
 | |
|         if (this.mItemsChangedWhileDispatchPrevented) {
 | |
|             this.mItemsChangedWhileDispatchPrevented = false;
 | |
|             onItemsChanged(this.mStructureChangedWhileDispatchPrevented);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void onItemVisibleChanged(MenuItemImpl menuItemImpl) {
 | |
|         this.mIsVisibleItemsStale = true;
 | |
|         onItemsChanged(true);
 | |
|     }
 | |
| 
 | |
|     void onItemActionRequestChanged(MenuItemImpl menuItemImpl) {
 | |
|         this.mIsActionItemsStale = true;
 | |
|         onItemsChanged(true);
 | |
|     }
 | |
| 
 | |
|     public ArrayList<MenuItemImpl> getVisibleItems() {
 | |
|         if (!this.mIsVisibleItemsStale) {
 | |
|             return this.mVisibleItems;
 | |
|         }
 | |
|         this.mVisibleItems.clear();
 | |
|         int size = this.mItems.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             MenuItemImpl menuItemImpl = this.mItems.get(i);
 | |
|             if (menuItemImpl.isVisible()) {
 | |
|                 this.mVisibleItems.add(menuItemImpl);
 | |
|             }
 | |
|         }
 | |
|         this.mIsVisibleItemsStale = false;
 | |
|         this.mIsActionItemsStale = true;
 | |
|         return this.mVisibleItems;
 | |
|     }
 | |
| 
 | |
|     public void flagActionItems() {
 | |
|         ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
 | |
|         if (this.mIsActionItemsStale) {
 | |
|             Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|             boolean z = false;
 | |
|             while (it.hasNext()) {
 | |
|                 WeakReference<MenuPresenter> next = it.next();
 | |
|                 MenuPresenter menuPresenter = next.get();
 | |
|                 if (menuPresenter == null) {
 | |
|                     this.mPresenters.remove(next);
 | |
|                 } else {
 | |
|                     z |= menuPresenter.flagActionItems();
 | |
|                 }
 | |
|             }
 | |
|             if (z) {
 | |
|                 this.mActionItems.clear();
 | |
|                 this.mNonActionItems.clear();
 | |
|                 int size = visibleItems.size();
 | |
|                 for (int i = 0; i < size; i++) {
 | |
|                     MenuItemImpl menuItemImpl = visibleItems.get(i);
 | |
|                     if (menuItemImpl.isActionButton()) {
 | |
|                         this.mActionItems.add(menuItemImpl);
 | |
|                     } else {
 | |
|                         this.mNonActionItems.add(menuItemImpl);
 | |
|                     }
 | |
|                 }
 | |
|             } else {
 | |
|                 this.mActionItems.clear();
 | |
|                 this.mNonActionItems.clear();
 | |
|                 this.mNonActionItems.addAll(getVisibleItems());
 | |
|             }
 | |
|             this.mIsActionItemsStale = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public ArrayList<MenuItemImpl> getActionItems() {
 | |
|         flagActionItems();
 | |
|         return this.mActionItems;
 | |
|     }
 | |
| 
 | |
|     public ArrayList<MenuItemImpl> getNonActionItems() {
 | |
|         flagActionItems();
 | |
|         return this.mNonActionItems;
 | |
|     }
 | |
| 
 | |
|     public void clearHeader() {
 | |
|         this.mHeaderIcon = null;
 | |
|         this.mHeaderTitle = null;
 | |
|         this.mHeaderView = null;
 | |
|         onItemsChanged(false);
 | |
|     }
 | |
| 
 | |
|     private void setHeaderInternal(int i, CharSequence charSequence, int i2, Drawable drawable, View view) {
 | |
|         Resources resources = getResources();
 | |
|         if (view != null) {
 | |
|             this.mHeaderView = view;
 | |
|             this.mHeaderTitle = null;
 | |
|             this.mHeaderIcon = null;
 | |
|         } else {
 | |
|             if (i > 0) {
 | |
|                 this.mHeaderTitle = resources.getText(i);
 | |
|             } else if (charSequence != null) {
 | |
|                 this.mHeaderTitle = charSequence;
 | |
|             }
 | |
|             if (i2 > 0) {
 | |
|                 this.mHeaderIcon = ContextCompat.getDrawable(getContext(), i2);
 | |
|             } else if (drawable != null) {
 | |
|                 this.mHeaderIcon = drawable;
 | |
|             }
 | |
|             this.mHeaderView = null;
 | |
|         }
 | |
|         onItemsChanged(false);
 | |
|     }
 | |
| 
 | |
|     protected MenuBuilder setHeaderTitleInt(CharSequence charSequence) {
 | |
|         setHeaderInternal(0, charSequence, 0, null, null);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     protected MenuBuilder setHeaderTitleInt(int i) {
 | |
|         setHeaderInternal(i, null, 0, null, null);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     protected MenuBuilder setHeaderIconInt(Drawable drawable) {
 | |
|         setHeaderInternal(0, null, 0, drawable, null);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     protected MenuBuilder setHeaderIconInt(int i) {
 | |
|         setHeaderInternal(0, null, i, null, null);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     protected MenuBuilder setHeaderViewInt(View view) {
 | |
|         setHeaderInternal(0, null, 0, null, view);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public boolean expandItemActionView(MenuItemImpl menuItemImpl) {
 | |
|         boolean z = false;
 | |
|         if (this.mPresenters.isEmpty()) {
 | |
|             return false;
 | |
|         }
 | |
|         stopDispatchingItemsChanged();
 | |
|         Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             WeakReference<MenuPresenter> next = it.next();
 | |
|             MenuPresenter menuPresenter = next.get();
 | |
|             if (menuPresenter == null) {
 | |
|                 this.mPresenters.remove(next);
 | |
|             } else {
 | |
|                 z = menuPresenter.expandItemActionView(this, menuItemImpl);
 | |
|                 if (z) {
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         startDispatchingItemsChanged();
 | |
|         if (z) {
 | |
|             this.mExpandedItem = menuItemImpl;
 | |
|         }
 | |
|         return z;
 | |
|     }
 | |
| 
 | |
|     public boolean collapseItemActionView(MenuItemImpl menuItemImpl) {
 | |
|         boolean z = false;
 | |
|         if (!this.mPresenters.isEmpty() && this.mExpandedItem == menuItemImpl) {
 | |
|             stopDispatchingItemsChanged();
 | |
|             Iterator<WeakReference<MenuPresenter>> it = this.mPresenters.iterator();
 | |
|             while (it.hasNext()) {
 | |
|                 WeakReference<MenuPresenter> next = it.next();
 | |
|                 MenuPresenter menuPresenter = next.get();
 | |
|                 if (menuPresenter == null) {
 | |
|                     this.mPresenters.remove(next);
 | |
|                 } else {
 | |
|                     z = menuPresenter.collapseItemActionView(this, menuItemImpl);
 | |
|                     if (z) {
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             startDispatchingItemsChanged();
 | |
|             if (z) {
 | |
|                 this.mExpandedItem = null;
 | |
|             }
 | |
|         }
 | |
|         return z;
 | |
|     }
 | |
| }
 |