2021-07-24 02:37:17 +00:00
|
|
|
package androidx.core.view;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import c.d.b.a.a;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
public final class LayoutInflaterCompat {
|
|
|
|
private static final String TAG = "LayoutInflaterCompatHC";
|
|
|
|
private static boolean sCheckedField;
|
|
|
|
private static Field sLayoutInflaterFactory2Field;
|
|
|
|
|
|
|
|
public static class Factory2Wrapper implements LayoutInflater.Factory2 {
|
|
|
|
public final LayoutInflaterFactory mDelegateFactory;
|
|
|
|
|
|
|
|
public Factory2Wrapper(LayoutInflaterFactory layoutInflaterFactory) {
|
|
|
|
this.mDelegateFactory = layoutInflaterFactory;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // android.view.LayoutInflater.Factory2
|
|
|
|
public View onCreateView(View view, String str, Context context, AttributeSet attributeSet) {
|
|
|
|
return this.mDelegateFactory.onCreateView(view, str, context, attributeSet);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // android.view.LayoutInflater.Factory
|
|
|
|
public View onCreateView(String str, Context context, AttributeSet attributeSet) {
|
|
|
|
return this.mDelegateFactory.onCreateView(null, str, context, attributeSet);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // java.lang.Object
|
|
|
|
@NonNull
|
|
|
|
public String toString() {
|
|
|
|
return getClass().getName() + "{" + this.mDelegateFactory + "}";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private LayoutInflaterCompat() {
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void forceSetFactory2(LayoutInflater layoutInflater, LayoutInflater.Factory2 factory2) {
|
|
|
|
if (!sCheckedField) {
|
|
|
|
try {
|
|
|
|
Field declaredField = LayoutInflater.class.getDeclaredField("mFactory2");
|
|
|
|
sLayoutInflaterFactory2Field = declaredField;
|
|
|
|
declaredField.setAccessible(true);
|
|
|
|
} catch (NoSuchFieldException e) {
|
2021-11-05 06:48:17 +00:00
|
|
|
StringBuilder R = a.R("forceSetFactory2 Could not find field 'mFactory2' on class ");
|
|
|
|
R.append(LayoutInflater.class.getName());
|
|
|
|
R.append("; inflation may have unexpected results.");
|
|
|
|
Log.e(TAG, R.toString(), e);
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
sCheckedField = true;
|
|
|
|
}
|
|
|
|
Field field = sLayoutInflaterFactory2Field;
|
|
|
|
if (field != null) {
|
|
|
|
try {
|
|
|
|
field.set(layoutInflater, factory2);
|
|
|
|
} catch (IllegalAccessException e2) {
|
2021-08-09 22:51:56 +00:00
|
|
|
Log.e(TAG, "forceSetFactory2 could not set the Factory2 on LayoutInflater " + layoutInflater + "; inflation may have unexpected results.", e2);
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static LayoutInflaterFactory getFactory(LayoutInflater layoutInflater) {
|
|
|
|
LayoutInflater.Factory factory = layoutInflater.getFactory();
|
|
|
|
if (factory instanceof Factory2Wrapper) {
|
|
|
|
return ((Factory2Wrapper) factory).mDelegateFactory;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void setFactory(@NonNull LayoutInflater layoutInflater, @NonNull LayoutInflaterFactory layoutInflaterFactory) {
|
|
|
|
layoutInflater.setFactory2(layoutInflaterFactory != null ? new Factory2Wrapper(layoutInflaterFactory) : null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setFactory2(@NonNull LayoutInflater layoutInflater, @NonNull LayoutInflater.Factory2 factory2) {
|
|
|
|
layoutInflater.setFactory2(factory2);
|
|
|
|
}
|
|
|
|
}
|