ADD week 5
This commit is contained in:
		| @@ -0,0 +1,982 @@ | ||||
| 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; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user