discord-jadx/app/src/main/java/androidx/appcompat/view/SupportMenuInflater.java

402 lines
19 KiB
Java

package androidx.appcompat.view;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Xml;
import android.view.InflateException;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import androidx.annotation.LayoutRes;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.view.menu.MenuItemImpl;
import androidx.appcompat.view.menu.MenuItemWrapperICS;
import androidx.appcompat.widget.DrawableUtils;
import androidx.appcompat.widget.TintTypedArray;
import androidx.core.internal.view.SupportMenu;
import androidx.core.view.ActionProvider;
import androidx.core.view.MenuItemCompat;
import c.d.b.a.a;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
public class SupportMenuInflater extends MenuInflater {
public static final Class<?>[] ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE;
public static final Class<?>[] ACTION_VIEW_CONSTRUCTOR_SIGNATURE;
public static final String LOG_TAG = "SupportMenuInflater";
public static final int NO_ID = 0;
private static final String XML_GROUP = "group";
private static final String XML_ITEM = "item";
private static final String XML_MENU = "menu";
public final Object[] mActionProviderConstructorArguments;
public final Object[] mActionViewConstructorArguments;
public Context mContext;
private Object mRealOwner;
public static class InflatedOnMenuItemClickListener implements MenuItem.OnMenuItemClickListener {
private static final Class<?>[] PARAM_TYPES = {MenuItem.class};
private Method mMethod;
private Object mRealOwner;
public InflatedOnMenuItemClickListener(Object obj, String str) {
this.mRealOwner = obj;
Class<?> cls = obj.getClass();
try {
this.mMethod = cls.getMethod(str, PARAM_TYPES);
} catch (Exception e) {
StringBuilder Q = a.Q("Couldn't resolve menu item onClick handler ", str, " in class ");
Q.append(cls.getName());
InflateException inflateException = new InflateException(Q.toString());
inflateException.initCause(e);
throw inflateException;
}
}
@Override // android.view.MenuItem.OnMenuItemClickListener
public boolean onMenuItemClick(MenuItem menuItem) {
try {
if (this.mMethod.getReturnType() == Boolean.TYPE) {
return ((Boolean) this.mMethod.invoke(this.mRealOwner, menuItem)).booleanValue();
}
this.mMethod.invoke(this.mRealOwner, menuItem);
return true;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public class MenuState {
private static final int defaultGroupId = 0;
private static final int defaultItemCategory = 0;
private static final int defaultItemCheckable = 0;
private static final boolean defaultItemChecked = false;
private static final boolean defaultItemEnabled = true;
private static final int defaultItemId = 0;
private static final int defaultItemOrder = 0;
private static final boolean defaultItemVisible = true;
private int groupCategory;
private int groupCheckable;
private boolean groupEnabled;
private int groupId;
private int groupOrder;
private boolean groupVisible;
public ActionProvider itemActionProvider;
private String itemActionProviderClassName;
private String itemActionViewClassName;
private int itemActionViewLayout;
private boolean itemAdded;
private int itemAlphabeticModifiers;
private char itemAlphabeticShortcut;
private int itemCategoryOrder;
private int itemCheckable;
private boolean itemChecked;
private CharSequence itemContentDescription;
private boolean itemEnabled;
private int itemIconResId;
private ColorStateList itemIconTintList = null;
private PorterDuff.Mode itemIconTintMode = null;
private int itemId;
private String itemListenerMethodName;
private int itemNumericModifiers;
private char itemNumericShortcut;
private int itemShowAsAction;
private CharSequence itemTitle;
private CharSequence itemTitleCondensed;
private CharSequence itemTooltipText;
private boolean itemVisible;
private Menu menu;
public MenuState(Menu menu) {
this.menu = menu;
resetGroup();
}
private char getShortcut(String str) {
if (str == null) {
return 0;
}
return str.charAt(0);
}
private <T> T newInstance(String str, Class<?>[] clsArr, Object[] objArr) {
try {
Constructor<?> constructor = Class.forName(str, false, SupportMenuInflater.this.mContext.getClassLoader()).getConstructor(clsArr);
constructor.setAccessible(true);
return (T) constructor.newInstance(objArr);
} catch (Exception e) {
Log.w("SupportMenuInflater", "Cannot instantiate class: " + str, e);
return null;
}
}
private void setItem(MenuItem menuItem) {
boolean z2 = false;
menuItem.setChecked(this.itemChecked).setVisible(this.itemVisible).setEnabled(this.itemEnabled).setCheckable(this.itemCheckable >= 1).setTitleCondensed(this.itemTitleCondensed).setIcon(this.itemIconResId);
int i = this.itemShowAsAction;
if (i >= 0) {
menuItem.setShowAsAction(i);
}
if (this.itemListenerMethodName != null) {
if (!SupportMenuInflater.this.mContext.isRestricted()) {
menuItem.setOnMenuItemClickListener(new InflatedOnMenuItemClickListener(SupportMenuInflater.this.getRealOwner(), this.itemListenerMethodName));
} else {
throw new IllegalStateException("The android:onClick attribute cannot be used within a restricted context");
}
}
if (this.itemCheckable >= 2) {
if (menuItem instanceof MenuItemImpl) {
((MenuItemImpl) menuItem).setExclusiveCheckable(true);
} else if (menuItem instanceof MenuItemWrapperICS) {
((MenuItemWrapperICS) menuItem).setExclusiveCheckable(true);
}
}
String str = this.itemActionViewClassName;
if (str != null) {
menuItem.setActionView((View) newInstance(str, SupportMenuInflater.ACTION_VIEW_CONSTRUCTOR_SIGNATURE, SupportMenuInflater.this.mActionViewConstructorArguments));
z2 = true;
}
int i2 = this.itemActionViewLayout;
if (i2 > 0) {
if (!z2) {
menuItem.setActionView(i2);
} else {
Log.w("SupportMenuInflater", "Ignoring attribute 'itemActionViewLayout'. Action view already specified.");
}
}
ActionProvider actionProvider = this.itemActionProvider;
if (actionProvider != null) {
MenuItemCompat.setActionProvider(menuItem, actionProvider);
}
MenuItemCompat.setContentDescription(menuItem, this.itemContentDescription);
MenuItemCompat.setTooltipText(menuItem, this.itemTooltipText);
MenuItemCompat.setAlphabeticShortcut(menuItem, this.itemAlphabeticShortcut, this.itemAlphabeticModifiers);
MenuItemCompat.setNumericShortcut(menuItem, this.itemNumericShortcut, this.itemNumericModifiers);
PorterDuff.Mode mode = this.itemIconTintMode;
if (mode != null) {
MenuItemCompat.setIconTintMode(menuItem, mode);
}
ColorStateList colorStateList = this.itemIconTintList;
if (colorStateList != null) {
MenuItemCompat.setIconTintList(menuItem, colorStateList);
}
}
public void addItem() {
this.itemAdded = true;
setItem(this.menu.add(this.groupId, this.itemId, this.itemCategoryOrder, this.itemTitle));
}
public SubMenu addSubMenuItem() {
this.itemAdded = true;
SubMenu addSubMenu = this.menu.addSubMenu(this.groupId, this.itemId, this.itemCategoryOrder, this.itemTitle);
setItem(addSubMenu.getItem());
return addSubMenu;
}
public boolean hasAddedItem() {
return this.itemAdded;
}
public void readGroup(AttributeSet attributeSet) {
TypedArray obtainStyledAttributes = SupportMenuInflater.this.mContext.obtainStyledAttributes(attributeSet, R.styleable.MenuGroup);
this.groupId = obtainStyledAttributes.getResourceId(R.styleable.MenuGroup_android_id, 0);
this.groupCategory = obtainStyledAttributes.getInt(R.styleable.MenuGroup_android_menuCategory, 0);
this.groupOrder = obtainStyledAttributes.getInt(R.styleable.MenuGroup_android_orderInCategory, 0);
this.groupCheckable = obtainStyledAttributes.getInt(R.styleable.MenuGroup_android_checkableBehavior, 0);
this.groupVisible = obtainStyledAttributes.getBoolean(R.styleable.MenuGroup_android_visible, true);
this.groupEnabled = obtainStyledAttributes.getBoolean(R.styleable.MenuGroup_android_enabled, true);
obtainStyledAttributes.recycle();
}
public void readItem(AttributeSet attributeSet) {
TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(SupportMenuInflater.this.mContext, attributeSet, R.styleable.MenuItem);
this.itemId = obtainStyledAttributes.getResourceId(R.styleable.MenuItem_android_id, 0);
this.itemCategoryOrder = (obtainStyledAttributes.getInt(R.styleable.MenuItem_android_menuCategory, this.groupCategory) & -65536) | (obtainStyledAttributes.getInt(R.styleable.MenuItem_android_orderInCategory, this.groupOrder) & 65535);
this.itemTitle = obtainStyledAttributes.getText(R.styleable.MenuItem_android_title);
this.itemTitleCondensed = obtainStyledAttributes.getText(R.styleable.MenuItem_android_titleCondensed);
this.itemIconResId = obtainStyledAttributes.getResourceId(R.styleable.MenuItem_android_icon, 0);
this.itemAlphabeticShortcut = getShortcut(obtainStyledAttributes.getString(R.styleable.MenuItem_android_alphabeticShortcut));
this.itemAlphabeticModifiers = obtainStyledAttributes.getInt(R.styleable.MenuItem_alphabeticModifiers, 4096);
this.itemNumericShortcut = getShortcut(obtainStyledAttributes.getString(R.styleable.MenuItem_android_numericShortcut));
this.itemNumericModifiers = obtainStyledAttributes.getInt(R.styleable.MenuItem_numericModifiers, 4096);
int i = R.styleable.MenuItem_android_checkable;
if (obtainStyledAttributes.hasValue(i)) {
this.itemCheckable = obtainStyledAttributes.getBoolean(i, false) ? 1 : 0;
} else {
this.itemCheckable = this.groupCheckable;
}
this.itemChecked = obtainStyledAttributes.getBoolean(R.styleable.MenuItem_android_checked, false);
this.itemVisible = obtainStyledAttributes.getBoolean(R.styleable.MenuItem_android_visible, this.groupVisible);
this.itemEnabled = obtainStyledAttributes.getBoolean(R.styleable.MenuItem_android_enabled, this.groupEnabled);
this.itemShowAsAction = obtainStyledAttributes.getInt(R.styleable.MenuItem_showAsAction, -1);
this.itemListenerMethodName = obtainStyledAttributes.getString(R.styleable.MenuItem_android_onClick);
this.itemActionViewLayout = obtainStyledAttributes.getResourceId(R.styleable.MenuItem_actionLayout, 0);
this.itemActionViewClassName = obtainStyledAttributes.getString(R.styleable.MenuItem_actionViewClass);
String string = obtainStyledAttributes.getString(R.styleable.MenuItem_actionProviderClass);
this.itemActionProviderClassName = string;
boolean z2 = string != null;
if (z2 && this.itemActionViewLayout == 0 && this.itemActionViewClassName == null) {
this.itemActionProvider = (ActionProvider) newInstance(string, SupportMenuInflater.ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE, SupportMenuInflater.this.mActionProviderConstructorArguments);
} else {
if (z2) {
Log.w("SupportMenuInflater", "Ignoring attribute 'actionProviderClass'. Action view already specified.");
}
this.itemActionProvider = null;
}
this.itemContentDescription = obtainStyledAttributes.getText(R.styleable.MenuItem_contentDescription);
this.itemTooltipText = obtainStyledAttributes.getText(R.styleable.MenuItem_tooltipText);
int i2 = R.styleable.MenuItem_iconTintMode;
if (obtainStyledAttributes.hasValue(i2)) {
this.itemIconTintMode = DrawableUtils.parseTintMode(obtainStyledAttributes.getInt(i2, -1), this.itemIconTintMode);
} else {
this.itemIconTintMode = null;
}
int i3 = R.styleable.MenuItem_iconTint;
if (obtainStyledAttributes.hasValue(i3)) {
this.itemIconTintList = obtainStyledAttributes.getColorStateList(i3);
} else {
this.itemIconTintList = null;
}
obtainStyledAttributes.recycle();
this.itemAdded = false;
}
public void resetGroup() {
this.groupId = 0;
this.groupCategory = 0;
this.groupOrder = 0;
this.groupCheckable = 0;
this.groupVisible = true;
this.groupEnabled = true;
}
}
static {
Class<?>[] clsArr = {Context.class};
ACTION_VIEW_CONSTRUCTOR_SIGNATURE = clsArr;
ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE = clsArr;
}
public SupportMenuInflater(Context context) {
super(context);
this.mContext = context;
Object[] objArr = {context};
this.mActionViewConstructorArguments = objArr;
this.mActionProviderConstructorArguments = objArr;
}
private Object findRealOwner(Object obj) {
return (!(obj instanceof Activity) && (obj instanceof ContextWrapper)) ? findRealOwner(((ContextWrapper) obj).getBaseContext()) : obj;
}
private void parseMenu(XmlPullParser xmlPullParser, AttributeSet attributeSet, Menu menu) throws XmlPullParserException, IOException {
MenuState menuState = new MenuState(menu);
int eventType = xmlPullParser.getEventType();
while (true) {
if (eventType != 2) {
eventType = xmlPullParser.next();
if (eventType == 1) {
break;
}
} else {
String name = xmlPullParser.getName();
if (name.equals("menu")) {
eventType = xmlPullParser.next();
} else {
throw new RuntimeException(a.t("Expecting menu, got ", name));
}
}
}
boolean z2 = false;
boolean z3 = false;
String str = null;
while (!z2) {
if (eventType != 1) {
if (eventType != 2) {
if (eventType == 3) {
String name2 = xmlPullParser.getName();
if (z3 && name2.equals(str)) {
str = null;
z3 = false;
} else if (name2.equals("group")) {
menuState.resetGroup();
} else if (name2.equals("item")) {
if (!menuState.hasAddedItem()) {
ActionProvider actionProvider = menuState.itemActionProvider;
if (actionProvider == null || !actionProvider.hasSubMenu()) {
menuState.addItem();
} else {
menuState.addSubMenuItem();
}
}
} else if (name2.equals("menu")) {
z2 = true;
}
}
} else if (!z3) {
String name3 = xmlPullParser.getName();
if (name3.equals("group")) {
menuState.readGroup(attributeSet);
} else if (name3.equals("item")) {
menuState.readItem(attributeSet);
} else if (name3.equals("menu")) {
parseMenu(xmlPullParser, attributeSet, menuState.addSubMenuItem());
} else {
z3 = true;
str = name3;
}
}
eventType = xmlPullParser.next();
} else {
throw new RuntimeException("Unexpected end of document");
}
}
}
public Object getRealOwner() {
if (this.mRealOwner == null) {
this.mRealOwner = findRealOwner(this.mContext);
}
return this.mRealOwner;
}
@Override // android.view.MenuInflater
public void inflate(@LayoutRes int i, Menu menu) {
if (!(menu instanceof SupportMenu)) {
super.inflate(i, menu);
return;
}
XmlResourceParser xmlResourceParser = null;
try {
xmlResourceParser = this.mContext.getResources().getLayout(i);
parseMenu(xmlResourceParser, Xml.asAttributeSet(xmlResourceParser), menu);
if (xmlResourceParser != null) {
xmlResourceParser.close();
}
} catch (XmlPullParserException e) {
throw new InflateException("Error inflating menu XML", e);
} catch (IOException e2) {
throw new InflateException("Error inflating menu XML", e2);
} catch (Throwable th) {
if (xmlResourceParser != null) {
xmlResourceParser.close();
}
throw th;
}
}
}