discord-jadx/app/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java

435 lines
16 KiB
Java

package androidx.appcompat.app;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.view.InflateException;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
import androidx.appcompat.widget.AppCompatButton;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatCheckedTextView;
import androidx.appcompat.widget.AppCompatEditText;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
import androidx.appcompat.widget.AppCompatRadioButton;
import androidx.appcompat.widget.AppCompatRatingBar;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatSpinner;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.AppCompatToggleButton;
import androidx.appcompat.widget.TintContextWrapper;
import androidx.collection.SimpleArrayMap;
import androidx.core.view.ViewCompat;
import c.d.b.a.a;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AppCompatViewInflater {
private static final String LOG_TAG = "AppCompatViewInflater";
private static final String[] sClassPrefixList = {"android.widget.", "android.view.", "android.webkit."};
private static final SimpleArrayMap<String, Constructor<? extends View>> sConstructorMap = new SimpleArrayMap<>();
private static final Class<?>[] sConstructorSignature = {Context.class, AttributeSet.class};
private static final int[] sOnClickAttrs = {16843375};
private final Object[] mConstructorArgs = new Object[2];
public static class DeclaredOnClickListener implements View.OnClickListener {
private final View mHostView;
private final String mMethodName;
private Context mResolvedContext;
private Method mResolvedMethod;
public DeclaredOnClickListener(@NonNull View view, @NonNull String str) {
this.mHostView = view;
this.mMethodName = str;
}
private void resolveMethod(@Nullable Context context) {
String str;
Method method;
while (context != null) {
try {
if (!context.isRestricted() && (method = context.getClass().getMethod(this.mMethodName, View.class)) != null) {
this.mResolvedMethod = method;
this.mResolvedContext = context;
return;
}
} catch (NoSuchMethodException unused) {
}
context = context instanceof ContextWrapper ? ((ContextWrapper) context).getBaseContext() : null;
}
int id2 = this.mHostView.getId();
if (id2 == -1) {
str = "";
} else {
StringBuilder L = a.L(" with id '");
L.append(this.mHostView.getContext().getResources().getResourceEntryName(id2));
L.append("'");
str = L.toString();
}
StringBuilder L2 = a.L("Could not find method ");
L2.append(this.mMethodName);
L2.append("(View) in a parent or ancestor Context for android:onClick attribute defined on view ");
L2.append(this.mHostView.getClass());
L2.append(str);
throw new IllegalStateException(L2.toString());
}
@Override // android.view.View.OnClickListener
public void onClick(@NonNull View view) {
if (this.mResolvedMethod == null) {
resolveMethod(this.mHostView.getContext());
}
try {
this.mResolvedMethod.invoke(this.mResolvedContext, view);
} catch (IllegalAccessException e) {
throw new IllegalStateException("Could not execute non-public method for android:onClick", e);
} catch (InvocationTargetException e2) {
throw new IllegalStateException("Could not execute method for android:onClick", e2);
}
}
}
private void checkOnClickListener(View view, AttributeSet attributeSet) {
Context context = view.getContext();
if ((context instanceof ContextWrapper) && ViewCompat.hasOnClickListeners(view)) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, sOnClickAttrs);
String string = obtainStyledAttributes.getString(0);
if (string != null) {
view.setOnClickListener(new DeclaredOnClickListener(view, string));
}
obtainStyledAttributes.recycle();
}
}
private View createViewByPrefix(Context context, String str, String str2) throws ClassNotFoundException, InflateException {
String str3;
SimpleArrayMap<String, Constructor<? extends View>> simpleArrayMap = sConstructorMap;
Constructor<? extends View> constructor = simpleArrayMap.get(str);
if (constructor == null) {
if (str2 != null) {
try {
str3 = str2 + str;
} catch (Exception unused) {
return null;
}
} else {
str3 = str;
}
constructor = Class.forName(str3, false, context.getClassLoader()).asSubclass(View.class).getConstructor(sConstructorSignature);
simpleArrayMap.put(str, constructor);
}
constructor.setAccessible(true);
return (View) constructor.newInstance(this.mConstructorArgs);
}
private View createViewFromTag(Context context, String str, AttributeSet attributeSet) {
Object obj = null;
if (str.equals("view")) {
str = attributeSet.getAttributeValue(null, "class");
}
char c2 = 1;
char c3 = 0;
try {
Object[] objArr = this.mConstructorArgs;
objArr[0] = context;
objArr[1] = attributeSet;
if (-1 == str.indexOf(46)) {
int i = 0;
while (true) {
String[] strArr = sClassPrefixList;
if (i < strArr.length) {
View createViewByPrefix = createViewByPrefix(context, str, strArr[i]);
if (createViewByPrefix != null) {
return createViewByPrefix;
}
i++;
} else {
Object[] objArr2 = this.mConstructorArgs;
objArr2[0] = null;
objArr2[1] = null;
return null;
}
}
} else {
View createViewByPrefix2 = createViewByPrefix(context, str, null);
Object[] objArr3 = this.mConstructorArgs;
objArr3[0] = null;
objArr3[1] = null;
return createViewByPrefix2;
}
} catch (Exception unused) {
return null;
} finally {
Object[] objArr4 = this.mConstructorArgs;
objArr4[c3] = obj;
objArr4[c2] = obj;
}
}
private static Context themifyContext(Context context, AttributeSet attributeSet, boolean z2, boolean z3) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.View, 0, 0);
int resourceId = z2 ? obtainStyledAttributes.getResourceId(R.styleable.View_android_theme, 0) : 0;
if (z3 && resourceId == 0 && (resourceId = obtainStyledAttributes.getResourceId(R.styleable.View_theme, 0)) != 0) {
Log.i(LOG_TAG, "app:theme is now deprecated. Please move to using android:theme instead.");
}
obtainStyledAttributes.recycle();
return resourceId != 0 ? (!(context instanceof ContextThemeWrapper) || ((ContextThemeWrapper) context).getThemeResId() != resourceId) ? new ContextThemeWrapper(context, resourceId) : context : context;
}
private void verifyNotNull(View view, String str) {
if (view == null) {
throw new IllegalStateException(getClass().getName() + " asked to inflate view for <" + str + ">, but returned null");
}
}
@NonNull
public AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context, AttributeSet attributeSet) {
return new AppCompatAutoCompleteTextView(context, attributeSet);
}
@NonNull
public AppCompatButton createButton(Context context, AttributeSet attributeSet) {
return new AppCompatButton(context, attributeSet);
}
@NonNull
public AppCompatCheckBox createCheckBox(Context context, AttributeSet attributeSet) {
return new AppCompatCheckBox(context, attributeSet);
}
@NonNull
public AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attributeSet) {
return new AppCompatCheckedTextView(context, attributeSet);
}
@NonNull
public AppCompatEditText createEditText(Context context, AttributeSet attributeSet) {
return new AppCompatEditText(context, attributeSet);
}
@NonNull
public AppCompatImageButton createImageButton(Context context, AttributeSet attributeSet) {
return new AppCompatImageButton(context, attributeSet);
}
@NonNull
public AppCompatImageView createImageView(Context context, AttributeSet attributeSet) {
return new AppCompatImageView(context, attributeSet);
}
@NonNull
public AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context, AttributeSet attributeSet) {
return new AppCompatMultiAutoCompleteTextView(context, attributeSet);
}
@NonNull
public AppCompatRadioButton createRadioButton(Context context, AttributeSet attributeSet) {
return new AppCompatRadioButton(context, attributeSet);
}
@NonNull
public AppCompatRatingBar createRatingBar(Context context, AttributeSet attributeSet) {
return new AppCompatRatingBar(context, attributeSet);
}
@NonNull
public AppCompatSeekBar createSeekBar(Context context, AttributeSet attributeSet) {
return new AppCompatSeekBar(context, attributeSet);
}
@NonNull
public AppCompatSpinner createSpinner(Context context, AttributeSet attributeSet) {
return new AppCompatSpinner(context, attributeSet);
}
@NonNull
public AppCompatTextView createTextView(Context context, AttributeSet attributeSet) {
return new AppCompatTextView(context, attributeSet);
}
@NonNull
public AppCompatToggleButton createToggleButton(Context context, AttributeSet attributeSet) {
return new AppCompatToggleButton(context, attributeSet);
}
@Nullable
public View createView(Context context, String str, AttributeSet attributeSet) {
return null;
}
public final View createView(View view, String str, @NonNull Context context, @NonNull AttributeSet attributeSet, boolean z2, boolean z3, boolean z4, boolean z5) {
View view2;
Context context2 = (!z2 || view == null) ? context : view.getContext();
if (z3 || z4) {
context2 = themifyContext(context2, attributeSet, z3, z4);
}
if (z5) {
context2 = TintContextWrapper.wrap(context2);
}
str.hashCode();
char c2 = 65535;
switch (str.hashCode()) {
case -1946472170:
if (str.equals("RatingBar")) {
c2 = 0;
break;
}
break;
case -1455429095:
if (str.equals("CheckedTextView")) {
c2 = 1;
break;
}
break;
case -1346021293:
if (str.equals("MultiAutoCompleteTextView")) {
c2 = 2;
break;
}
break;
case -938935918:
if (str.equals("TextView")) {
c2 = 3;
break;
}
break;
case -937446323:
if (str.equals("ImageButton")) {
c2 = 4;
break;
}
break;
case -658531749:
if (str.equals("SeekBar")) {
c2 = 5;
break;
}
break;
case -339785223:
if (str.equals("Spinner")) {
c2 = 6;
break;
}
break;
case 776382189:
if (str.equals("RadioButton")) {
c2 = 7;
break;
}
break;
case 799298502:
if (str.equals("ToggleButton")) {
c2 = '\b';
break;
}
break;
case 1125864064:
if (str.equals("ImageView")) {
c2 = '\t';
break;
}
break;
case 1413872058:
if (str.equals("AutoCompleteTextView")) {
c2 = '\n';
break;
}
break;
case 1601505219:
if (str.equals("CheckBox")) {
c2 = 11;
break;
}
break;
case 1666676343:
if (str.equals("EditText")) {
c2 = '\f';
break;
}
break;
case 2001146706:
if (str.equals("Button")) {
c2 = '\r';
break;
}
break;
}
switch (c2) {
case 0:
view2 = createRatingBar(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 1:
view2 = createCheckedTextView(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 2:
view2 = createMultiAutoCompleteTextView(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 3:
view2 = createTextView(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 4:
view2 = createImageButton(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 5:
view2 = createSeekBar(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 6:
view2 = createSpinner(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 7:
view2 = createRadioButton(context2, attributeSet);
verifyNotNull(view2, str);
break;
case '\b':
view2 = createToggleButton(context2, attributeSet);
verifyNotNull(view2, str);
break;
case '\t':
view2 = createImageView(context2, attributeSet);
verifyNotNull(view2, str);
break;
case '\n':
view2 = createAutoCompleteTextView(context2, attributeSet);
verifyNotNull(view2, str);
break;
case 11:
view2 = createCheckBox(context2, attributeSet);
verifyNotNull(view2, str);
break;
case '\f':
view2 = createEditText(context2, attributeSet);
verifyNotNull(view2, str);
break;
case '\r':
view2 = createButton(context2, attributeSet);
verifyNotNull(view2, str);
break;
default:
view2 = createView(context2, str, attributeSet);
break;
}
if (view2 == null && context != context2) {
view2 = createViewFromTag(context2, str, attributeSet);
}
if (view2 != null) {
checkOnClickListener(view2, attributeSet);
}
return view2;
}
}