1986 lines
75 KiB
Java
1986 lines
75 KiB
Java
package androidx.core.view;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.app.Activity;
|
|
import android.content.ClipData;
|
|
import android.content.Context;
|
|
import android.content.ContextWrapper;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.Matrix;
|
|
import android.graphics.Paint;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.util.Log;
|
|
import android.util.SparseArray;
|
|
import android.view.Display;
|
|
import android.view.KeyEvent;
|
|
import android.view.PointerIcon;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.ViewParent;
|
|
import android.view.ViewTreeObserver;
|
|
import android.view.Window;
|
|
import android.view.WindowInsets;
|
|
import android.view.WindowInsetsController;
|
|
import android.view.accessibility.AccessibilityEvent;
|
|
import android.view.accessibility.AccessibilityManager;
|
|
import android.view.accessibility.AccessibilityNodeProvider;
|
|
import androidx.annotation.FloatRange;
|
|
import androidx.annotation.IdRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.Px;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.UiThread;
|
|
import androidx.collection.SimpleArrayMap;
|
|
import androidx.core.R;
|
|
import androidx.core.util.Preconditions;
|
|
import androidx.core.view.AccessibilityDelegateCompat;
|
|
import androidx.core.view.WindowInsetsAnimationCompat;
|
|
import androidx.core.view.WindowInsetsCompat;
|
|
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
|
import androidx.core.view.accessibility.AccessibilityNodeProviderCompat;
|
|
import androidx.core.view.accessibility.AccessibilityViewCommand;
|
|
import c.d.b.a.a;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.ref.WeakReference;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.WeakHashMap;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
@SuppressLint({"PrivateConstructorForUtilityClass"})
|
|
public class ViewCompat {
|
|
private static final int[] ACCESSIBILITY_ACTIONS_RESOURCE_IDS = {R.id.accessibility_custom_action_0, R.id.accessibility_custom_action_1, R.id.accessibility_custom_action_2, R.id.accessibility_custom_action_3, R.id.accessibility_custom_action_4, R.id.accessibility_custom_action_5, R.id.accessibility_custom_action_6, R.id.accessibility_custom_action_7, R.id.accessibility_custom_action_8, R.id.accessibility_custom_action_9, R.id.accessibility_custom_action_10, R.id.accessibility_custom_action_11, R.id.accessibility_custom_action_12, R.id.accessibility_custom_action_13, R.id.accessibility_custom_action_14, R.id.accessibility_custom_action_15, R.id.accessibility_custom_action_16, R.id.accessibility_custom_action_17, R.id.accessibility_custom_action_18, R.id.accessibility_custom_action_19, R.id.accessibility_custom_action_20, R.id.accessibility_custom_action_21, R.id.accessibility_custom_action_22, R.id.accessibility_custom_action_23, R.id.accessibility_custom_action_24, R.id.accessibility_custom_action_25, R.id.accessibility_custom_action_26, R.id.accessibility_custom_action_27, R.id.accessibility_custom_action_28, R.id.accessibility_custom_action_29, R.id.accessibility_custom_action_30, R.id.accessibility_custom_action_31};
|
|
public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2;
|
|
public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0;
|
|
public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1;
|
|
public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0;
|
|
public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2;
|
|
public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4;
|
|
public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1;
|
|
@Deprecated
|
|
public static final int LAYER_TYPE_HARDWARE = 2;
|
|
@Deprecated
|
|
public static final int LAYER_TYPE_NONE = 0;
|
|
@Deprecated
|
|
public static final int LAYER_TYPE_SOFTWARE = 1;
|
|
public static final int LAYOUT_DIRECTION_INHERIT = 2;
|
|
public static final int LAYOUT_DIRECTION_LOCALE = 3;
|
|
public static final int LAYOUT_DIRECTION_LTR = 0;
|
|
public static final int LAYOUT_DIRECTION_RTL = 1;
|
|
@Deprecated
|
|
public static final int MEASURED_HEIGHT_STATE_SHIFT = 16;
|
|
@Deprecated
|
|
public static final int MEASURED_SIZE_MASK = 16777215;
|
|
@Deprecated
|
|
public static final int MEASURED_STATE_MASK = -16777216;
|
|
@Deprecated
|
|
public static final int MEASURED_STATE_TOO_SMALL = 16777216;
|
|
private static final OnReceiveContentViewBehavior NO_OP_ON_RECEIVE_CONTENT_VIEW_BEHAVIOR = new AnonymousClass1();
|
|
@Deprecated
|
|
public static final int OVER_SCROLL_ALWAYS = 0;
|
|
@Deprecated
|
|
public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1;
|
|
@Deprecated
|
|
public static final int OVER_SCROLL_NEVER = 2;
|
|
public static final int SCROLL_AXIS_HORIZONTAL = 1;
|
|
public static final int SCROLL_AXIS_NONE = 0;
|
|
public static final int SCROLL_AXIS_VERTICAL = 2;
|
|
public static final int SCROLL_INDICATOR_BOTTOM = 2;
|
|
public static final int SCROLL_INDICATOR_END = 32;
|
|
public static final int SCROLL_INDICATOR_LEFT = 4;
|
|
public static final int SCROLL_INDICATOR_RIGHT = 8;
|
|
public static final int SCROLL_INDICATOR_START = 16;
|
|
public static final int SCROLL_INDICATOR_TOP = 1;
|
|
private static final String TAG = "ViewCompat";
|
|
public static final int TYPE_NON_TOUCH = 1;
|
|
public static final int TYPE_TOUCH = 0;
|
|
private static boolean sAccessibilityDelegateCheckFailed = false;
|
|
private static Field sAccessibilityDelegateField;
|
|
private static AccessibilityPaneVisibilityManager sAccessibilityPaneVisibilityManager = new AccessibilityPaneVisibilityManager();
|
|
private static Method sChildrenDrawingOrderMethod;
|
|
private static Method sDispatchFinishTemporaryDetach;
|
|
private static Method sDispatchStartTemporaryDetach;
|
|
private static Field sMinHeightField;
|
|
private static boolean sMinHeightFieldFetched;
|
|
private static Field sMinWidthField;
|
|
private static boolean sMinWidthFieldFetched;
|
|
private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
|
|
private static boolean sTempDetachBound;
|
|
private static ThreadLocal<Rect> sThreadLocalRect;
|
|
private static WeakHashMap<View, String> sTransitionNameMap;
|
|
private static WeakHashMap<View, ViewPropertyAnimatorCompat> sViewPropertyAnimatorMap = null;
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements OnReceiveContentViewBehavior {
|
|
@Override // androidx.core.view.OnReceiveContentViewBehavior
|
|
public ContentInfoCompat onReceiveContent(@NonNull ContentInfoCompat contentInfoCompat) {
|
|
return contentInfoCompat;
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$2 reason: invalid class name */
|
|
public class AnonymousClass2 extends AccessibilityViewProperty<Boolean> {
|
|
public AnonymousClass2(int i, Class cls, int i2) {
|
|
super(i, cls, i2);
|
|
}
|
|
|
|
@Override // androidx.core.view.ViewCompat.AccessibilityViewProperty
|
|
@RequiresApi(28)
|
|
public Boolean frameworkGet(View view) {
|
|
return Boolean.valueOf(view.isScreenReaderFocusable());
|
|
}
|
|
|
|
@RequiresApi(28)
|
|
public void frameworkSet(View view, Boolean bool) {
|
|
view.setScreenReaderFocusable(bool.booleanValue());
|
|
}
|
|
|
|
public boolean shouldUpdate(Boolean bool, Boolean bool2) {
|
|
return !booleanNullToFalseEquals(bool, bool2);
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$3 reason: invalid class name */
|
|
public class AnonymousClass3 extends AccessibilityViewProperty<CharSequence> {
|
|
public AnonymousClass3(int i, Class cls, int i2, int i3) {
|
|
super(i, cls, i2, i3);
|
|
}
|
|
|
|
@Override // androidx.core.view.ViewCompat.AccessibilityViewProperty
|
|
@RequiresApi(28)
|
|
public CharSequence frameworkGet(View view) {
|
|
return view.getAccessibilityPaneTitle();
|
|
}
|
|
|
|
@RequiresApi(28)
|
|
public void frameworkSet(View view, CharSequence charSequence) {
|
|
view.setAccessibilityPaneTitle(charSequence);
|
|
}
|
|
|
|
public boolean shouldUpdate(CharSequence charSequence, CharSequence charSequence2) {
|
|
return !TextUtils.equals(charSequence, charSequence2);
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$4 reason: invalid class name */
|
|
public class AnonymousClass4 extends AccessibilityViewProperty<CharSequence> {
|
|
public AnonymousClass4(int i, Class cls, int i2, int i3) {
|
|
super(i, cls, i2, i3);
|
|
}
|
|
|
|
@Override // androidx.core.view.ViewCompat.AccessibilityViewProperty
|
|
@RequiresApi(30)
|
|
public CharSequence frameworkGet(View view) {
|
|
return view.getStateDescription();
|
|
}
|
|
|
|
@RequiresApi(30)
|
|
public void frameworkSet(View view, CharSequence charSequence) {
|
|
view.setStateDescription(charSequence);
|
|
}
|
|
|
|
public boolean shouldUpdate(CharSequence charSequence, CharSequence charSequence2) {
|
|
return !TextUtils.equals(charSequence, charSequence2);
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$5 reason: invalid class name */
|
|
public class AnonymousClass5 extends AccessibilityViewProperty<Boolean> {
|
|
public AnonymousClass5(int i, Class cls, int i2) {
|
|
super(i, cls, i2);
|
|
}
|
|
|
|
@Override // androidx.core.view.ViewCompat.AccessibilityViewProperty
|
|
@RequiresApi(28)
|
|
public Boolean frameworkGet(View view) {
|
|
return Boolean.valueOf(view.isAccessibilityHeading());
|
|
}
|
|
|
|
@RequiresApi(28)
|
|
public void frameworkSet(View view, Boolean bool) {
|
|
view.setAccessibilityHeading(bool.booleanValue());
|
|
}
|
|
|
|
public boolean shouldUpdate(Boolean bool, Boolean bool2) {
|
|
return !booleanNullToFalseEquals(bool, bool2);
|
|
}
|
|
}
|
|
|
|
public static class AccessibilityPaneVisibilityManager implements ViewTreeObserver.OnGlobalLayoutListener, View.OnAttachStateChangeListener {
|
|
private WeakHashMap<View, Boolean> mPanesToVisible = new WeakHashMap<>();
|
|
|
|
@RequiresApi(19)
|
|
private void checkPaneVisibility(View view, boolean z2) {
|
|
boolean z3 = view.getVisibility() == 0;
|
|
if (z2 != z3) {
|
|
ViewCompat.notifyViewAccessibilityStateChangedIfNeeded(view, z3 ? 16 : 32);
|
|
this.mPanesToVisible.put(view, Boolean.valueOf(z3));
|
|
}
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
private void registerForLayoutCallback(View view) {
|
|
view.getViewTreeObserver().addOnGlobalLayoutListener(this);
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
private void unregisterForLayoutCallback(View view) {
|
|
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
public void addAccessibilityPane(View view) {
|
|
this.mPanesToVisible.put(view, Boolean.valueOf(view.getVisibility() == 0));
|
|
view.addOnAttachStateChangeListener(this);
|
|
if (view.isAttachedToWindow()) {
|
|
registerForLayoutCallback(view);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.ViewTreeObserver.OnGlobalLayoutListener
|
|
@RequiresApi(19)
|
|
public void onGlobalLayout() {
|
|
if (Build.VERSION.SDK_INT < 28) {
|
|
for (Map.Entry<View, Boolean> entry : this.mPanesToVisible.entrySet()) {
|
|
checkPaneVisibility(entry.getKey(), entry.getValue().booleanValue());
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View.OnAttachStateChangeListener
|
|
@RequiresApi(19)
|
|
public void onViewAttachedToWindow(View view) {
|
|
registerForLayoutCallback(view);
|
|
}
|
|
|
|
@Override // android.view.View.OnAttachStateChangeListener
|
|
public void onViewDetachedFromWindow(View view) {
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
public void removeAccessibilityPane(View view) {
|
|
this.mPanesToVisible.remove(view);
|
|
view.removeOnAttachStateChangeListener(this);
|
|
unregisterForLayoutCallback(view);
|
|
}
|
|
}
|
|
|
|
public static abstract class AccessibilityViewProperty<T> {
|
|
private final int mContentChangeType;
|
|
private final int mFrameworkMinimumSdk;
|
|
private final int mTagKey;
|
|
private final Class<T> mType;
|
|
|
|
public AccessibilityViewProperty(int i, Class<T> cls, int i2) {
|
|
this(i, cls, 0, i2);
|
|
}
|
|
|
|
public AccessibilityViewProperty(int i, Class<T> cls, int i2, int i3) {
|
|
this.mTagKey = i;
|
|
this.mType = cls;
|
|
this.mContentChangeType = i2;
|
|
this.mFrameworkMinimumSdk = i3;
|
|
}
|
|
|
|
private boolean extrasAvailable() {
|
|
return true;
|
|
}
|
|
|
|
private boolean frameworkAvailable() {
|
|
return Build.VERSION.SDK_INT >= this.mFrameworkMinimumSdk;
|
|
}
|
|
|
|
public boolean booleanNullToFalseEquals(Boolean bool, Boolean bool2) {
|
|
return (bool == null ? false : bool.booleanValue()) == (bool2 == null ? false : bool2.booleanValue());
|
|
}
|
|
|
|
public abstract T frameworkGet(View view);
|
|
|
|
public abstract void frameworkSet(View view, T t);
|
|
|
|
public T get(View view) {
|
|
if (frameworkAvailable()) {
|
|
return frameworkGet(view);
|
|
}
|
|
if (!extrasAvailable()) {
|
|
return null;
|
|
}
|
|
T t = (T) view.getTag(this.mTagKey);
|
|
if (this.mType.isInstance(t)) {
|
|
return t;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void set(View view, T t) {
|
|
if (frameworkAvailable()) {
|
|
frameworkSet(view, t);
|
|
} else if (extrasAvailable() && shouldUpdate(get(view), t)) {
|
|
ViewCompat.getOrCreateAccessibilityDelegateCompat(view);
|
|
view.setTag(this.mTagKey, t);
|
|
ViewCompat.notifyViewAccessibilityStateChangedIfNeeded(view, this.mContentChangeType);
|
|
}
|
|
}
|
|
|
|
public boolean shouldUpdate(T t, T t2) {
|
|
return !t2.equals(t);
|
|
}
|
|
}
|
|
|
|
@RequiresApi(21)
|
|
public static class Api21Impl {
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$Api21Impl$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements View.OnApplyWindowInsetsListener {
|
|
public WindowInsetsCompat mLastInsets = null;
|
|
public final /* synthetic */ OnApplyWindowInsetsListener val$listener;
|
|
public final /* synthetic */ View val$v;
|
|
|
|
public AnonymousClass1(View view, OnApplyWindowInsetsListener onApplyWindowInsetsListener) {
|
|
this.val$v = view;
|
|
this.val$listener = onApplyWindowInsetsListener;
|
|
}
|
|
|
|
@Override // android.view.View.OnApplyWindowInsetsListener
|
|
public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
|
|
WindowInsetsCompat windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat(windowInsets, view);
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i < 30) {
|
|
Api21Impl.callCompatInsetAnimationCallback(windowInsets, this.val$v);
|
|
if (windowInsetsCompat.equals(this.mLastInsets)) {
|
|
return this.val$listener.onApplyWindowInsets(view, windowInsetsCompat).toWindowInsets();
|
|
}
|
|
}
|
|
this.mLastInsets = windowInsetsCompat;
|
|
WindowInsetsCompat onApplyWindowInsets = this.val$listener.onApplyWindowInsets(view, windowInsetsCompat);
|
|
if (i >= 30) {
|
|
return onApplyWindowInsets.toWindowInsets();
|
|
}
|
|
ViewCompat.requestApplyInsets(view);
|
|
return onApplyWindowInsets.toWindowInsets();
|
|
}
|
|
}
|
|
|
|
private Api21Impl() {
|
|
}
|
|
|
|
public static void callCompatInsetAnimationCallback(@NonNull WindowInsets windowInsets, @NonNull View view) {
|
|
View.OnApplyWindowInsetsListener onApplyWindowInsetsListener = (View.OnApplyWindowInsetsListener) view.getTag(R.id.tag_window_insets_animation_callback);
|
|
if (onApplyWindowInsetsListener != null) {
|
|
onApplyWindowInsetsListener.onApplyWindowInsets(view, windowInsets);
|
|
}
|
|
}
|
|
|
|
public static WindowInsetsCompat computeSystemWindowInsets(@NonNull View view, @NonNull WindowInsetsCompat windowInsetsCompat, @NonNull Rect rect) {
|
|
WindowInsets windowInsets = windowInsetsCompat.toWindowInsets();
|
|
if (windowInsets != null) {
|
|
return WindowInsetsCompat.toWindowInsetsCompat(view.computeSystemWindowInsets(windowInsets, rect), view);
|
|
}
|
|
rect.setEmpty();
|
|
return windowInsetsCompat;
|
|
}
|
|
|
|
@Nullable
|
|
public static WindowInsetsCompat getRootWindowInsets(@NonNull View view) {
|
|
return WindowInsetsCompat.Api21ReflectionHolder.getRootWindowInsets(view);
|
|
}
|
|
|
|
public static void setOnApplyWindowInsetsListener(@NonNull View view, @Nullable OnApplyWindowInsetsListener onApplyWindowInsetsListener) {
|
|
if (Build.VERSION.SDK_INT < 30) {
|
|
view.setTag(R.id.tag_on_apply_window_listener, onApplyWindowInsetsListener);
|
|
}
|
|
if (onApplyWindowInsetsListener == null) {
|
|
view.setOnApplyWindowInsetsListener((View.OnApplyWindowInsetsListener) view.getTag(R.id.tag_window_insets_animation_callback));
|
|
} else {
|
|
view.setOnApplyWindowInsetsListener(new AnonymousClass1(view, onApplyWindowInsetsListener));
|
|
}
|
|
}
|
|
}
|
|
|
|
@RequiresApi(23)
|
|
public static class Api23Impl {
|
|
private Api23Impl() {
|
|
}
|
|
|
|
@Nullable
|
|
public static WindowInsetsCompat getRootWindowInsets(@NonNull View view) {
|
|
WindowInsets rootWindowInsets = view.getRootWindowInsets();
|
|
if (rootWindowInsets == null) {
|
|
return null;
|
|
}
|
|
WindowInsetsCompat windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat(rootWindowInsets);
|
|
windowInsetsCompat.setRootWindowInsets(windowInsetsCompat);
|
|
windowInsetsCompat.copyRootViewBounds(view.getRootView());
|
|
return windowInsetsCompat;
|
|
}
|
|
}
|
|
|
|
@RequiresApi(29)
|
|
public static class Api29Impl {
|
|
private Api29Impl() {
|
|
}
|
|
|
|
public static void saveAttributeDataForStyleable(@NonNull View view, @NonNull Context context, @NonNull int[] iArr, @Nullable AttributeSet attributeSet, @NonNull TypedArray typedArray, int i, int i2) {
|
|
view.saveAttributeDataForStyleable(context, iArr, attributeSet, typedArray, i, i2);
|
|
}
|
|
}
|
|
|
|
@RequiresApi(30)
|
|
public static class Api30Impl {
|
|
private Api30Impl() {
|
|
}
|
|
|
|
@Nullable
|
|
public static WindowInsetsControllerCompat getWindowInsetsController(@NonNull View view) {
|
|
WindowInsetsController windowInsetsController = view.getWindowInsetsController();
|
|
if (windowInsetsController != null) {
|
|
return WindowInsetsControllerCompat.toWindowInsetsControllerCompat(windowInsetsController);
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@RequiresApi(28)
|
|
public static class CompatImplApi28 {
|
|
|
|
/* renamed from: androidx.core.view.ViewCompat$CompatImplApi28$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements View.OnUnhandledKeyEventListener {
|
|
public final /* synthetic */ OnUnhandledKeyEventListenerCompat val$listener;
|
|
|
|
public AnonymousClass1(OnUnhandledKeyEventListenerCompat onUnhandledKeyEventListenerCompat) {
|
|
this.val$listener = onUnhandledKeyEventListenerCompat;
|
|
}
|
|
|
|
@Override // android.view.View.OnUnhandledKeyEventListener
|
|
public boolean onUnhandledKeyEvent(View view, KeyEvent keyEvent) {
|
|
return this.val$listener.onUnhandledKeyEvent(view, keyEvent);
|
|
}
|
|
}
|
|
|
|
private CompatImplApi28() {
|
|
}
|
|
|
|
public static void addOnUnhandledKeyEventListener(@NonNull View view, @NonNull OnUnhandledKeyEventListenerCompat onUnhandledKeyEventListenerCompat) {
|
|
int i = R.id.tag_unhandled_key_listeners;
|
|
SimpleArrayMap simpleArrayMap = (SimpleArrayMap) view.getTag(i);
|
|
if (simpleArrayMap == null) {
|
|
simpleArrayMap = new SimpleArrayMap();
|
|
view.setTag(i, simpleArrayMap);
|
|
}
|
|
AnonymousClass1 r0 = new AnonymousClass1(onUnhandledKeyEventListenerCompat);
|
|
simpleArrayMap.put(onUnhandledKeyEventListenerCompat, r0);
|
|
view.addOnUnhandledKeyEventListener(r0);
|
|
}
|
|
|
|
public static void removeOnUnhandledKeyEventListener(@NonNull View view, @NonNull OnUnhandledKeyEventListenerCompat onUnhandledKeyEventListenerCompat) {
|
|
View.OnUnhandledKeyEventListener onUnhandledKeyEventListener;
|
|
SimpleArrayMap simpleArrayMap = (SimpleArrayMap) view.getTag(R.id.tag_unhandled_key_listeners);
|
|
if (simpleArrayMap != null && (onUnhandledKeyEventListener = (View.OnUnhandledKeyEventListener) simpleArrayMap.get(onUnhandledKeyEventListenerCompat)) != null) {
|
|
view.removeOnUnhandledKeyEventListener(onUnhandledKeyEventListener);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface FocusDirection {
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface FocusRealDirection {
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface FocusRelativeDirection {
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface NestedScrollType {
|
|
}
|
|
|
|
public interface OnUnhandledKeyEventListenerCompat {
|
|
boolean onUnhandledKeyEvent(View view, KeyEvent keyEvent);
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface ScrollAxis {
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface ScrollIndicators {
|
|
}
|
|
|
|
public static class UnhandledKeyEventManager {
|
|
private static final ArrayList<WeakReference<View>> sViewsWithListeners = new ArrayList<>();
|
|
private SparseArray<WeakReference<View>> mCapturedKeys = null;
|
|
private WeakReference<KeyEvent> mLastDispatchedPreViewKeyEvent = null;
|
|
@Nullable
|
|
private WeakHashMap<View, Boolean> mViewsContainingListeners = null;
|
|
|
|
public static UnhandledKeyEventManager at(View view) {
|
|
int i = R.id.tag_unhandled_key_event_manager;
|
|
UnhandledKeyEventManager unhandledKeyEventManager = (UnhandledKeyEventManager) view.getTag(i);
|
|
if (unhandledKeyEventManager != null) {
|
|
return unhandledKeyEventManager;
|
|
}
|
|
UnhandledKeyEventManager unhandledKeyEventManager2 = new UnhandledKeyEventManager();
|
|
view.setTag(i, unhandledKeyEventManager2);
|
|
return unhandledKeyEventManager2;
|
|
}
|
|
|
|
@Nullable
|
|
private View dispatchInOrder(View view, KeyEvent keyEvent) {
|
|
WeakHashMap<View, Boolean> weakHashMap = this.mViewsContainingListeners;
|
|
if (weakHashMap != null && weakHashMap.containsKey(view)) {
|
|
if (view instanceof ViewGroup) {
|
|
ViewGroup viewGroup = (ViewGroup) view;
|
|
for (int childCount = viewGroup.getChildCount() - 1; childCount >= 0; childCount--) {
|
|
View dispatchInOrder = dispatchInOrder(viewGroup.getChildAt(childCount), keyEvent);
|
|
if (dispatchInOrder != null) {
|
|
return dispatchInOrder;
|
|
}
|
|
}
|
|
}
|
|
if (onUnhandledKeyEvent(view, keyEvent)) {
|
|
return view;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private SparseArray<WeakReference<View>> getCapturedKeys() {
|
|
if (this.mCapturedKeys == null) {
|
|
this.mCapturedKeys = new SparseArray<>();
|
|
}
|
|
return this.mCapturedKeys;
|
|
}
|
|
|
|
private boolean onUnhandledKeyEvent(@NonNull View view, @NonNull KeyEvent keyEvent) {
|
|
ArrayList arrayList = (ArrayList) view.getTag(R.id.tag_unhandled_key_listeners);
|
|
if (arrayList == null) {
|
|
return false;
|
|
}
|
|
for (int size = arrayList.size() - 1; size >= 0; size--) {
|
|
if (((OnUnhandledKeyEventListenerCompat) arrayList.get(size)).onUnhandledKeyEvent(view, keyEvent)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void recalcViewsWithUnhandled() {
|
|
WeakHashMap<View, Boolean> weakHashMap = this.mViewsContainingListeners;
|
|
if (weakHashMap != null) {
|
|
weakHashMap.clear();
|
|
}
|
|
ArrayList<WeakReference<View>> arrayList = sViewsWithListeners;
|
|
if (!arrayList.isEmpty()) {
|
|
synchronized (arrayList) {
|
|
if (this.mViewsContainingListeners == null) {
|
|
this.mViewsContainingListeners = new WeakHashMap<>();
|
|
}
|
|
for (int size = arrayList.size() - 1; size >= 0; size--) {
|
|
ArrayList<WeakReference<View>> arrayList2 = sViewsWithListeners;
|
|
View view = arrayList2.get(size).get();
|
|
if (view == null) {
|
|
arrayList2.remove(size);
|
|
} else {
|
|
this.mViewsContainingListeners.put(view, Boolean.TRUE);
|
|
for (ViewParent parent = view.getParent(); parent instanceof View; parent = parent.getParent()) {
|
|
this.mViewsContainingListeners.put((View) parent, Boolean.TRUE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void registerListeningView(View view) {
|
|
ArrayList<WeakReference<View>> arrayList = sViewsWithListeners;
|
|
synchronized (arrayList) {
|
|
Iterator<WeakReference<View>> it = arrayList.iterator();
|
|
while (it.hasNext()) {
|
|
if (it.next().get() == view) {
|
|
return;
|
|
}
|
|
}
|
|
sViewsWithListeners.add(new WeakReference<>(view));
|
|
}
|
|
}
|
|
|
|
public static void unregisterListeningView(View view) {
|
|
synchronized (sViewsWithListeners) {
|
|
int i = 0;
|
|
while (true) {
|
|
ArrayList<WeakReference<View>> arrayList = sViewsWithListeners;
|
|
if (i >= arrayList.size()) {
|
|
return;
|
|
}
|
|
if (arrayList.get(i).get() == view) {
|
|
arrayList.remove(i);
|
|
return;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean dispatch(View view, KeyEvent keyEvent) {
|
|
if (keyEvent.getAction() == 0) {
|
|
recalcViewsWithUnhandled();
|
|
}
|
|
View dispatchInOrder = dispatchInOrder(view, keyEvent);
|
|
if (keyEvent.getAction() == 0) {
|
|
int keyCode = keyEvent.getKeyCode();
|
|
if (dispatchInOrder != null && !KeyEvent.isModifierKey(keyCode)) {
|
|
getCapturedKeys().put(keyCode, new WeakReference<>(dispatchInOrder));
|
|
}
|
|
}
|
|
return dispatchInOrder != null;
|
|
}
|
|
|
|
public boolean preDispatch(KeyEvent keyEvent) {
|
|
int indexOfKey;
|
|
WeakReference<KeyEvent> weakReference = this.mLastDispatchedPreViewKeyEvent;
|
|
if (weakReference != null && weakReference.get() == keyEvent) {
|
|
return false;
|
|
}
|
|
this.mLastDispatchedPreViewKeyEvent = new WeakReference<>(keyEvent);
|
|
WeakReference<View> weakReference2 = null;
|
|
SparseArray<WeakReference<View>> capturedKeys = getCapturedKeys();
|
|
if (keyEvent.getAction() == 1 && (indexOfKey = capturedKeys.indexOfKey(keyEvent.getKeyCode())) >= 0) {
|
|
weakReference2 = capturedKeys.valueAt(indexOfKey);
|
|
capturedKeys.removeAt(indexOfKey);
|
|
}
|
|
if (weakReference2 == null) {
|
|
weakReference2 = capturedKeys.get(keyEvent.getKeyCode());
|
|
}
|
|
if (weakReference2 == null) {
|
|
return false;
|
|
}
|
|
View view = weakReference2.get();
|
|
if (view != null && ViewCompat.isAttachedToWindow(view)) {
|
|
onUnhandledKeyEvent(view, keyEvent);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
private static AccessibilityViewProperty<Boolean> accessibilityHeadingProperty() {
|
|
return new AnonymousClass5(R.id.tag_accessibility_heading, Boolean.class, 28);
|
|
}
|
|
|
|
public static int addAccessibilityAction(@NonNull View view, @NonNull CharSequence charSequence, @NonNull AccessibilityViewCommand accessibilityViewCommand) {
|
|
int availableActionIdFromResources = getAvailableActionIdFromResources(view, charSequence);
|
|
if (availableActionIdFromResources != -1) {
|
|
addAccessibilityAction(view, new AccessibilityNodeInfoCompat.AccessibilityActionCompat(availableActionIdFromResources, charSequence, accessibilityViewCommand));
|
|
}
|
|
return availableActionIdFromResources;
|
|
}
|
|
|
|
private static void addAccessibilityAction(@NonNull View view, @NonNull AccessibilityNodeInfoCompat.AccessibilityActionCompat accessibilityActionCompat) {
|
|
getOrCreateAccessibilityDelegateCompat(view);
|
|
removeActionWithId(accessibilityActionCompat.getId(), view);
|
|
getActionList(view).add(accessibilityActionCompat);
|
|
notifyViewAccessibilityStateChangedIfNeeded(view, 0);
|
|
}
|
|
|
|
public static void addKeyboardNavigationClusters(@NonNull View view, @NonNull Collection<View> collection, int i) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.addKeyboardNavigationClusters(collection, i);
|
|
}
|
|
}
|
|
|
|
public static void addOnUnhandledKeyEventListener(@NonNull View view, @NonNull OnUnhandledKeyEventListenerCompat onUnhandledKeyEventListenerCompat) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
CompatImplApi28.addOnUnhandledKeyEventListener(view, onUnhandledKeyEventListenerCompat);
|
|
return;
|
|
}
|
|
int i = R.id.tag_unhandled_key_listeners;
|
|
ArrayList arrayList = (ArrayList) view.getTag(i);
|
|
if (arrayList == null) {
|
|
arrayList = new ArrayList();
|
|
view.setTag(i, arrayList);
|
|
}
|
|
arrayList.add(onUnhandledKeyEventListenerCompat);
|
|
if (arrayList.size() == 1) {
|
|
UnhandledKeyEventManager.registerListeningView(view);
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static ViewPropertyAnimatorCompat animate(@NonNull View view) {
|
|
if (sViewPropertyAnimatorMap == null) {
|
|
sViewPropertyAnimatorMap = new WeakHashMap<>();
|
|
}
|
|
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = sViewPropertyAnimatorMap.get(view);
|
|
if (viewPropertyAnimatorCompat != null) {
|
|
return viewPropertyAnimatorCompat;
|
|
}
|
|
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat2 = new ViewPropertyAnimatorCompat(view);
|
|
sViewPropertyAnimatorMap.put(view, viewPropertyAnimatorCompat2);
|
|
return viewPropertyAnimatorCompat2;
|
|
}
|
|
|
|
private static void bindTempDetach() {
|
|
try {
|
|
sDispatchStartTemporaryDetach = View.class.getDeclaredMethod("dispatchStartTemporaryDetach", new Class[0]);
|
|
sDispatchFinishTemporaryDetach = View.class.getDeclaredMethod("dispatchFinishTemporaryDetach", new Class[0]);
|
|
} catch (NoSuchMethodException e) {
|
|
Log.e(TAG, "Couldn't find method", e);
|
|
}
|
|
sTempDetachBound = true;
|
|
}
|
|
|
|
@Deprecated
|
|
public static boolean canScrollHorizontally(View view, int i) {
|
|
return view.canScrollHorizontally(i);
|
|
}
|
|
|
|
@Deprecated
|
|
public static boolean canScrollVertically(View view, int i) {
|
|
return view.canScrollVertically(i);
|
|
}
|
|
|
|
public static void cancelDragAndDrop(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
view.cancelDragAndDrop();
|
|
}
|
|
}
|
|
|
|
@Deprecated
|
|
public static int combineMeasuredStates(int i, int i2) {
|
|
return View.combineMeasuredStates(i, i2);
|
|
}
|
|
|
|
private static void compatOffsetLeftAndRight(View view, int i) {
|
|
view.offsetLeftAndRight(i);
|
|
if (view.getVisibility() == 0) {
|
|
tickleInvalidationFlag(view);
|
|
ViewParent parent = view.getParent();
|
|
if (parent instanceof View) {
|
|
tickleInvalidationFlag((View) parent);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void compatOffsetTopAndBottom(View view, int i) {
|
|
view.offsetTopAndBottom(i);
|
|
if (view.getVisibility() == 0) {
|
|
tickleInvalidationFlag(view);
|
|
ViewParent parent = view.getParent();
|
|
if (parent instanceof View) {
|
|
tickleInvalidationFlag((View) parent);
|
|
}
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static WindowInsetsCompat computeSystemWindowInsets(@NonNull View view, @NonNull WindowInsetsCompat windowInsetsCompat, @NonNull Rect rect) {
|
|
return Api21Impl.computeSystemWindowInsets(view, windowInsetsCompat, rect);
|
|
}
|
|
|
|
@NonNull
|
|
public static WindowInsetsCompat dispatchApplyWindowInsets(@NonNull View view, @NonNull WindowInsetsCompat windowInsetsCompat) {
|
|
WindowInsets windowInsets = windowInsetsCompat.toWindowInsets();
|
|
if (windowInsets != null) {
|
|
WindowInsets dispatchApplyWindowInsets = view.dispatchApplyWindowInsets(windowInsets);
|
|
if (!dispatchApplyWindowInsets.equals(windowInsets)) {
|
|
return WindowInsetsCompat.toWindowInsetsCompat(dispatchApplyWindowInsets, view);
|
|
}
|
|
}
|
|
return windowInsetsCompat;
|
|
}
|
|
|
|
public static void dispatchFinishTemporaryDetach(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
view.dispatchFinishTemporaryDetach();
|
|
return;
|
|
}
|
|
if (!sTempDetachBound) {
|
|
bindTempDetach();
|
|
}
|
|
Method method = sDispatchFinishTemporaryDetach;
|
|
if (method != null) {
|
|
try {
|
|
method.invoke(view, new Object[0]);
|
|
} catch (Exception e) {
|
|
Log.d(TAG, "Error calling dispatchFinishTemporaryDetach", e);
|
|
}
|
|
} else {
|
|
view.onFinishTemporaryDetach();
|
|
}
|
|
}
|
|
|
|
public static boolean dispatchNestedFling(@NonNull View view, float f, float f2, boolean z2) {
|
|
return view.dispatchNestedFling(f, f2, z2);
|
|
}
|
|
|
|
public static boolean dispatchNestedPreFling(@NonNull View view, float f, float f2) {
|
|
return view.dispatchNestedPreFling(f, f2);
|
|
}
|
|
|
|
public static boolean dispatchNestedPreScroll(@NonNull View view, int i, int i2, @Nullable int[] iArr, @Nullable int[] iArr2) {
|
|
return view.dispatchNestedPreScroll(i, i2, iArr, iArr2);
|
|
}
|
|
|
|
public static boolean dispatchNestedPreScroll(@NonNull View view, int i, int i2, @Nullable int[] iArr, @Nullable int[] iArr2, int i3) {
|
|
if (view instanceof NestedScrollingChild2) {
|
|
return ((NestedScrollingChild2) view).dispatchNestedPreScroll(i, i2, iArr, iArr2, i3);
|
|
}
|
|
if (i3 == 0) {
|
|
return dispatchNestedPreScroll(view, i, i2, iArr, iArr2);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void dispatchNestedScroll(@NonNull View view, int i, int i2, int i3, int i4, @Nullable int[] iArr, int i5, @NonNull int[] iArr2) {
|
|
if (view instanceof NestedScrollingChild3) {
|
|
((NestedScrollingChild3) view).dispatchNestedScroll(i, i2, i3, i4, iArr, i5, iArr2);
|
|
} else {
|
|
dispatchNestedScroll(view, i, i2, i3, i4, iArr, i5);
|
|
}
|
|
}
|
|
|
|
public static boolean dispatchNestedScroll(@NonNull View view, int i, int i2, int i3, int i4, @Nullable int[] iArr) {
|
|
return view.dispatchNestedScroll(i, i2, i3, i4, iArr);
|
|
}
|
|
|
|
public static boolean dispatchNestedScroll(@NonNull View view, int i, int i2, int i3, int i4, @Nullable int[] iArr, int i5) {
|
|
if (view instanceof NestedScrollingChild2) {
|
|
return ((NestedScrollingChild2) view).dispatchNestedScroll(i, i2, i3, i4, iArr, i5);
|
|
}
|
|
if (i5 == 0) {
|
|
return dispatchNestedScroll(view, i, i2, i3, i4, iArr);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void dispatchStartTemporaryDetach(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
view.dispatchStartTemporaryDetach();
|
|
return;
|
|
}
|
|
if (!sTempDetachBound) {
|
|
bindTempDetach();
|
|
}
|
|
Method method = sDispatchStartTemporaryDetach;
|
|
if (method != null) {
|
|
try {
|
|
method.invoke(view, new Object[0]);
|
|
} catch (Exception e) {
|
|
Log.d(TAG, "Error calling dispatchStartTemporaryDetach", e);
|
|
}
|
|
} else {
|
|
view.onStartTemporaryDetach();
|
|
}
|
|
}
|
|
|
|
@UiThread
|
|
public static boolean dispatchUnhandledKeyEventBeforeCallback(View view, KeyEvent keyEvent) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
return false;
|
|
}
|
|
return UnhandledKeyEventManager.at(view).dispatch(view, keyEvent);
|
|
}
|
|
|
|
@UiThread
|
|
public static boolean dispatchUnhandledKeyEventBeforeHierarchy(View view, KeyEvent keyEvent) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
return false;
|
|
}
|
|
return UnhandledKeyEventManager.at(view).preDispatch(keyEvent);
|
|
}
|
|
|
|
public static void enableAccessibleClickableSpanSupport(View view) {
|
|
getOrCreateAccessibilityDelegateCompat(view);
|
|
}
|
|
|
|
public static int generateViewId() {
|
|
return View.generateViewId();
|
|
}
|
|
|
|
@Nullable
|
|
public static AccessibilityDelegateCompat getAccessibilityDelegate(@NonNull View view) {
|
|
View.AccessibilityDelegate accessibilityDelegateInternal = getAccessibilityDelegateInternal(view);
|
|
if (accessibilityDelegateInternal == null) {
|
|
return null;
|
|
}
|
|
return accessibilityDelegateInternal instanceof AccessibilityDelegateCompat.AccessibilityDelegateAdapter ? ((AccessibilityDelegateCompat.AccessibilityDelegateAdapter) accessibilityDelegateInternal).mCompat : new AccessibilityDelegateCompat(accessibilityDelegateInternal);
|
|
}
|
|
|
|
@Nullable
|
|
private static View.AccessibilityDelegate getAccessibilityDelegateInternal(@NonNull View view) {
|
|
return Build.VERSION.SDK_INT >= 29 ? view.getAccessibilityDelegate() : getAccessibilityDelegateThroughReflection(view);
|
|
}
|
|
|
|
@Nullable
|
|
private static View.AccessibilityDelegate getAccessibilityDelegateThroughReflection(@NonNull View view) {
|
|
if (sAccessibilityDelegateCheckFailed) {
|
|
return null;
|
|
}
|
|
if (sAccessibilityDelegateField == null) {
|
|
try {
|
|
Field declaredField = View.class.getDeclaredField("mAccessibilityDelegate");
|
|
sAccessibilityDelegateField = declaredField;
|
|
declaredField.setAccessible(true);
|
|
} catch (Throwable unused) {
|
|
sAccessibilityDelegateCheckFailed = true;
|
|
return null;
|
|
}
|
|
}
|
|
try {
|
|
Object obj = sAccessibilityDelegateField.get(view);
|
|
if (obj instanceof View.AccessibilityDelegate) {
|
|
return (View.AccessibilityDelegate) obj;
|
|
}
|
|
return null;
|
|
} catch (Throwable unused2) {
|
|
sAccessibilityDelegateCheckFailed = true;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static int getAccessibilityLiveRegion(@NonNull View view) {
|
|
return view.getAccessibilityLiveRegion();
|
|
}
|
|
|
|
public static AccessibilityNodeProviderCompat getAccessibilityNodeProvider(@NonNull View view) {
|
|
AccessibilityNodeProvider accessibilityNodeProvider = view.getAccessibilityNodeProvider();
|
|
if (accessibilityNodeProvider != null) {
|
|
return new AccessibilityNodeProviderCompat(accessibilityNodeProvider);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@UiThread
|
|
public static CharSequence getAccessibilityPaneTitle(View view) {
|
|
return paneTitleProperty().get(view);
|
|
}
|
|
|
|
private static List<AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList(View view) {
|
|
int i = R.id.tag_accessibility_actions;
|
|
ArrayList arrayList = (ArrayList) view.getTag(i);
|
|
if (arrayList != null) {
|
|
return arrayList;
|
|
}
|
|
ArrayList arrayList2 = new ArrayList();
|
|
view.setTag(i, arrayList2);
|
|
return arrayList2;
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getAlpha(View view) {
|
|
return view.getAlpha();
|
|
}
|
|
|
|
private static int getAvailableActionIdFromResources(View view, @NonNull CharSequence charSequence) {
|
|
List<AccessibilityNodeInfoCompat.AccessibilityActionCompat> actionList = getActionList(view);
|
|
for (int i = 0; i < actionList.size(); i++) {
|
|
if (TextUtils.equals(charSequence, actionList.get(i).getLabel())) {
|
|
return actionList.get(i).getId();
|
|
}
|
|
}
|
|
int i2 = 0;
|
|
int i3 = -1;
|
|
while (true) {
|
|
int[] iArr = ACCESSIBILITY_ACTIONS_RESOURCE_IDS;
|
|
if (i2 >= iArr.length || i3 != -1) {
|
|
break;
|
|
}
|
|
int i4 = iArr[i2];
|
|
boolean z2 = true;
|
|
for (int i5 = 0; i5 < actionList.size(); i5++) {
|
|
z2 &= actionList.get(i5).getId() != i4;
|
|
}
|
|
if (z2) {
|
|
i3 = i4;
|
|
}
|
|
i2++;
|
|
}
|
|
return i3;
|
|
}
|
|
|
|
public static ColorStateList getBackgroundTintList(@NonNull View view) {
|
|
return view.getBackgroundTintList();
|
|
}
|
|
|
|
public static PorterDuff.Mode getBackgroundTintMode(@NonNull View view) {
|
|
return view.getBackgroundTintMode();
|
|
}
|
|
|
|
@Nullable
|
|
public static Rect getClipBounds(@NonNull View view) {
|
|
return view.getClipBounds();
|
|
}
|
|
|
|
@Nullable
|
|
public static Display getDisplay(@NonNull View view) {
|
|
return view.getDisplay();
|
|
}
|
|
|
|
public static float getElevation(@NonNull View view) {
|
|
return view.getElevation();
|
|
}
|
|
|
|
private static Rect getEmptyTempRect() {
|
|
if (sThreadLocalRect == null) {
|
|
sThreadLocalRect = new ThreadLocal<>();
|
|
}
|
|
Rect rect = sThreadLocalRect.get();
|
|
if (rect == null) {
|
|
rect = new Rect();
|
|
sThreadLocalRect.set(rect);
|
|
}
|
|
rect.setEmpty();
|
|
return rect;
|
|
}
|
|
|
|
private static OnReceiveContentViewBehavior getFallback(@NonNull View view) {
|
|
return view instanceof OnReceiveContentViewBehavior ? (OnReceiveContentViewBehavior) view : NO_OP_ON_RECEIVE_CONTENT_VIEW_BEHAVIOR;
|
|
}
|
|
|
|
public static boolean getFitsSystemWindows(@NonNull View view) {
|
|
return view.getFitsSystemWindows();
|
|
}
|
|
|
|
public static int getImportantForAccessibility(@NonNull View view) {
|
|
return view.getImportantForAccessibility();
|
|
}
|
|
|
|
@SuppressLint({"InlinedApi"})
|
|
public static int getImportantForAutofill(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.getImportantForAutofill();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static int getLabelFor(@NonNull View view) {
|
|
return view.getLabelFor();
|
|
}
|
|
|
|
@Deprecated
|
|
public static int getLayerType(View view) {
|
|
return view.getLayerType();
|
|
}
|
|
|
|
public static int getLayoutDirection(@NonNull View view) {
|
|
return view.getLayoutDirection();
|
|
}
|
|
|
|
@Nullable
|
|
@Deprecated
|
|
public static Matrix getMatrix(View view) {
|
|
return view.getMatrix();
|
|
}
|
|
|
|
@Deprecated
|
|
public static int getMeasuredHeightAndState(View view) {
|
|
return view.getMeasuredHeightAndState();
|
|
}
|
|
|
|
@Deprecated
|
|
public static int getMeasuredState(View view) {
|
|
return view.getMeasuredState();
|
|
}
|
|
|
|
@Deprecated
|
|
public static int getMeasuredWidthAndState(View view) {
|
|
return view.getMeasuredWidthAndState();
|
|
}
|
|
|
|
public static int getMinimumHeight(@NonNull View view) {
|
|
return view.getMinimumHeight();
|
|
}
|
|
|
|
public static int getMinimumWidth(@NonNull View view) {
|
|
return view.getMinimumWidth();
|
|
}
|
|
|
|
public static int getNextClusterForwardId(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.getNextClusterForwardId();
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
@Nullable
|
|
public static String[] getOnReceiveContentMimeTypes(@NonNull View view) {
|
|
return (String[]) view.getTag(R.id.tag_on_receive_content_mime_types);
|
|
}
|
|
|
|
public static AccessibilityDelegateCompat getOrCreateAccessibilityDelegateCompat(@NonNull View view) {
|
|
AccessibilityDelegateCompat accessibilityDelegate = getAccessibilityDelegate(view);
|
|
if (accessibilityDelegate == null) {
|
|
accessibilityDelegate = new AccessibilityDelegateCompat();
|
|
}
|
|
setAccessibilityDelegate(view, accessibilityDelegate);
|
|
return accessibilityDelegate;
|
|
}
|
|
|
|
@Deprecated
|
|
public static int getOverScrollMode(View view) {
|
|
return view.getOverScrollMode();
|
|
}
|
|
|
|
@Px
|
|
public static int getPaddingEnd(@NonNull View view) {
|
|
return view.getPaddingEnd();
|
|
}
|
|
|
|
@Px
|
|
public static int getPaddingStart(@NonNull View view) {
|
|
return view.getPaddingStart();
|
|
}
|
|
|
|
public static ViewParent getParentForAccessibility(@NonNull View view) {
|
|
return view.getParentForAccessibility();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getPivotX(View view) {
|
|
return view.getPivotX();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getPivotY(View view) {
|
|
return view.getPivotY();
|
|
}
|
|
|
|
@Nullable
|
|
public static WindowInsetsCompat getRootWindowInsets(@NonNull View view) {
|
|
return Build.VERSION.SDK_INT >= 23 ? Api23Impl.getRootWindowInsets(view) : Api21Impl.getRootWindowInsets(view);
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getRotation(View view) {
|
|
return view.getRotation();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getRotationX(View view) {
|
|
return view.getRotationX();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getRotationY(View view) {
|
|
return view.getRotationY();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getScaleX(View view) {
|
|
return view.getScaleX();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getScaleY(View view) {
|
|
return view.getScaleY();
|
|
}
|
|
|
|
public static int getScrollIndicators(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
return view.getScrollIndicators();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Nullable
|
|
@UiThread
|
|
public static final CharSequence getStateDescription(@NonNull View view) {
|
|
return stateDescriptionProperty().get(view);
|
|
}
|
|
|
|
@NonNull
|
|
public static List<Rect> getSystemGestureExclusionRects(@NonNull View view) {
|
|
return Build.VERSION.SDK_INT >= 29 ? view.getSystemGestureExclusionRects() : Collections.emptyList();
|
|
}
|
|
|
|
@Nullable
|
|
public static String getTransitionName(@NonNull View view) {
|
|
return view.getTransitionName();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getTranslationX(View view) {
|
|
return view.getTranslationX();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getTranslationY(View view) {
|
|
return view.getTranslationY();
|
|
}
|
|
|
|
public static float getTranslationZ(@NonNull View view) {
|
|
return view.getTranslationZ();
|
|
}
|
|
|
|
@Nullable
|
|
public static WindowInsetsControllerCompat getWindowInsetsController(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 30) {
|
|
return Api30Impl.getWindowInsetsController(view);
|
|
}
|
|
for (Context context = view.getContext(); context instanceof ContextWrapper; context = ((ContextWrapper) context).getBaseContext()) {
|
|
if (context instanceof Activity) {
|
|
Window window = ((Activity) context).getWindow();
|
|
if (window != null) {
|
|
return WindowCompat.getInsetsController(window, view);
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static int getWindowSystemUiVisibility(@NonNull View view) {
|
|
return view.getWindowSystemUiVisibility();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getX(View view) {
|
|
return view.getX();
|
|
}
|
|
|
|
@Deprecated
|
|
public static float getY(View view) {
|
|
return view.getY();
|
|
}
|
|
|
|
public static float getZ(@NonNull View view) {
|
|
return view.getZ();
|
|
}
|
|
|
|
public static boolean hasAccessibilityDelegate(@NonNull View view) {
|
|
return getAccessibilityDelegateInternal(view) != null;
|
|
}
|
|
|
|
public static boolean hasExplicitFocusable(@NonNull View view) {
|
|
return Build.VERSION.SDK_INT >= 26 ? view.hasExplicitFocusable() : view.hasFocusable();
|
|
}
|
|
|
|
public static boolean hasNestedScrollingParent(@NonNull View view) {
|
|
return view.hasNestedScrollingParent();
|
|
}
|
|
|
|
public static boolean hasNestedScrollingParent(@NonNull View view, int i) {
|
|
if (view instanceof NestedScrollingChild2) {
|
|
((NestedScrollingChild2) view).hasNestedScrollingParent(i);
|
|
return false;
|
|
} else if (i == 0) {
|
|
return hasNestedScrollingParent(view);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static boolean hasOnClickListeners(@NonNull View view) {
|
|
return view.hasOnClickListeners();
|
|
}
|
|
|
|
public static boolean hasOverlappingRendering(@NonNull View view) {
|
|
return view.hasOverlappingRendering();
|
|
}
|
|
|
|
public static boolean hasTransientState(@NonNull View view) {
|
|
return view.hasTransientState();
|
|
}
|
|
|
|
@UiThread
|
|
public static boolean isAccessibilityHeading(View view) {
|
|
Boolean bool = accessibilityHeadingProperty().get(view);
|
|
if (bool == null) {
|
|
return false;
|
|
}
|
|
return bool.booleanValue();
|
|
}
|
|
|
|
public static boolean isAttachedToWindow(@NonNull View view) {
|
|
return view.isAttachedToWindow();
|
|
}
|
|
|
|
public static boolean isFocusedByDefault(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.isFocusedByDefault();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static boolean isImportantForAccessibility(@NonNull View view) {
|
|
return view.isImportantForAccessibility();
|
|
}
|
|
|
|
public static boolean isImportantForAutofill(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.isImportantForAutofill();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean isInLayout(@NonNull View view) {
|
|
return view.isInLayout();
|
|
}
|
|
|
|
public static boolean isKeyboardNavigationCluster(@NonNull View view) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.isKeyboardNavigationCluster();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static boolean isLaidOut(@NonNull View view) {
|
|
return view.isLaidOut();
|
|
}
|
|
|
|
public static boolean isLayoutDirectionResolved(@NonNull View view) {
|
|
return view.isLayoutDirectionResolved();
|
|
}
|
|
|
|
public static boolean isNestedScrollingEnabled(@NonNull View view) {
|
|
return view.isNestedScrollingEnabled();
|
|
}
|
|
|
|
@Deprecated
|
|
public static boolean isOpaque(View view) {
|
|
return view.isOpaque();
|
|
}
|
|
|
|
public static boolean isPaddingRelative(@NonNull View view) {
|
|
return view.isPaddingRelative();
|
|
}
|
|
|
|
@UiThread
|
|
public static boolean isScreenReaderFocusable(View view) {
|
|
Boolean bool = screenReaderFocusableProperty().get(view);
|
|
if (bool == null) {
|
|
return false;
|
|
}
|
|
return bool.booleanValue();
|
|
}
|
|
|
|
@Deprecated
|
|
public static void jumpDrawablesToCurrentState(View view) {
|
|
view.jumpDrawablesToCurrentState();
|
|
}
|
|
|
|
public static View keyboardNavigationClusterSearch(@NonNull View view, View view2, int i) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return view.keyboardNavigationClusterSearch(view2, i);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
public static void notifyViewAccessibilityStateChangedIfNeeded(View view, int i) {
|
|
AccessibilityManager accessibilityManager = (AccessibilityManager) view.getContext().getSystemService("accessibility");
|
|
if (accessibilityManager.isEnabled()) {
|
|
boolean z2 = getAccessibilityPaneTitle(view) != null && view.getVisibility() == 0;
|
|
int i2 = 32;
|
|
if (getAccessibilityLiveRegion(view) != 0 || z2) {
|
|
AccessibilityEvent obtain = AccessibilityEvent.obtain();
|
|
if (!z2) {
|
|
i2 = 2048;
|
|
}
|
|
obtain.setEventType(i2);
|
|
obtain.setContentChangeTypes(i);
|
|
if (z2) {
|
|
obtain.getText().add(getAccessibilityPaneTitle(view));
|
|
setViewImportanceForAccessibilityIfNeeded(view);
|
|
}
|
|
view.sendAccessibilityEventUnchecked(obtain);
|
|
} else if (i == 32) {
|
|
AccessibilityEvent obtain2 = AccessibilityEvent.obtain();
|
|
view.onInitializeAccessibilityEvent(obtain2);
|
|
obtain2.setEventType(32);
|
|
obtain2.setContentChangeTypes(i);
|
|
obtain2.setSource(view);
|
|
view.onPopulateAccessibilityEvent(obtain2);
|
|
obtain2.getText().add(getAccessibilityPaneTitle(view));
|
|
accessibilityManager.sendAccessibilityEvent(obtain2);
|
|
} else if (view.getParent() != null) {
|
|
try {
|
|
view.getParent().notifySubtreeAccessibilityStateChanged(view, view, i);
|
|
} catch (AbstractMethodError e) {
|
|
Log.e(TAG, view.getParent().getClass().getSimpleName() + " does not fully implement ViewParent", e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void offsetLeftAndRight(@NonNull View view, int i) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
view.offsetLeftAndRight(i);
|
|
return;
|
|
}
|
|
Rect emptyTempRect = getEmptyTempRect();
|
|
boolean z2 = false;
|
|
ViewParent parent = view.getParent();
|
|
if (parent instanceof View) {
|
|
View view2 = (View) parent;
|
|
emptyTempRect.set(view2.getLeft(), view2.getTop(), view2.getRight(), view2.getBottom());
|
|
z2 = !emptyTempRect.intersects(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
|
|
}
|
|
compatOffsetLeftAndRight(view, i);
|
|
if (z2 && emptyTempRect.intersect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom())) {
|
|
((View) parent).invalidate(emptyTempRect);
|
|
}
|
|
}
|
|
|
|
public static void offsetTopAndBottom(@NonNull View view, int i) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
view.offsetTopAndBottom(i);
|
|
return;
|
|
}
|
|
Rect emptyTempRect = getEmptyTempRect();
|
|
boolean z2 = false;
|
|
ViewParent parent = view.getParent();
|
|
if (parent instanceof View) {
|
|
View view2 = (View) parent;
|
|
emptyTempRect.set(view2.getLeft(), view2.getTop(), view2.getRight(), view2.getBottom());
|
|
z2 = !emptyTempRect.intersects(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
|
|
}
|
|
compatOffsetTopAndBottom(view, i);
|
|
if (z2 && emptyTempRect.intersect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom())) {
|
|
((View) parent).invalidate(emptyTempRect);
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static WindowInsetsCompat onApplyWindowInsets(@NonNull View view, @NonNull WindowInsetsCompat windowInsetsCompat) {
|
|
WindowInsets windowInsets = windowInsetsCompat.toWindowInsets();
|
|
if (windowInsets != null) {
|
|
WindowInsets onApplyWindowInsets = view.onApplyWindowInsets(windowInsets);
|
|
if (!onApplyWindowInsets.equals(windowInsets)) {
|
|
return WindowInsetsCompat.toWindowInsetsCompat(onApplyWindowInsets, view);
|
|
}
|
|
}
|
|
return windowInsetsCompat;
|
|
}
|
|
|
|
@Deprecated
|
|
public static void onInitializeAccessibilityEvent(View view, AccessibilityEvent accessibilityEvent) {
|
|
view.onInitializeAccessibilityEvent(accessibilityEvent);
|
|
}
|
|
|
|
public static void onInitializeAccessibilityNodeInfo(@NonNull View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
|
|
view.onInitializeAccessibilityNodeInfo(accessibilityNodeInfoCompat.unwrap());
|
|
}
|
|
|
|
@Deprecated
|
|
public static void onPopulateAccessibilityEvent(View view, AccessibilityEvent accessibilityEvent) {
|
|
view.onPopulateAccessibilityEvent(accessibilityEvent);
|
|
}
|
|
|
|
private static AccessibilityViewProperty<CharSequence> paneTitleProperty() {
|
|
return new AnonymousClass3(R.id.tag_accessibility_pane_title, CharSequence.class, 8, 28);
|
|
}
|
|
|
|
public static boolean performAccessibilityAction(@NonNull View view, int i, Bundle bundle) {
|
|
return view.performAccessibilityAction(i, bundle);
|
|
}
|
|
|
|
@Nullable
|
|
public static ContentInfoCompat performReceiveContent(@NonNull View view, @NonNull ContentInfoCompat contentInfoCompat) {
|
|
if (Log.isLoggable(TAG, 3)) {
|
|
Log.d(TAG, "performReceiveContent: " + contentInfoCompat + ", view=" + view.getClass().getSimpleName() + "[" + view.getId() + "]");
|
|
}
|
|
OnReceiveContentListener onReceiveContentListener = (OnReceiveContentListener) view.getTag(R.id.tag_on_receive_content_listener);
|
|
if (onReceiveContentListener == null) {
|
|
return getFallback(view).onReceiveContent(contentInfoCompat);
|
|
}
|
|
ContentInfoCompat onReceiveContent = onReceiveContentListener.onReceiveContent(view, contentInfoCompat);
|
|
if (onReceiveContent == null) {
|
|
return null;
|
|
}
|
|
return getFallback(view).onReceiveContent(onReceiveContent);
|
|
}
|
|
|
|
public static void postInvalidateOnAnimation(@NonNull View view) {
|
|
view.postInvalidateOnAnimation();
|
|
}
|
|
|
|
public static void postInvalidateOnAnimation(@NonNull View view, int i, int i2, int i3, int i4) {
|
|
view.postInvalidateOnAnimation(i, i2, i3, i4);
|
|
}
|
|
|
|
public static void postOnAnimation(@NonNull View view, Runnable runnable) {
|
|
view.postOnAnimation(runnable);
|
|
}
|
|
|
|
public static void postOnAnimationDelayed(@NonNull View view, Runnable runnable, long j) {
|
|
view.postOnAnimationDelayed(runnable, j);
|
|
}
|
|
|
|
public static void removeAccessibilityAction(@NonNull View view, int i) {
|
|
removeActionWithId(i, view);
|
|
notifyViewAccessibilityStateChangedIfNeeded(view, 0);
|
|
}
|
|
|
|
private static void removeActionWithId(int i, View view) {
|
|
List<AccessibilityNodeInfoCompat.AccessibilityActionCompat> actionList = getActionList(view);
|
|
for (int i2 = 0; i2 < actionList.size(); i2++) {
|
|
if (actionList.get(i2).getId() == i) {
|
|
actionList.remove(i2);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void removeOnUnhandledKeyEventListener(@NonNull View view, @NonNull OnUnhandledKeyEventListenerCompat onUnhandledKeyEventListenerCompat) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
CompatImplApi28.removeOnUnhandledKeyEventListener(view, onUnhandledKeyEventListenerCompat);
|
|
return;
|
|
}
|
|
ArrayList arrayList = (ArrayList) view.getTag(R.id.tag_unhandled_key_listeners);
|
|
if (arrayList != null) {
|
|
arrayList.remove(onUnhandledKeyEventListenerCompat);
|
|
if (arrayList.size() == 0) {
|
|
UnhandledKeyEventManager.unregisterListeningView(view);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void replaceAccessibilityAction(@NonNull View view, @NonNull AccessibilityNodeInfoCompat.AccessibilityActionCompat accessibilityActionCompat, @Nullable CharSequence charSequence, @Nullable AccessibilityViewCommand accessibilityViewCommand) {
|
|
if (accessibilityViewCommand == null && charSequence == null) {
|
|
removeAccessibilityAction(view, accessibilityActionCompat.getId());
|
|
} else {
|
|
addAccessibilityAction(view, accessibilityActionCompat.createReplacementAction(charSequence, accessibilityViewCommand));
|
|
}
|
|
}
|
|
|
|
public static void requestApplyInsets(@NonNull View view) {
|
|
view.requestApplyInsets();
|
|
}
|
|
|
|
@NonNull
|
|
public static <T extends View> T requireViewById(@NonNull View view, @IdRes int i) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
return (T) view.requireViewById(i);
|
|
}
|
|
T t = (T) view.findViewById(i);
|
|
if (t != null) {
|
|
return t;
|
|
}
|
|
throw new IllegalArgumentException("ID does not reference a View inside this View");
|
|
}
|
|
|
|
@Deprecated
|
|
public static int resolveSizeAndState(int i, int i2, int i3) {
|
|
return View.resolveSizeAndState(i, i2, i3);
|
|
}
|
|
|
|
public static boolean restoreDefaultFocus(@NonNull View view) {
|
|
return Build.VERSION.SDK_INT >= 26 ? view.restoreDefaultFocus() : view.requestFocus();
|
|
}
|
|
|
|
public static void saveAttributeDataForStyleable(@NonNull View view, @NonNull @SuppressLint({"ContextFirst"}) Context context, @NonNull int[] iArr, @Nullable AttributeSet attributeSet, @NonNull TypedArray typedArray, int i, int i2) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
Api29Impl.saveAttributeDataForStyleable(view, context, iArr, attributeSet, typedArray, i, i2);
|
|
}
|
|
}
|
|
|
|
private static AccessibilityViewProperty<Boolean> screenReaderFocusableProperty() {
|
|
return new AnonymousClass2(R.id.tag_screen_reader_focusable, Boolean.class, 28);
|
|
}
|
|
|
|
public static void setAccessibilityDelegate(@NonNull View view, AccessibilityDelegateCompat accessibilityDelegateCompat) {
|
|
if (accessibilityDelegateCompat == null && (getAccessibilityDelegateInternal(view) instanceof AccessibilityDelegateCompat.AccessibilityDelegateAdapter)) {
|
|
accessibilityDelegateCompat = new AccessibilityDelegateCompat();
|
|
}
|
|
view.setAccessibilityDelegate(accessibilityDelegateCompat == null ? null : accessibilityDelegateCompat.getBridge());
|
|
}
|
|
|
|
@UiThread
|
|
public static void setAccessibilityHeading(View view, boolean z2) {
|
|
accessibilityHeadingProperty().set(view, Boolean.valueOf(z2));
|
|
}
|
|
|
|
public static void setAccessibilityLiveRegion(@NonNull View view, int i) {
|
|
view.setAccessibilityLiveRegion(i);
|
|
}
|
|
|
|
@UiThread
|
|
public static void setAccessibilityPaneTitle(View view, CharSequence charSequence) {
|
|
paneTitleProperty().set(view, charSequence);
|
|
if (charSequence != null) {
|
|
sAccessibilityPaneVisibilityManager.addAccessibilityPane(view);
|
|
} else {
|
|
sAccessibilityPaneVisibilityManager.removeAccessibilityPane(view);
|
|
}
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setActivated(View view, boolean z2) {
|
|
view.setActivated(z2);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setAlpha(View view, @FloatRange(from = 0.0d, to = 1.0d) float f) {
|
|
view.setAlpha(f);
|
|
}
|
|
|
|
public static void setAutofillHints(@NonNull View view, @Nullable String... strArr) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setAutofillHints(strArr);
|
|
}
|
|
}
|
|
|
|
public static void setBackground(@NonNull View view, @Nullable Drawable drawable) {
|
|
view.setBackground(drawable);
|
|
}
|
|
|
|
public static void setBackgroundTintList(@NonNull View view, ColorStateList colorStateList) {
|
|
int i = Build.VERSION.SDK_INT;
|
|
view.setBackgroundTintList(colorStateList);
|
|
if (i == 21) {
|
|
Drawable background = view.getBackground();
|
|
boolean z2 = (view.getBackgroundTintList() == null && view.getBackgroundTintMode() == null) ? false : true;
|
|
if (background != null && z2) {
|
|
if (background.isStateful()) {
|
|
background.setState(view.getDrawableState());
|
|
}
|
|
view.setBackground(background);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void setBackgroundTintMode(@NonNull View view, PorterDuff.Mode mode) {
|
|
int i = Build.VERSION.SDK_INT;
|
|
view.setBackgroundTintMode(mode);
|
|
if (i == 21) {
|
|
Drawable background = view.getBackground();
|
|
boolean z2 = (view.getBackgroundTintList() == null && view.getBackgroundTintMode() == null) ? false : true;
|
|
if (background != null && z2) {
|
|
if (background.isStateful()) {
|
|
background.setState(view.getDrawableState());
|
|
}
|
|
view.setBackground(background);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setChildrenDrawingOrderEnabled(ViewGroup viewGroup, boolean z2) {
|
|
if (sChildrenDrawingOrderMethod == null) {
|
|
try {
|
|
sChildrenDrawingOrderMethod = ViewGroup.class.getDeclaredMethod("setChildrenDrawingOrderEnabled", Boolean.TYPE);
|
|
} catch (NoSuchMethodException e) {
|
|
Log.e(TAG, "Unable to find childrenDrawingOrderEnabled", e);
|
|
}
|
|
sChildrenDrawingOrderMethod.setAccessible(true);
|
|
}
|
|
try {
|
|
sChildrenDrawingOrderMethod.invoke(viewGroup, Boolean.valueOf(z2));
|
|
} catch (IllegalAccessException e2) {
|
|
Log.e(TAG, "Unable to invoke childrenDrawingOrderEnabled", e2);
|
|
} catch (IllegalArgumentException e3) {
|
|
Log.e(TAG, "Unable to invoke childrenDrawingOrderEnabled", e3);
|
|
} catch (InvocationTargetException e4) {
|
|
Log.e(TAG, "Unable to invoke childrenDrawingOrderEnabled", e4);
|
|
}
|
|
}
|
|
|
|
public static void setClipBounds(@NonNull View view, Rect rect) {
|
|
view.setClipBounds(rect);
|
|
}
|
|
|
|
public static void setElevation(@NonNull View view, float f) {
|
|
view.setElevation(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setFitsSystemWindows(View view, boolean z2) {
|
|
view.setFitsSystemWindows(z2);
|
|
}
|
|
|
|
public static void setFocusedByDefault(@NonNull View view, boolean z2) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setFocusedByDefault(z2);
|
|
}
|
|
}
|
|
|
|
public static void setHasTransientState(@NonNull View view, boolean z2) {
|
|
view.setHasTransientState(z2);
|
|
}
|
|
|
|
public static void setImportantForAccessibility(@NonNull View view, int i) {
|
|
view.setImportantForAccessibility(i);
|
|
}
|
|
|
|
public static void setImportantForAutofill(@NonNull View view, int i) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setImportantForAutofill(i);
|
|
}
|
|
}
|
|
|
|
public static void setKeyboardNavigationCluster(@NonNull View view, boolean z2) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setKeyboardNavigationCluster(z2);
|
|
}
|
|
}
|
|
|
|
public static void setLabelFor(@NonNull View view, @IdRes int i) {
|
|
view.setLabelFor(i);
|
|
}
|
|
|
|
public static void setLayerPaint(@NonNull View view, Paint paint) {
|
|
view.setLayerPaint(paint);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setLayerType(View view, int i, Paint paint) {
|
|
view.setLayerType(i, paint);
|
|
}
|
|
|
|
public static void setLayoutDirection(@NonNull View view, int i) {
|
|
view.setLayoutDirection(i);
|
|
}
|
|
|
|
public static void setNestedScrollingEnabled(@NonNull View view, boolean z2) {
|
|
view.setNestedScrollingEnabled(z2);
|
|
}
|
|
|
|
public static void setNextClusterForwardId(@NonNull View view, int i) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setNextClusterForwardId(i);
|
|
}
|
|
}
|
|
|
|
public static void setOnApplyWindowInsetsListener(@NonNull View view, @Nullable OnApplyWindowInsetsListener onApplyWindowInsetsListener) {
|
|
Api21Impl.setOnApplyWindowInsetsListener(view, onApplyWindowInsetsListener);
|
|
}
|
|
|
|
public static void setOnReceiveContentListener(@NonNull View view, @Nullable String[] strArr, @Nullable OnReceiveContentListener onReceiveContentListener) {
|
|
if (strArr == null || strArr.length == 0) {
|
|
strArr = null;
|
|
}
|
|
boolean z2 = false;
|
|
if (onReceiveContentListener != null) {
|
|
Preconditions.checkArgument(strArr != null, "When the listener is set, MIME types must also be set");
|
|
}
|
|
if (strArr != null) {
|
|
int length = strArr.length;
|
|
int i = 0;
|
|
while (true) {
|
|
if (i >= length) {
|
|
break;
|
|
} else if (strArr[i].startsWith("*")) {
|
|
z2 = true;
|
|
break;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
StringBuilder O = a.O("A MIME type set here must not start with *: ");
|
|
O.append(Arrays.toString(strArr));
|
|
Preconditions.checkArgument(!z2, O.toString());
|
|
}
|
|
view.setTag(R.id.tag_on_receive_content_mime_types, strArr);
|
|
view.setTag(R.id.tag_on_receive_content_listener, onReceiveContentListener);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setOverScrollMode(View view, int i) {
|
|
view.setOverScrollMode(i);
|
|
}
|
|
|
|
public static void setPaddingRelative(@NonNull View view, @Px int i, @Px int i2, @Px int i3, @Px int i4) {
|
|
view.setPaddingRelative(i, i2, i3, i4);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setPivotX(View view, float f) {
|
|
view.setPivotX(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setPivotY(View view, float f) {
|
|
view.setPivotY(f);
|
|
}
|
|
|
|
public static void setPointerIcon(@NonNull View view, PointerIconCompat pointerIconCompat) {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
view.setPointerIcon((PointerIcon) (pointerIconCompat != null ? pointerIconCompat.getPointerIcon() : null));
|
|
}
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setRotation(View view, float f) {
|
|
view.setRotation(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setRotationX(View view, float f) {
|
|
view.setRotationX(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setRotationY(View view, float f) {
|
|
view.setRotationY(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setSaveFromParentEnabled(View view, boolean z2) {
|
|
view.setSaveFromParentEnabled(z2);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setScaleX(View view, float f) {
|
|
view.setScaleX(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setScaleY(View view, float f) {
|
|
view.setScaleY(f);
|
|
}
|
|
|
|
@UiThread
|
|
public static void setScreenReaderFocusable(View view, boolean z2) {
|
|
screenReaderFocusableProperty().set(view, Boolean.valueOf(z2));
|
|
}
|
|
|
|
public static void setScrollIndicators(@NonNull View view, int i) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
view.setScrollIndicators(i);
|
|
}
|
|
}
|
|
|
|
public static void setScrollIndicators(@NonNull View view, int i, int i2) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
view.setScrollIndicators(i, i2);
|
|
}
|
|
}
|
|
|
|
@UiThread
|
|
public static void setStateDescription(@NonNull View view, @Nullable CharSequence charSequence) {
|
|
stateDescriptionProperty().set(view, charSequence);
|
|
}
|
|
|
|
public static void setSystemGestureExclusionRects(@NonNull View view, @NonNull List<Rect> list) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
view.setSystemGestureExclusionRects(list);
|
|
}
|
|
}
|
|
|
|
public static void setTooltipText(@NonNull View view, @Nullable CharSequence charSequence) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
view.setTooltipText(charSequence);
|
|
}
|
|
}
|
|
|
|
public static void setTransitionName(@NonNull View view, String str) {
|
|
view.setTransitionName(str);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setTranslationX(View view, float f) {
|
|
view.setTranslationX(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setTranslationY(View view, float f) {
|
|
view.setTranslationY(f);
|
|
}
|
|
|
|
public static void setTranslationZ(@NonNull View view, float f) {
|
|
view.setTranslationZ(f);
|
|
}
|
|
|
|
private static void setViewImportanceForAccessibilityIfNeeded(View view) {
|
|
if (getImportantForAccessibility(view) == 0) {
|
|
setImportantForAccessibility(view, 1);
|
|
}
|
|
for (ViewParent parent = view.getParent(); parent instanceof View; parent = parent.getParent()) {
|
|
if (getImportantForAccessibility((View) parent) == 4) {
|
|
setImportantForAccessibility(view, 2);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void setWindowInsetsAnimationCallback(@NonNull View view, @Nullable WindowInsetsAnimationCompat.Callback callback) {
|
|
WindowInsetsAnimationCompat.setCallback(view, callback);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setX(View view, float f) {
|
|
view.setX(f);
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setY(View view, float f) {
|
|
view.setY(f);
|
|
}
|
|
|
|
public static void setZ(@NonNull View view, float f) {
|
|
view.setZ(f);
|
|
}
|
|
|
|
public static boolean startDragAndDrop(@NonNull View view, ClipData clipData, View.DragShadowBuilder dragShadowBuilder, Object obj, int i) {
|
|
return Build.VERSION.SDK_INT >= 24 ? view.startDragAndDrop(clipData, dragShadowBuilder, obj, i) : view.startDrag(clipData, dragShadowBuilder, obj, i);
|
|
}
|
|
|
|
public static boolean startNestedScroll(@NonNull View view, int i) {
|
|
return view.startNestedScroll(i);
|
|
}
|
|
|
|
public static boolean startNestedScroll(@NonNull View view, int i, int i2) {
|
|
if (view instanceof NestedScrollingChild2) {
|
|
return ((NestedScrollingChild2) view).startNestedScroll(i, i2);
|
|
}
|
|
if (i2 == 0) {
|
|
return startNestedScroll(view, i);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static AccessibilityViewProperty<CharSequence> stateDescriptionProperty() {
|
|
return new AnonymousClass4(R.id.tag_state_description, CharSequence.class, 64, 30);
|
|
}
|
|
|
|
public static void stopNestedScroll(@NonNull View view) {
|
|
view.stopNestedScroll();
|
|
}
|
|
|
|
public static void stopNestedScroll(@NonNull View view, int i) {
|
|
if (view instanceof NestedScrollingChild2) {
|
|
((NestedScrollingChild2) view).stopNestedScroll(i);
|
|
} else if (i == 0) {
|
|
stopNestedScroll(view);
|
|
}
|
|
}
|
|
|
|
private static void tickleInvalidationFlag(View view) {
|
|
float translationY = view.getTranslationY();
|
|
view.setTranslationY(1.0f + translationY);
|
|
view.setTranslationY(translationY);
|
|
}
|
|
|
|
public static void updateDragShadow(@NonNull View view, View.DragShadowBuilder dragShadowBuilder) {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
view.updateDragShadow(dragShadowBuilder);
|
|
}
|
|
}
|
|
}
|