ADD week 5
This commit is contained in:
		
							
								
								
									
										436
									
								
								02-Easy5/E5/sources/androidx/core/widget/AutoScrollHelper.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								02-Easy5/E5/sources/androidx/core/widget/AutoScrollHelper.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,436 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.Resources; | ||||
| import android.os.SystemClock; | ||||
| import android.util.DisplayMetrics; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewConfiguration; | ||||
| import android.view.animation.AccelerateInterpolator; | ||||
| import android.view.animation.AnimationUtils; | ||||
| import android.view.animation.Interpolator; | ||||
| import androidx.core.view.ViewCompat; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public abstract class AutoScrollHelper implements View.OnTouchListener { | ||||
|     private static final int DEFAULT_ACTIVATION_DELAY = ViewConfiguration.getTapTimeout(); | ||||
|     private static final int DEFAULT_EDGE_TYPE = 1; | ||||
|     private static final float DEFAULT_MAXIMUM_EDGE = Float.MAX_VALUE; | ||||
|     private static final int DEFAULT_MAXIMUM_VELOCITY_DIPS = 1575; | ||||
|     private static final int DEFAULT_MINIMUM_VELOCITY_DIPS = 315; | ||||
|     private static final int DEFAULT_RAMP_DOWN_DURATION = 500; | ||||
|     private static final int DEFAULT_RAMP_UP_DURATION = 500; | ||||
|     private static final float DEFAULT_RELATIVE_EDGE = 0.2f; | ||||
|     private static final float DEFAULT_RELATIVE_VELOCITY = 1.0f; | ||||
|     public static final int EDGE_TYPE_INSIDE = 0; | ||||
|     public static final int EDGE_TYPE_INSIDE_EXTEND = 1; | ||||
|     public static final int EDGE_TYPE_OUTSIDE = 2; | ||||
|     private static final int HORIZONTAL = 0; | ||||
|     public static final float NO_MAX = Float.MAX_VALUE; | ||||
|     public static final float NO_MIN = 0.0f; | ||||
|     public static final float RELATIVE_UNSPECIFIED = 0.0f; | ||||
|     private static final int VERTICAL = 1; | ||||
|     private int mActivationDelay; | ||||
|     private boolean mAlreadyDelayed; | ||||
|     boolean mAnimating; | ||||
|     private int mEdgeType; | ||||
|     private boolean mEnabled; | ||||
|     private boolean mExclusive; | ||||
|     boolean mNeedsCancel; | ||||
|     boolean mNeedsReset; | ||||
|     private Runnable mRunnable; | ||||
|     final View mTarget; | ||||
|     final ClampedScroller mScroller = new ClampedScroller(); | ||||
|     private final Interpolator mEdgeInterpolator = new AccelerateInterpolator(); | ||||
|     private float[] mRelativeEdges = {0.0f, 0.0f}; | ||||
|     private float[] mMaximumEdges = {Float.MAX_VALUE, Float.MAX_VALUE}; | ||||
|     private float[] mRelativeVelocity = {0.0f, 0.0f}; | ||||
|     private float[] mMinimumVelocity = {0.0f, 0.0f}; | ||||
|     private float[] mMaximumVelocity = {Float.MAX_VALUE, Float.MAX_VALUE}; | ||||
|  | ||||
|     static float constrain(float f, float f2, float f3) { | ||||
|         return f > f3 ? f3 : f < f2 ? f2 : f; | ||||
|     } | ||||
|  | ||||
|     static int constrain(int i, int i2, int i3) { | ||||
|         return i > i3 ? i3 : i < i2 ? i2 : i; | ||||
|     } | ||||
|  | ||||
|     private float constrainEdgeValue(float f, float f2) { | ||||
|         if (f2 == 0.0f) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         int i = this.mEdgeType; | ||||
|         if (i == 0 || i == 1) { | ||||
|             if (f < f2) { | ||||
|                 if (f >= 0.0f) { | ||||
|                     return 1.0f - (f / f2); | ||||
|                 } | ||||
|                 if (this.mAnimating && i == 1) { | ||||
|                     return 1.0f; | ||||
|                 } | ||||
|             } | ||||
|         } else if (i == 2 && f < 0.0f) { | ||||
|             return f / (-f2); | ||||
|         } | ||||
|         return 0.0f; | ||||
|     } | ||||
|  | ||||
|     public abstract boolean canTargetScrollHorizontally(int i); | ||||
|  | ||||
|     public abstract boolean canTargetScrollVertically(int i); | ||||
|  | ||||
|     public boolean isEnabled() { | ||||
|         return this.mEnabled; | ||||
|     } | ||||
|  | ||||
|     public boolean isExclusive() { | ||||
|         return this.mExclusive; | ||||
|     } | ||||
|  | ||||
|     public abstract void scrollTargetBy(int i, int i2); | ||||
|  | ||||
|     public AutoScrollHelper setActivationDelay(int i) { | ||||
|         this.mActivationDelay = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setEdgeType(int i) { | ||||
|         this.mEdgeType = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setExclusive(boolean z) { | ||||
|         this.mExclusive = z; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper(View view) { | ||||
|         this.mTarget = view; | ||||
|         DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics(); | ||||
|         int i = (int) ((displayMetrics.density * 1575.0f) + 0.5f); | ||||
|         int i2 = (int) ((displayMetrics.density * 315.0f) + 0.5f); | ||||
|         float f = i; | ||||
|         setMaximumVelocity(f, f); | ||||
|         float f2 = i2; | ||||
|         setMinimumVelocity(f2, f2); | ||||
|         setEdgeType(1); | ||||
|         setMaximumEdges(Float.MAX_VALUE, Float.MAX_VALUE); | ||||
|         setRelativeEdges(0.2f, 0.2f); | ||||
|         setRelativeVelocity(1.0f, 1.0f); | ||||
|         setActivationDelay(DEFAULT_ACTIVATION_DELAY); | ||||
|         setRampUpDuration(500); | ||||
|         setRampDownDuration(500); | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setEnabled(boolean z) { | ||||
|         if (this.mEnabled && !z) { | ||||
|             requestStop(); | ||||
|         } | ||||
|         this.mEnabled = z; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setMaximumVelocity(float f, float f2) { | ||||
|         float[] fArr = this.mMaximumVelocity; | ||||
|         fArr[0] = f / 1000.0f; | ||||
|         fArr[1] = f2 / 1000.0f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setMinimumVelocity(float f, float f2) { | ||||
|         float[] fArr = this.mMinimumVelocity; | ||||
|         fArr[0] = f / 1000.0f; | ||||
|         fArr[1] = f2 / 1000.0f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setRelativeVelocity(float f, float f2) { | ||||
|         float[] fArr = this.mRelativeVelocity; | ||||
|         fArr[0] = f / 1000.0f; | ||||
|         fArr[1] = f2 / 1000.0f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setRelativeEdges(float f, float f2) { | ||||
|         float[] fArr = this.mRelativeEdges; | ||||
|         fArr[0] = f; | ||||
|         fArr[1] = f2; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setMaximumEdges(float f, float f2) { | ||||
|         float[] fArr = this.mMaximumEdges; | ||||
|         fArr[0] = f; | ||||
|         fArr[1] = f2; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setRampUpDuration(int i) { | ||||
|         this.mScroller.setRampUpDuration(i); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public AutoScrollHelper setRampDownDuration(int i) { | ||||
|         this.mScroller.setRampDownDuration(i); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:11:0x0013, code lost: | ||||
|      | ||||
|         if (r0 != 3) goto L20; | ||||
|      */ | ||||
|     @Override // android.view.View.OnTouchListener | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public boolean onTouch(android.view.View r6, android.view.MotionEvent r7) { | ||||
|         /* | ||||
|             r5 = this; | ||||
|             boolean r0 = r5.mEnabled | ||||
|             r1 = 0 | ||||
|             if (r0 != 0) goto L6 | ||||
|             return r1 | ||||
|         L6: | ||||
|             int r0 = r7.getActionMasked() | ||||
|             r2 = 1 | ||||
|             if (r0 == 0) goto L1a | ||||
|             if (r0 == r2) goto L16 | ||||
|             r3 = 2 | ||||
|             if (r0 == r3) goto L1e | ||||
|             r6 = 3 | ||||
|             if (r0 == r6) goto L16 | ||||
|             goto L58 | ||||
|         L16: | ||||
|             r5.requestStop() | ||||
|             goto L58 | ||||
|         L1a: | ||||
|             r5.mNeedsCancel = r2 | ||||
|             r5.mAlreadyDelayed = r1 | ||||
|         L1e: | ||||
|             float r0 = r7.getX() | ||||
|             int r3 = r6.getWidth() | ||||
|             float r3 = (float) r3 | ||||
|             android.view.View r4 = r5.mTarget | ||||
|             int r4 = r4.getWidth() | ||||
|             float r4 = (float) r4 | ||||
|             float r0 = r5.computeTargetVelocity(r1, r0, r3, r4) | ||||
|             float r7 = r7.getY() | ||||
|             int r6 = r6.getHeight() | ||||
|             float r6 = (float) r6 | ||||
|             android.view.View r3 = r5.mTarget | ||||
|             int r3 = r3.getHeight() | ||||
|             float r3 = (float) r3 | ||||
|             float r6 = r5.computeTargetVelocity(r2, r7, r6, r3) | ||||
|             androidx.core.widget.AutoScrollHelper$ClampedScroller r7 = r5.mScroller | ||||
|             r7.setTargetVelocity(r0, r6) | ||||
|             boolean r6 = r5.mAnimating | ||||
|             if (r6 != 0) goto L58 | ||||
|             boolean r6 = r5.shouldAnimate() | ||||
|             if (r6 == 0) goto L58 | ||||
|             r5.startAnimating() | ||||
|         L58: | ||||
|             boolean r6 = r5.mExclusive | ||||
|             if (r6 == 0) goto L61 | ||||
|             boolean r6 = r5.mAnimating | ||||
|             if (r6 == 0) goto L61 | ||||
|             r1 = 1 | ||||
|         L61: | ||||
|             return r1 | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.core.widget.AutoScrollHelper.onTouch(android.view.View, android.view.MotionEvent):boolean"); | ||||
|     } | ||||
|  | ||||
|     boolean shouldAnimate() { | ||||
|         ClampedScroller clampedScroller = this.mScroller; | ||||
|         int verticalDirection = clampedScroller.getVerticalDirection(); | ||||
|         int horizontalDirection = clampedScroller.getHorizontalDirection(); | ||||
|         return (verticalDirection != 0 && canTargetScrollVertically(verticalDirection)) || (horizontalDirection != 0 && canTargetScrollHorizontally(horizontalDirection)); | ||||
|     } | ||||
|  | ||||
|     private void startAnimating() { | ||||
|         int i; | ||||
|         if (this.mRunnable == null) { | ||||
|             this.mRunnable = new ScrollAnimationRunnable(); | ||||
|         } | ||||
|         this.mAnimating = true; | ||||
|         this.mNeedsReset = true; | ||||
|         if (!this.mAlreadyDelayed && (i = this.mActivationDelay) > 0) { | ||||
|             ViewCompat.postOnAnimationDelayed(this.mTarget, this.mRunnable, i); | ||||
|         } else { | ||||
|             this.mRunnable.run(); | ||||
|         } | ||||
|         this.mAlreadyDelayed = true; | ||||
|     } | ||||
|  | ||||
|     private void requestStop() { | ||||
|         if (this.mNeedsReset) { | ||||
|             this.mAnimating = false; | ||||
|         } else { | ||||
|             this.mScroller.requestStop(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private float computeTargetVelocity(int i, float f, float f2, float f3) { | ||||
|         float edgeValue = getEdgeValue(this.mRelativeEdges[i], f2, this.mMaximumEdges[i], f); | ||||
|         if (edgeValue == 0.0f) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         float f4 = this.mRelativeVelocity[i]; | ||||
|         float f5 = this.mMinimumVelocity[i]; | ||||
|         float f6 = this.mMaximumVelocity[i]; | ||||
|         float f7 = f4 * f3; | ||||
|         if (edgeValue > 0.0f) { | ||||
|             return constrain(edgeValue * f7, f5, f6); | ||||
|         } | ||||
|         return -constrain((-edgeValue) * f7, f5, f6); | ||||
|     } | ||||
|  | ||||
|     private float getEdgeValue(float f, float f2, float f3, float f4) { | ||||
|         float interpolation; | ||||
|         float constrain = constrain(f * f2, 0.0f, f3); | ||||
|         float constrainEdgeValue = constrainEdgeValue(f2 - f4, constrain) - constrainEdgeValue(f4, constrain); | ||||
|         if (constrainEdgeValue < 0.0f) { | ||||
|             interpolation = -this.mEdgeInterpolator.getInterpolation(-constrainEdgeValue); | ||||
|         } else { | ||||
|             if (constrainEdgeValue <= 0.0f) { | ||||
|                 return 0.0f; | ||||
|             } | ||||
|             interpolation = this.mEdgeInterpolator.getInterpolation(constrainEdgeValue); | ||||
|         } | ||||
|         return constrain(interpolation, -1.0f, 1.0f); | ||||
|     } | ||||
|  | ||||
|     void cancelTargetTouch() { | ||||
|         long uptimeMillis = SystemClock.uptimeMillis(); | ||||
|         MotionEvent obtain = MotionEvent.obtain(uptimeMillis, uptimeMillis, 3, 0.0f, 0.0f, 0); | ||||
|         this.mTarget.onTouchEvent(obtain); | ||||
|         obtain.recycle(); | ||||
|     } | ||||
|  | ||||
|     private class ScrollAnimationRunnable implements Runnable { | ||||
|         ScrollAnimationRunnable() { | ||||
|         } | ||||
|  | ||||
|         @Override // java.lang.Runnable | ||||
|         public void run() { | ||||
|             if (AutoScrollHelper.this.mAnimating) { | ||||
|                 if (AutoScrollHelper.this.mNeedsReset) { | ||||
|                     AutoScrollHelper.this.mNeedsReset = false; | ||||
|                     AutoScrollHelper.this.mScroller.start(); | ||||
|                 } | ||||
|                 ClampedScroller clampedScroller = AutoScrollHelper.this.mScroller; | ||||
|                 if (clampedScroller.isFinished() || !AutoScrollHelper.this.shouldAnimate()) { | ||||
|                     AutoScrollHelper.this.mAnimating = false; | ||||
|                     return; | ||||
|                 } | ||||
|                 if (AutoScrollHelper.this.mNeedsCancel) { | ||||
|                     AutoScrollHelper.this.mNeedsCancel = false; | ||||
|                     AutoScrollHelper.this.cancelTargetTouch(); | ||||
|                 } | ||||
|                 clampedScroller.computeScrollDelta(); | ||||
|                 AutoScrollHelper.this.scrollTargetBy(clampedScroller.getDeltaX(), clampedScroller.getDeltaY()); | ||||
|                 ViewCompat.postOnAnimation(AutoScrollHelper.this.mTarget, this); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class ClampedScroller { | ||||
|         private int mEffectiveRampDown; | ||||
|         private int mRampDownDuration; | ||||
|         private int mRampUpDuration; | ||||
|         private float mStopValue; | ||||
|         private float mTargetVelocityX; | ||||
|         private float mTargetVelocityY; | ||||
|         private long mStartTime = Long.MIN_VALUE; | ||||
|         private long mStopTime = -1; | ||||
|         private long mDeltaTime = 0; | ||||
|         private int mDeltaX = 0; | ||||
|         private int mDeltaY = 0; | ||||
|  | ||||
|         private float interpolateValue(float f) { | ||||
|             return ((-4.0f) * f * f) + (f * 4.0f); | ||||
|         } | ||||
|  | ||||
|         public int getDeltaX() { | ||||
|             return this.mDeltaX; | ||||
|         } | ||||
|  | ||||
|         public int getDeltaY() { | ||||
|             return this.mDeltaY; | ||||
|         } | ||||
|  | ||||
|         public void setRampDownDuration(int i) { | ||||
|             this.mRampDownDuration = i; | ||||
|         } | ||||
|  | ||||
|         public void setRampUpDuration(int i) { | ||||
|             this.mRampUpDuration = i; | ||||
|         } | ||||
|  | ||||
|         public void setTargetVelocity(float f, float f2) { | ||||
|             this.mTargetVelocityX = f; | ||||
|             this.mTargetVelocityY = f2; | ||||
|         } | ||||
|  | ||||
|         ClampedScroller() { | ||||
|         } | ||||
|  | ||||
|         public void start() { | ||||
|             long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); | ||||
|             this.mStartTime = currentAnimationTimeMillis; | ||||
|             this.mStopTime = -1L; | ||||
|             this.mDeltaTime = currentAnimationTimeMillis; | ||||
|             this.mStopValue = 0.5f; | ||||
|             this.mDeltaX = 0; | ||||
|             this.mDeltaY = 0; | ||||
|         } | ||||
|  | ||||
|         public void requestStop() { | ||||
|             long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); | ||||
|             this.mEffectiveRampDown = AutoScrollHelper.constrain((int) (currentAnimationTimeMillis - this.mStartTime), 0, this.mRampDownDuration); | ||||
|             this.mStopValue = getValueAt(currentAnimationTimeMillis); | ||||
|             this.mStopTime = currentAnimationTimeMillis; | ||||
|         } | ||||
|  | ||||
|         public boolean isFinished() { | ||||
|             return this.mStopTime > 0 && AnimationUtils.currentAnimationTimeMillis() > this.mStopTime + ((long) this.mEffectiveRampDown); | ||||
|         } | ||||
|  | ||||
|         private float getValueAt(long j) { | ||||
|             if (j < this.mStartTime) { | ||||
|                 return 0.0f; | ||||
|             } | ||||
|             long j2 = this.mStopTime; | ||||
|             if (j2 < 0 || j < j2) { | ||||
|                 return AutoScrollHelper.constrain((j - r0) / this.mRampUpDuration, 0.0f, 1.0f) * 0.5f; | ||||
|             } | ||||
|             float f = this.mStopValue; | ||||
|             return (1.0f - f) + (f * AutoScrollHelper.constrain((j - j2) / this.mEffectiveRampDown, 0.0f, 1.0f)); | ||||
|         } | ||||
|  | ||||
|         public void computeScrollDelta() { | ||||
|             if (this.mDeltaTime == 0) { | ||||
|                 throw new RuntimeException("Cannot compute scroll delta before calling start()"); | ||||
|             } | ||||
|             long currentAnimationTimeMillis = AnimationUtils.currentAnimationTimeMillis(); | ||||
|             float interpolateValue = interpolateValue(getValueAt(currentAnimationTimeMillis)); | ||||
|             long j = currentAnimationTimeMillis - this.mDeltaTime; | ||||
|             this.mDeltaTime = currentAnimationTimeMillis; | ||||
|             float f = j * interpolateValue; | ||||
|             this.mDeltaX = (int) (this.mTargetVelocityX * f); | ||||
|             this.mDeltaY = (int) (f * this.mTargetVelocityY); | ||||
|         } | ||||
|  | ||||
|         public int getHorizontalDirection() { | ||||
|             float f = this.mTargetVelocityX; | ||||
|             return (int) (f / Math.abs(f)); | ||||
|         } | ||||
|  | ||||
|         public int getVerticalDirection() { | ||||
|             float f = this.mTargetVelocityY; | ||||
|             return (int) (f / Math.abs(f)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,30 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.os.Build; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface AutoSizeableTextView { | ||||
|  | ||||
|     @Deprecated | ||||
|     public static final boolean PLATFORM_SUPPORTS_AUTOSIZE; | ||||
|  | ||||
|     static { | ||||
|         PLATFORM_SUPPORTS_AUTOSIZE = Build.VERSION.SDK_INT >= 27; | ||||
|     } | ||||
|  | ||||
|     int getAutoSizeMaxTextSize(); | ||||
|  | ||||
|     int getAutoSizeMinTextSize(); | ||||
|  | ||||
|     int getAutoSizeStepGranularity(); | ||||
|  | ||||
|     int[] getAutoSizeTextAvailableSizes(); | ||||
|  | ||||
|     int getAutoSizeTextType(); | ||||
|  | ||||
|     void setAutoSizeTextTypeUniformWithConfiguration(int i, int i2, int i3, int i4) throws IllegalArgumentException; | ||||
|  | ||||
|     void setAutoSizeTextTypeUniformWithPresetSizes(int[] iArr, int i) throws IllegalArgumentException; | ||||
|  | ||||
|     void setAutoSizeTextTypeWithDefaults(int i); | ||||
| } | ||||
| @@ -0,0 +1,97 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.util.Log; | ||||
| import android.widget.CheckedTextView; | ||||
| import java.lang.reflect.Field; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class CheckedTextViewCompat { | ||||
|     private static final String TAG = "CheckedTextViewCompat"; | ||||
|  | ||||
|     private CheckedTextViewCompat() { | ||||
|     } | ||||
|  | ||||
|     public static void setCheckMarkTintList(CheckedTextView checkedTextView, ColorStateList colorStateList) { | ||||
|         Api21Impl.setCheckMarkTintList(checkedTextView, colorStateList); | ||||
|     } | ||||
|  | ||||
|     public static ColorStateList getCheckMarkTintList(CheckedTextView checkedTextView) { | ||||
|         return Api21Impl.getCheckMarkTintList(checkedTextView); | ||||
|     } | ||||
|  | ||||
|     public static void setCheckMarkTintMode(CheckedTextView checkedTextView, PorterDuff.Mode mode) { | ||||
|         Api21Impl.setCheckMarkTintMode(checkedTextView, mode); | ||||
|     } | ||||
|  | ||||
|     public static PorterDuff.Mode getCheckMarkTintMode(CheckedTextView checkedTextView) { | ||||
|         return Api21Impl.getCheckMarkTintMode(checkedTextView); | ||||
|     } | ||||
|  | ||||
|     public static Drawable getCheckMarkDrawable(CheckedTextView checkedTextView) { | ||||
|         return Api16Impl.getCheckMarkDrawable(checkedTextView); | ||||
|     } | ||||
|  | ||||
|     private static class Api21Impl { | ||||
|         private Api21Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setCheckMarkTintList(CheckedTextView checkedTextView, ColorStateList colorStateList) { | ||||
|             checkedTextView.setCheckMarkTintList(colorStateList); | ||||
|         } | ||||
|  | ||||
|         static ColorStateList getCheckMarkTintList(CheckedTextView checkedTextView) { | ||||
|             return checkedTextView.getCheckMarkTintList(); | ||||
|         } | ||||
|  | ||||
|         static void setCheckMarkTintMode(CheckedTextView checkedTextView, PorterDuff.Mode mode) { | ||||
|             checkedTextView.setCheckMarkTintMode(mode); | ||||
|         } | ||||
|  | ||||
|         static PorterDuff.Mode getCheckMarkTintMode(CheckedTextView checkedTextView) { | ||||
|             return checkedTextView.getCheckMarkTintMode(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class Api16Impl { | ||||
|         private Api16Impl() { | ||||
|         } | ||||
|  | ||||
|         static Drawable getCheckMarkDrawable(CheckedTextView checkedTextView) { | ||||
|             return checkedTextView.getCheckMarkDrawable(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class Api14Impl { | ||||
|         private static Field sCheckMarkDrawableField; | ||||
|         private static boolean sResolved; | ||||
|  | ||||
|         private Api14Impl() { | ||||
|         } | ||||
|  | ||||
|         static Drawable getCheckMarkDrawable(CheckedTextView checkedTextView) { | ||||
|             if (!sResolved) { | ||||
|                 try { | ||||
|                     Field declaredField = CheckedTextView.class.getDeclaredField("mCheckMarkDrawable"); | ||||
|                     sCheckMarkDrawableField = declaredField; | ||||
|                     declaredField.setAccessible(true); | ||||
|                 } catch (NoSuchFieldException e) { | ||||
|                     Log.i(CheckedTextViewCompat.TAG, "Failed to retrieve mCheckMarkDrawable field", e); | ||||
|                 } | ||||
|                 sResolved = true; | ||||
|             } | ||||
|             Field field = sCheckMarkDrawableField; | ||||
|             if (field != null) { | ||||
|                 try { | ||||
|                     return (Drawable) field.get(checkedTextView); | ||||
|                 } catch (IllegalAccessException e2) { | ||||
|                     Log.i(CheckedTextViewCompat.TAG, "Failed to get check mark drawable via reflection", e2); | ||||
|                     sCheckMarkDrawableField = null; | ||||
|                 } | ||||
|             } | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,91 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.Build; | ||||
| import android.util.Log; | ||||
| import android.widget.CompoundButton; | ||||
| import java.lang.reflect.Field; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class CompoundButtonCompat { | ||||
|     private static final String TAG = "CompoundButtonCompat"; | ||||
|     private static Field sButtonDrawableField; | ||||
|     private static boolean sButtonDrawableFieldFetched; | ||||
|  | ||||
|     private CompoundButtonCompat() { | ||||
|     } | ||||
|  | ||||
|     public static void setButtonTintList(CompoundButton compoundButton, ColorStateList colorStateList) { | ||||
|         Api21Impl.setButtonTintList(compoundButton, colorStateList); | ||||
|     } | ||||
|  | ||||
|     public static ColorStateList getButtonTintList(CompoundButton compoundButton) { | ||||
|         return Api21Impl.getButtonTintList(compoundButton); | ||||
|     } | ||||
|  | ||||
|     public static void setButtonTintMode(CompoundButton compoundButton, PorterDuff.Mode mode) { | ||||
|         Api21Impl.setButtonTintMode(compoundButton, mode); | ||||
|     } | ||||
|  | ||||
|     public static PorterDuff.Mode getButtonTintMode(CompoundButton compoundButton) { | ||||
|         return Api21Impl.getButtonTintMode(compoundButton); | ||||
|     } | ||||
|  | ||||
|     public static Drawable getButtonDrawable(CompoundButton compoundButton) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             return Api23Impl.getButtonDrawable(compoundButton); | ||||
|         } | ||||
|         if (!sButtonDrawableFieldFetched) { | ||||
|             try { | ||||
|                 Field declaredField = CompoundButton.class.getDeclaredField("mButtonDrawable"); | ||||
|                 sButtonDrawableField = declaredField; | ||||
|                 declaredField.setAccessible(true); | ||||
|             } catch (NoSuchFieldException e) { | ||||
|                 Log.i(TAG, "Failed to retrieve mButtonDrawable field", e); | ||||
|             } | ||||
|             sButtonDrawableFieldFetched = true; | ||||
|         } | ||||
|         Field field = sButtonDrawableField; | ||||
|         if (field != null) { | ||||
|             try { | ||||
|                 return (Drawable) field.get(compoundButton); | ||||
|             } catch (IllegalAccessException e2) { | ||||
|                 Log.i(TAG, "Failed to get button drawable via reflection", e2); | ||||
|                 sButtonDrawableField = null; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     static class Api21Impl { | ||||
|         private Api21Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setButtonTintList(CompoundButton compoundButton, ColorStateList colorStateList) { | ||||
|             compoundButton.setButtonTintList(colorStateList); | ||||
|         } | ||||
|  | ||||
|         static ColorStateList getButtonTintList(CompoundButton compoundButton) { | ||||
|             return compoundButton.getButtonTintList(); | ||||
|         } | ||||
|  | ||||
|         static void setButtonTintMode(CompoundButton compoundButton, PorterDuff.Mode mode) { | ||||
|             compoundButton.setButtonTintMode(mode); | ||||
|         } | ||||
|  | ||||
|         static PorterDuff.Mode getButtonTintMode(CompoundButton compoundButton) { | ||||
|             return compoundButton.getButtonTintMode(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api23Impl { | ||||
|         private Api23Impl() { | ||||
|         } | ||||
|  | ||||
|         static Drawable getButtonDrawable(CompoundButton compoundButton) { | ||||
|             return compoundButton.getButtonDrawable(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,125 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.widget.ProgressBar; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ContentLoadingProgressBar extends ProgressBar { | ||||
|     private static final int MIN_DELAY_MS = 500; | ||||
|     private static final int MIN_SHOW_TIME_MS = 500; | ||||
|     private final Runnable mDelayedHide; | ||||
|     private final Runnable mDelayedShow; | ||||
|     boolean mDismissed; | ||||
|     boolean mPostedHide; | ||||
|     boolean mPostedShow; | ||||
|     long mStartTime; | ||||
|  | ||||
|     /* renamed from: lambda$new$0$androidx-core-widget-ContentLoadingProgressBar, reason: not valid java name */ | ||||
|     /* synthetic */ void m164lambda$new$0$androidxcorewidgetContentLoadingProgressBar() { | ||||
|         this.mPostedHide = false; | ||||
|         this.mStartTime = -1L; | ||||
|         setVisibility(8); | ||||
|     } | ||||
|  | ||||
|     /* renamed from: lambda$new$1$androidx-core-widget-ContentLoadingProgressBar, reason: not valid java name */ | ||||
|     /* synthetic */ void m165lambda$new$1$androidxcorewidgetContentLoadingProgressBar() { | ||||
|         this.mPostedShow = false; | ||||
|         if (this.mDismissed) { | ||||
|             return; | ||||
|         } | ||||
|         this.mStartTime = System.currentTimeMillis(); | ||||
|         setVisibility(0); | ||||
|     } | ||||
|  | ||||
|     public ContentLoadingProgressBar(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public ContentLoadingProgressBar(Context context, AttributeSet attributeSet) { | ||||
|         super(context, attributeSet, 0); | ||||
|         this.mStartTime = -1L; | ||||
|         this.mPostedHide = false; | ||||
|         this.mPostedShow = false; | ||||
|         this.mDismissed = false; | ||||
|         this.mDelayedHide = new Runnable() { // from class: androidx.core.widget.ContentLoadingProgressBar$$ExternalSyntheticLambda2 | ||||
|             @Override // java.lang.Runnable | ||||
|             public final void run() { | ||||
|                 ContentLoadingProgressBar.this.m164lambda$new$0$androidxcorewidgetContentLoadingProgressBar(); | ||||
|             } | ||||
|         }; | ||||
|         this.mDelayedShow = new Runnable() { // from class: androidx.core.widget.ContentLoadingProgressBar$$ExternalSyntheticLambda3 | ||||
|             @Override // java.lang.Runnable | ||||
|             public final void run() { | ||||
|                 ContentLoadingProgressBar.this.m165lambda$new$1$androidxcorewidgetContentLoadingProgressBar(); | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.ProgressBar, android.view.View | ||||
|     public void onAttachedToWindow() { | ||||
|         super.onAttachedToWindow(); | ||||
|         removeCallbacks(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.ProgressBar, android.view.View | ||||
|     public void onDetachedFromWindow() { | ||||
|         super.onDetachedFromWindow(); | ||||
|         removeCallbacks(); | ||||
|     } | ||||
|  | ||||
|     private void removeCallbacks() { | ||||
|         removeCallbacks(this.mDelayedHide); | ||||
|         removeCallbacks(this.mDelayedShow); | ||||
|     } | ||||
|  | ||||
|     public void hide() { | ||||
|         post(new Runnable() { // from class: androidx.core.widget.ContentLoadingProgressBar$$ExternalSyntheticLambda1 | ||||
|             @Override // java.lang.Runnable | ||||
|             public final void run() { | ||||
|                 ContentLoadingProgressBar.this.hideOnUiThread(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public void hideOnUiThread() { | ||||
|         this.mDismissed = true; | ||||
|         removeCallbacks(this.mDelayedShow); | ||||
|         this.mPostedShow = false; | ||||
|         long currentTimeMillis = System.currentTimeMillis(); | ||||
|         long j = this.mStartTime; | ||||
|         long j2 = currentTimeMillis - j; | ||||
|         if (j2 >= 500 || j == -1) { | ||||
|             setVisibility(8); | ||||
|         } else { | ||||
|             if (this.mPostedHide) { | ||||
|                 return; | ||||
|             } | ||||
|             postDelayed(this.mDelayedHide, 500 - j2); | ||||
|             this.mPostedHide = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void show() { | ||||
|         post(new Runnable() { // from class: androidx.core.widget.ContentLoadingProgressBar$$ExternalSyntheticLambda0 | ||||
|             @Override // java.lang.Runnable | ||||
|             public final void run() { | ||||
|                 ContentLoadingProgressBar.this.showOnUiThread(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public void showOnUiThread() { | ||||
|         this.mStartTime = -1L; | ||||
|         this.mDismissed = false; | ||||
|         removeCallbacks(this.mDelayedHide); | ||||
|         this.mPostedHide = false; | ||||
|         if (this.mPostedShow) { | ||||
|             return; | ||||
|         } | ||||
|         postDelayed(this.mDelayedShow, 500L); | ||||
|         this.mPostedShow = true; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										126
									
								
								02-Easy5/E5/sources/androidx/core/widget/EdgeEffectCompat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								02-Easy5/E5/sources/androidx/core/widget/EdgeEffectCompat.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Canvas; | ||||
| import android.os.Build; | ||||
| import android.util.AttributeSet; | ||||
| import android.widget.EdgeEffect; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class EdgeEffectCompat { | ||||
|     private final EdgeEffect mEdgeEffect; | ||||
|  | ||||
|     @Deprecated | ||||
|     public EdgeEffectCompat(Context context) { | ||||
|         this.mEdgeEffect = new EdgeEffect(context); | ||||
|     } | ||||
|  | ||||
|     public static EdgeEffect create(Context context, AttributeSet attributeSet) { | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             return Api31Impl.create(context, attributeSet); | ||||
|         } | ||||
|         return new EdgeEffect(context); | ||||
|     } | ||||
|  | ||||
|     public static float getDistance(EdgeEffect edgeEffect) { | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             return Api31Impl.getDistance(edgeEffect); | ||||
|         } | ||||
|         return 0.0f; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setSize(int i, int i2) { | ||||
|         this.mEdgeEffect.setSize(i, i2); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean isFinished() { | ||||
|         return this.mEdgeEffect.isFinished(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void finish() { | ||||
|         this.mEdgeEffect.finish(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean onPull(float f) { | ||||
|         this.mEdgeEffect.onPull(f); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean onPull(float f, float f2) { | ||||
|         onPull(this.mEdgeEffect, f, f2); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public static void onPull(EdgeEffect edgeEffect, float f, float f2) { | ||||
|         Api21Impl.onPull(edgeEffect, f, f2); | ||||
|     } | ||||
|  | ||||
|     public static float onPullDistance(EdgeEffect edgeEffect, float f, float f2) { | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             return Api31Impl.onPullDistance(edgeEffect, f, f2); | ||||
|         } | ||||
|         onPull(edgeEffect, f, f2); | ||||
|         return f; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean onRelease() { | ||||
|         this.mEdgeEffect.onRelease(); | ||||
|         return this.mEdgeEffect.isFinished(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean onAbsorb(int i) { | ||||
|         this.mEdgeEffect.onAbsorb(i); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean draw(Canvas canvas) { | ||||
|         return this.mEdgeEffect.draw(canvas); | ||||
|     } | ||||
|  | ||||
|     private static class Api31Impl { | ||||
|         private Api31Impl() { | ||||
|         } | ||||
|  | ||||
|         public static EdgeEffect create(Context context, AttributeSet attributeSet) { | ||||
|             try { | ||||
|                 return new EdgeEffect(context, attributeSet); | ||||
|             } catch (Throwable unused) { | ||||
|                 return new EdgeEffect(context); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static float onPullDistance(EdgeEffect edgeEffect, float f, float f2) { | ||||
|             try { | ||||
|                 return edgeEffect.onPullDistance(f, f2); | ||||
|             } catch (Throwable unused) { | ||||
|                 edgeEffect.onPull(f, f2); | ||||
|                 return 0.0f; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static float getDistance(EdgeEffect edgeEffect) { | ||||
|             try { | ||||
|                 return edgeEffect.getDistance(); | ||||
|             } catch (Throwable unused) { | ||||
|                 return 0.0f; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api21Impl { | ||||
|         private Api21Impl() { | ||||
|         } | ||||
|  | ||||
|         static void onPull(EdgeEffect edgeEffect, float f, float f2) { | ||||
|             edgeEffect.onPull(f, f2); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,66 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.Build; | ||||
| import android.widget.ImageView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ImageViewCompat { | ||||
|     public static ColorStateList getImageTintList(ImageView imageView) { | ||||
|         return Api21Impl.getImageTintList(imageView); | ||||
|     } | ||||
|  | ||||
|     public static void setImageTintList(ImageView imageView, ColorStateList colorStateList) { | ||||
|         Drawable drawable; | ||||
|         Api21Impl.setImageTintList(imageView, colorStateList); | ||||
|         if (Build.VERSION.SDK_INT != 21 || (drawable = imageView.getDrawable()) == null || Api21Impl.getImageTintList(imageView) == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (drawable.isStateful()) { | ||||
|             drawable.setState(imageView.getDrawableState()); | ||||
|         } | ||||
|         imageView.setImageDrawable(drawable); | ||||
|     } | ||||
|  | ||||
|     public static PorterDuff.Mode getImageTintMode(ImageView imageView) { | ||||
|         return Api21Impl.getImageTintMode(imageView); | ||||
|     } | ||||
|  | ||||
|     public static void setImageTintMode(ImageView imageView, PorterDuff.Mode mode) { | ||||
|         Drawable drawable; | ||||
|         Api21Impl.setImageTintMode(imageView, mode); | ||||
|         if (Build.VERSION.SDK_INT != 21 || (drawable = imageView.getDrawable()) == null || Api21Impl.getImageTintList(imageView) == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (drawable.isStateful()) { | ||||
|             drawable.setState(imageView.getDrawableState()); | ||||
|         } | ||||
|         imageView.setImageDrawable(drawable); | ||||
|     } | ||||
|  | ||||
|     private ImageViewCompat() { | ||||
|     } | ||||
|  | ||||
|     static class Api21Impl { | ||||
|         private Api21Impl() { | ||||
|         } | ||||
|  | ||||
|         static ColorStateList getImageTintList(ImageView imageView) { | ||||
|             return imageView.getImageTintList(); | ||||
|         } | ||||
|  | ||||
|         static void setImageTintList(ImageView imageView, ColorStateList colorStateList) { | ||||
|             imageView.setImageTintList(colorStateList); | ||||
|         } | ||||
|  | ||||
|         static PorterDuff.Mode getImageTintMode(ImageView imageView) { | ||||
|             return imageView.getImageTintMode(); | ||||
|         } | ||||
|  | ||||
|         static void setImageTintMode(ImageView imageView, PorterDuff.Mode mode) { | ||||
|             imageView.setImageTintMode(mode); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.widget.ListPopupWindow; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class ListPopupWindowCompat { | ||||
|     private ListPopupWindowCompat() { | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public static View.OnTouchListener createDragToOpenListener(Object obj, View view) { | ||||
|         return createDragToOpenListener((ListPopupWindow) obj, view); | ||||
|     } | ||||
|  | ||||
|     public static View.OnTouchListener createDragToOpenListener(ListPopupWindow listPopupWindow, View view) { | ||||
|         return Api19Impl.createDragToOpenListener(listPopupWindow, view); | ||||
|     } | ||||
|  | ||||
|     static class Api19Impl { | ||||
|         private Api19Impl() { | ||||
|         } | ||||
|  | ||||
|         static View.OnTouchListener createDragToOpenListener(ListPopupWindow listPopupWindow, View view) { | ||||
|             return listPopupWindow.createDragToOpenListener(view); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.widget.ListView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ListViewAutoScrollHelper extends AutoScrollHelper { | ||||
|     private final ListView mTarget; | ||||
|  | ||||
|     @Override // androidx.core.widget.AutoScrollHelper | ||||
|     public boolean canTargetScrollHorizontally(int i) { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public ListViewAutoScrollHelper(ListView listView) { | ||||
|         super(listView); | ||||
|         this.mTarget = listView; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.widget.AutoScrollHelper | ||||
|     public void scrollTargetBy(int i, int i2) { | ||||
|         ListViewCompat.scrollListBy(this.mTarget, i2); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.widget.AutoScrollHelper | ||||
|     public boolean canTargetScrollVertically(int i) { | ||||
|         ListView listView = this.mTarget; | ||||
|         int count = listView.getCount(); | ||||
|         if (count == 0) { | ||||
|             return false; | ||||
|         } | ||||
|         int childCount = listView.getChildCount(); | ||||
|         int firstVisiblePosition = listView.getFirstVisiblePosition(); | ||||
|         int i2 = firstVisiblePosition + childCount; | ||||
|         if (i > 0) { | ||||
|             if (i2 >= count && listView.getChildAt(childCount - 1).getBottom() <= listView.getHeight()) { | ||||
|                 return false; | ||||
|             } | ||||
|         } else { | ||||
|             if (i >= 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             if (firstVisiblePosition <= 0 && listView.getChildAt(0).getTop() >= 0) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										30
									
								
								02-Easy5/E5/sources/androidx/core/widget/ListViewCompat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								02-Easy5/E5/sources/androidx/core/widget/ListViewCompat.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.widget.ListView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class ListViewCompat { | ||||
|     public static void scrollListBy(ListView listView, int i) { | ||||
|         Api19Impl.scrollListBy(listView, i); | ||||
|     } | ||||
|  | ||||
|     public static boolean canScrollList(ListView listView, int i) { | ||||
|         return Api19Impl.canScrollList(listView, i); | ||||
|     } | ||||
|  | ||||
|     private ListViewCompat() { | ||||
|     } | ||||
|  | ||||
|     static class Api19Impl { | ||||
|         private Api19Impl() { | ||||
|         } | ||||
|  | ||||
|         static void scrollListBy(ListView listView, int i) { | ||||
|             listView.scrollListBy(i); | ||||
|         } | ||||
|  | ||||
|         static boolean canScrollList(ListView listView, int i) { | ||||
|             return listView.canScrollList(i); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										1725
									
								
								02-Easy5/E5/sources/androidx/core/widget/NestedScrollView.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1725
									
								
								02-Easy5/E5/sources/androidx/core/widget/NestedScrollView.java
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,23 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.widget.PopupMenu; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class PopupMenuCompat { | ||||
|     private PopupMenuCompat() { | ||||
|     } | ||||
|  | ||||
|     public static View.OnTouchListener getDragToOpenListener(Object obj) { | ||||
|         return Api19Impl.getDragToOpenListener((PopupMenu) obj); | ||||
|     } | ||||
|  | ||||
|     static class Api19Impl { | ||||
|         private Api19Impl() { | ||||
|         } | ||||
|  | ||||
|         static View.OnTouchListener getDragToOpenListener(PopupMenu popupMenu) { | ||||
|             return popupMenu.getDragToOpenListener(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										153
									
								
								02-Easy5/E5/sources/androidx/core/widget/PopupWindowCompat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								02-Easy5/E5/sources/androidx/core/widget/PopupWindowCompat.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.os.Build; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| import android.widget.PopupWindow; | ||||
| import java.lang.reflect.Field; | ||||
| import java.lang.reflect.Method; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class PopupWindowCompat { | ||||
|     private static final String TAG = "PopupWindowCompatApi21"; | ||||
|     private static Method sGetWindowLayoutTypeMethod; | ||||
|     private static boolean sGetWindowLayoutTypeMethodAttempted; | ||||
|     private static Field sOverlapAnchorField; | ||||
|     private static boolean sOverlapAnchorFieldAttempted; | ||||
|     private static Method sSetWindowLayoutTypeMethod; | ||||
|     private static boolean sSetWindowLayoutTypeMethodAttempted; | ||||
|  | ||||
|     private PopupWindowCompat() { | ||||
|     } | ||||
|  | ||||
|     public static void showAsDropDown(PopupWindow popupWindow, View view, int i, int i2, int i3) { | ||||
|         Api19Impl.showAsDropDown(popupWindow, view, i, i2, i3); | ||||
|     } | ||||
|  | ||||
|     public static void setOverlapAnchor(PopupWindow popupWindow, boolean z) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             Api23Impl.setOverlapAnchor(popupWindow, z); | ||||
|             return; | ||||
|         } | ||||
|         if (!sOverlapAnchorFieldAttempted) { | ||||
|             try { | ||||
|                 Field declaredField = PopupWindow.class.getDeclaredField("mOverlapAnchor"); | ||||
|                 sOverlapAnchorField = declaredField; | ||||
|                 declaredField.setAccessible(true); | ||||
|             } catch (NoSuchFieldException e) { | ||||
|                 Log.i(TAG, "Could not fetch mOverlapAnchor field from PopupWindow", e); | ||||
|             } | ||||
|             sOverlapAnchorFieldAttempted = true; | ||||
|         } | ||||
|         Field field = sOverlapAnchorField; | ||||
|         if (field != null) { | ||||
|             try { | ||||
|                 field.set(popupWindow, Boolean.valueOf(z)); | ||||
|             } catch (IllegalAccessException e2) { | ||||
|                 Log.i(TAG, "Could not set overlap anchor field in PopupWindow", e2); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static boolean getOverlapAnchor(PopupWindow popupWindow) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             return Api23Impl.getOverlapAnchor(popupWindow); | ||||
|         } | ||||
|         if (!sOverlapAnchorFieldAttempted) { | ||||
|             try { | ||||
|                 Field declaredField = PopupWindow.class.getDeclaredField("mOverlapAnchor"); | ||||
|                 sOverlapAnchorField = declaredField; | ||||
|                 declaredField.setAccessible(true); | ||||
|             } catch (NoSuchFieldException e) { | ||||
|                 Log.i(TAG, "Could not fetch mOverlapAnchor field from PopupWindow", e); | ||||
|             } | ||||
|             sOverlapAnchorFieldAttempted = true; | ||||
|         } | ||||
|         Field field = sOverlapAnchorField; | ||||
|         if (field == null) { | ||||
|             return false; | ||||
|         } | ||||
|         try { | ||||
|             return ((Boolean) field.get(popupWindow)).booleanValue(); | ||||
|         } catch (IllegalAccessException e2) { | ||||
|             Log.i(TAG, "Could not get overlap anchor field in PopupWindow", e2); | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setWindowLayoutType(PopupWindow popupWindow, int i) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             Api23Impl.setWindowLayoutType(popupWindow, i); | ||||
|             return; | ||||
|         } | ||||
|         if (!sSetWindowLayoutTypeMethodAttempted) { | ||||
|             try { | ||||
|                 Method declaredMethod = PopupWindow.class.getDeclaredMethod("setWindowLayoutType", Integer.TYPE); | ||||
|                 sSetWindowLayoutTypeMethod = declaredMethod; | ||||
|                 declaredMethod.setAccessible(true); | ||||
|             } catch (Exception unused) { | ||||
|             } | ||||
|             sSetWindowLayoutTypeMethodAttempted = true; | ||||
|         } | ||||
|         Method method = sSetWindowLayoutTypeMethod; | ||||
|         if (method != null) { | ||||
|             try { | ||||
|                 method.invoke(popupWindow, Integer.valueOf(i)); | ||||
|             } catch (Exception unused2) { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static int getWindowLayoutType(PopupWindow popupWindow) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             return Api23Impl.getWindowLayoutType(popupWindow); | ||||
|         } | ||||
|         if (!sGetWindowLayoutTypeMethodAttempted) { | ||||
|             try { | ||||
|                 Method declaredMethod = PopupWindow.class.getDeclaredMethod("getWindowLayoutType", new Class[0]); | ||||
|                 sGetWindowLayoutTypeMethod = declaredMethod; | ||||
|                 declaredMethod.setAccessible(true); | ||||
|             } catch (Exception unused) { | ||||
|             } | ||||
|             sGetWindowLayoutTypeMethodAttempted = true; | ||||
|         } | ||||
|         Method method = sGetWindowLayoutTypeMethod; | ||||
|         if (method != null) { | ||||
|             try { | ||||
|                 return ((Integer) method.invoke(popupWindow, new Object[0])).intValue(); | ||||
|             } catch (Exception unused2) { | ||||
|             } | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     static class Api23Impl { | ||||
|         private Api23Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setOverlapAnchor(PopupWindow popupWindow, boolean z) { | ||||
|             popupWindow.setOverlapAnchor(z); | ||||
|         } | ||||
|  | ||||
|         static boolean getOverlapAnchor(PopupWindow popupWindow) { | ||||
|             return popupWindow.getOverlapAnchor(); | ||||
|         } | ||||
|  | ||||
|         static void setWindowLayoutType(PopupWindow popupWindow, int i) { | ||||
|             popupWindow.setWindowLayoutType(i); | ||||
|         } | ||||
|  | ||||
|         static int getWindowLayoutType(PopupWindow popupWindow) { | ||||
|             return popupWindow.getWindowLayoutType(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api19Impl { | ||||
|         private Api19Impl() { | ||||
|         } | ||||
|  | ||||
|         static void showAsDropDown(PopupWindow popupWindow, View view, int i, int i2, int i3) { | ||||
|             popupWindow.showAsDropDown(view, i, i2, i3); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										105
									
								
								02-Easy5/E5/sources/androidx/core/widget/ScrollerCompat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								02-Easy5/E5/sources/androidx/core/widget/ScrollerCompat.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.view.animation.Interpolator; | ||||
| import android.widget.OverScroller; | ||||
|  | ||||
| @Deprecated | ||||
| /* loaded from: classes.dex */ | ||||
| public final class ScrollerCompat { | ||||
|     OverScroller mScroller; | ||||
|  | ||||
|     @Deprecated | ||||
|     public static ScrollerCompat create(Context context) { | ||||
|         return create(context, null); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public static ScrollerCompat create(Context context, Interpolator interpolator) { | ||||
|         return new ScrollerCompat(context, interpolator); | ||||
|     } | ||||
|  | ||||
|     ScrollerCompat(Context context, Interpolator interpolator) { | ||||
|         this.mScroller = interpolator != null ? new OverScroller(context, interpolator) : new OverScroller(context); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean isFinished() { | ||||
|         return this.mScroller.isFinished(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getCurrX() { | ||||
|         return this.mScroller.getCurrX(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getCurrY() { | ||||
|         return this.mScroller.getCurrY(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getFinalX() { | ||||
|         return this.mScroller.getFinalX(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getFinalY() { | ||||
|         return this.mScroller.getFinalY(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public float getCurrVelocity() { | ||||
|         return this.mScroller.getCurrVelocity(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean computeScrollOffset() { | ||||
|         return this.mScroller.computeScrollOffset(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void startScroll(int i, int i2, int i3, int i4) { | ||||
|         this.mScroller.startScroll(i, i2, i3, i4); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void startScroll(int i, int i2, int i3, int i4, int i5) { | ||||
|         this.mScroller.startScroll(i, i2, i3, i4, i5); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void fling(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8) { | ||||
|         this.mScroller.fling(i, i2, i3, i4, i5, i6, i7, i8); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void fling(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { | ||||
|         this.mScroller.fling(i, i2, i3, i4, i5, i6, i7, i8, i9, i10); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean springBack(int i, int i2, int i3, int i4, int i5, int i6) { | ||||
|         return this.mScroller.springBack(i, i2, i3, i4, i5, i6); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void abortAnimation() { | ||||
|         this.mScroller.abortAnimation(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void notifyHorizontalEdgeReached(int i, int i2, int i3) { | ||||
|         this.mScroller.notifyHorizontalEdgeReached(i, i2, i3); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void notifyVerticalEdgeReached(int i, int i2, int i3) { | ||||
|         this.mScroller.notifyVerticalEdgeReached(i, i2, i3); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean isOverScrolled() { | ||||
|         return this.mScroller.isOverScrolled(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										657
									
								
								02-Easy5/E5/sources/androidx/core/widget/TextViewCompat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										657
									
								
								02-Easy5/E5/sources/androidx/core/widget/TextViewCompat.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,657 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.content.pm.ResolveInfo; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.Paint; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.icu.text.DecimalFormatSymbols; | ||||
| import android.os.Build; | ||||
| import android.text.Editable; | ||||
| import android.text.PrecomputedText; | ||||
| import android.text.TextDirectionHeuristic; | ||||
| import android.text.TextDirectionHeuristics; | ||||
| import android.text.TextPaint; | ||||
| import android.text.method.PasswordTransformationMethod; | ||||
| import android.util.Log; | ||||
| import android.view.ActionMode; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| import androidx.core.text.PrecomputedTextCompat; | ||||
| import androidx.core.util.Preconditions; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.lang.annotation.RetentionPolicy; | ||||
| import java.lang.reflect.Field; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Locale; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class TextViewCompat { | ||||
|     public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; | ||||
|     public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; | ||||
|     private static final int LINES = 1; | ||||
|     private static final String LOG_TAG = "TextViewCompat"; | ||||
|     private static Field sMaxModeField; | ||||
|     private static boolean sMaxModeFieldFetched; | ||||
|     private static Field sMaximumField; | ||||
|     private static boolean sMaximumFieldFetched; | ||||
|     private static Field sMinModeField; | ||||
|     private static boolean sMinModeFieldFetched; | ||||
|     private static Field sMinimumField; | ||||
|     private static boolean sMinimumFieldFetched; | ||||
|  | ||||
|     @Retention(RetentionPolicy.SOURCE) | ||||
|     public @interface AutoSizeTextType { | ||||
|     } | ||||
|  | ||||
|     private TextViewCompat() { | ||||
|     } | ||||
|  | ||||
|     private static Field retrieveField(String str) { | ||||
|         Field field = null; | ||||
|         try { | ||||
|             field = TextView.class.getDeclaredField(str); | ||||
|             field.setAccessible(true); | ||||
|             return field; | ||||
|         } catch (NoSuchFieldException unused) { | ||||
|             Log.e(LOG_TAG, "Could not retrieve " + str + " field."); | ||||
|             return field; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static int retrieveIntFromField(Field field, TextView textView) { | ||||
|         try { | ||||
|             return field.getInt(textView); | ||||
|         } catch (IllegalAccessException unused) { | ||||
|             Log.d(LOG_TAG, "Could not retrieve value of " + field.getName() + " field."); | ||||
|             return -1; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setCompoundDrawablesRelative(TextView textView, Drawable drawable, Drawable drawable2, Drawable drawable3, Drawable drawable4) { | ||||
|         Api17Impl.setCompoundDrawablesRelative(textView, drawable, drawable2, drawable3, drawable4); | ||||
|     } | ||||
|  | ||||
|     public static void setCompoundDrawablesRelativeWithIntrinsicBounds(TextView textView, Drawable drawable, Drawable drawable2, Drawable drawable3, Drawable drawable4) { | ||||
|         Api17Impl.setCompoundDrawablesRelativeWithIntrinsicBounds(textView, drawable, drawable2, drawable3, drawable4); | ||||
|     } | ||||
|  | ||||
|     public static void setCompoundDrawablesRelativeWithIntrinsicBounds(TextView textView, int i, int i2, int i3, int i4) { | ||||
|         Api17Impl.setCompoundDrawablesRelativeWithIntrinsicBounds(textView, i, i2, i3, i4); | ||||
|     } | ||||
|  | ||||
|     public static int getMaxLines(TextView textView) { | ||||
|         return Api16Impl.getMaxLines(textView); | ||||
|     } | ||||
|  | ||||
|     public static int getMinLines(TextView textView) { | ||||
|         return Api16Impl.getMinLines(textView); | ||||
|     } | ||||
|  | ||||
|     public static void setTextAppearance(TextView textView, int i) { | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             textView.setTextAppearance(i); | ||||
|         } else { | ||||
|             textView.setTextAppearance(textView.getContext(), i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static Drawable[] getCompoundDrawablesRelative(TextView textView) { | ||||
|         return Api17Impl.getCompoundDrawablesRelative(textView); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static void setAutoSizeTextTypeWithDefaults(TextView textView, int i) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             Api26Impl.setAutoSizeTextTypeWithDefaults(textView, i); | ||||
|         } else if (textView instanceof AutoSizeableTextView) { | ||||
|             ((AutoSizeableTextView) textView).setAutoSizeTextTypeWithDefaults(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static void setAutoSizeTextTypeUniformWithConfiguration(TextView textView, int i, int i2, int i3, int i4) throws IllegalArgumentException { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             Api26Impl.setAutoSizeTextTypeUniformWithConfiguration(textView, i, i2, i3, i4); | ||||
|         } else if (textView instanceof AutoSizeableTextView) { | ||||
|             ((AutoSizeableTextView) textView).setAutoSizeTextTypeUniformWithConfiguration(i, i2, i3, i4); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static void setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] iArr, int i) throws IllegalArgumentException { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             Api26Impl.setAutoSizeTextTypeUniformWithPresetSizes(textView, iArr, i); | ||||
|         } else if (textView instanceof AutoSizeableTextView) { | ||||
|             ((AutoSizeableTextView) textView).setAutoSizeTextTypeUniformWithPresetSizes(iArr, i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static int getAutoSizeTextType(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             return Api26Impl.getAutoSizeTextType(textView); | ||||
|         } | ||||
|         if (textView instanceof AutoSizeableTextView) { | ||||
|             return ((AutoSizeableTextView) textView).getAutoSizeTextType(); | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static int getAutoSizeStepGranularity(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             return Api26Impl.getAutoSizeStepGranularity(textView); | ||||
|         } | ||||
|         if (textView instanceof AutoSizeableTextView) { | ||||
|             return ((AutoSizeableTextView) textView).getAutoSizeStepGranularity(); | ||||
|         } | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static int getAutoSizeMinTextSize(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             return Api26Impl.getAutoSizeMinTextSize(textView); | ||||
|         } | ||||
|         if (textView instanceof AutoSizeableTextView) { | ||||
|             return ((AutoSizeableTextView) textView).getAutoSizeMinTextSize(); | ||||
|         } | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static int getAutoSizeMaxTextSize(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             return Api26Impl.getAutoSizeMaxTextSize(textView); | ||||
|         } | ||||
|         if (textView instanceof AutoSizeableTextView) { | ||||
|             return ((AutoSizeableTextView) textView).getAutoSizeMaxTextSize(); | ||||
|         } | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static int[] getAutoSizeTextAvailableSizes(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 27) { | ||||
|             return Api26Impl.getAutoSizeTextAvailableSizes(textView); | ||||
|         } | ||||
|         return textView instanceof AutoSizeableTextView ? ((AutoSizeableTextView) textView).getAutoSizeTextAvailableSizes() : new int[0]; | ||||
|     } | ||||
|  | ||||
|     public static void setCustomSelectionActionModeCallback(TextView textView, ActionMode.Callback callback) { | ||||
|         textView.setCustomSelectionActionModeCallback(wrapCustomSelectionActionModeCallback(textView, callback)); | ||||
|     } | ||||
|  | ||||
|     public static ActionMode.Callback wrapCustomSelectionActionModeCallback(TextView textView, ActionMode.Callback callback) { | ||||
|         return (Build.VERSION.SDK_INT < 26 || Build.VERSION.SDK_INT > 27 || (callback instanceof OreoCallback) || callback == null) ? callback : new OreoCallback(callback, textView); | ||||
|     } | ||||
|  | ||||
|     public static ActionMode.Callback unwrapCustomSelectionActionModeCallback(ActionMode.Callback callback) { | ||||
|         return (!(callback instanceof OreoCallback) || Build.VERSION.SDK_INT < 26) ? callback : ((OreoCallback) callback).getWrappedCallback(); | ||||
|     } | ||||
|  | ||||
|     private static class OreoCallback implements ActionMode.Callback { | ||||
|         private static final int MENU_ITEM_ORDER_PROCESS_TEXT_INTENT_ACTIONS_START = 100; | ||||
|         private final ActionMode.Callback mCallback; | ||||
|         private boolean mCanUseMenuBuilderReferences; | ||||
|         private boolean mInitializedMenuBuilderReferences = false; | ||||
|         private Class<?> mMenuBuilderClass; | ||||
|         private Method mMenuBuilderRemoveItemAtMethod; | ||||
|         private final TextView mTextView; | ||||
|  | ||||
|         ActionMode.Callback getWrappedCallback() { | ||||
|             return this.mCallback; | ||||
|         } | ||||
|  | ||||
|         OreoCallback(ActionMode.Callback callback, TextView textView) { | ||||
|             this.mCallback = callback; | ||||
|             this.mTextView = textView; | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ActionMode.Callback | ||||
|         public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { | ||||
|             return this.mCallback.onCreateActionMode(actionMode, menu); | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ActionMode.Callback | ||||
|         public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { | ||||
|             recomputeProcessTextMenuItems(menu); | ||||
|             return this.mCallback.onPrepareActionMode(actionMode, menu); | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ActionMode.Callback | ||||
|         public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { | ||||
|             return this.mCallback.onActionItemClicked(actionMode, menuItem); | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ActionMode.Callback | ||||
|         public void onDestroyActionMode(ActionMode actionMode) { | ||||
|             this.mCallback.onDestroyActionMode(actionMode); | ||||
|         } | ||||
|  | ||||
|         private void recomputeProcessTextMenuItems(Menu menu) { | ||||
|             Context context = this.mTextView.getContext(); | ||||
|             PackageManager packageManager = context.getPackageManager(); | ||||
|             if (!this.mInitializedMenuBuilderReferences) { | ||||
|                 this.mInitializedMenuBuilderReferences = true; | ||||
|                 try { | ||||
|                     Class<?> cls = Class.forName("com.android.internal.view.menu.MenuBuilder"); | ||||
|                     this.mMenuBuilderClass = cls; | ||||
|                     this.mMenuBuilderRemoveItemAtMethod = cls.getDeclaredMethod("removeItemAt", Integer.TYPE); | ||||
|                     this.mCanUseMenuBuilderReferences = true; | ||||
|                 } catch (ClassNotFoundException | NoSuchMethodException unused) { | ||||
|                     this.mMenuBuilderClass = null; | ||||
|                     this.mMenuBuilderRemoveItemAtMethod = null; | ||||
|                     this.mCanUseMenuBuilderReferences = false; | ||||
|                 } | ||||
|             } | ||||
|             try { | ||||
|                 Method declaredMethod = (this.mCanUseMenuBuilderReferences && this.mMenuBuilderClass.isInstance(menu)) ? this.mMenuBuilderRemoveItemAtMethod : menu.getClass().getDeclaredMethod("removeItemAt", Integer.TYPE); | ||||
|                 for (int size = menu.size() - 1; size >= 0; size--) { | ||||
|                     MenuItem item = menu.getItem(size); | ||||
|                     if (item.getIntent() != null && "android.intent.action.PROCESS_TEXT".equals(item.getIntent().getAction())) { | ||||
|                         declaredMethod.invoke(menu, Integer.valueOf(size)); | ||||
|                     } | ||||
|                 } | ||||
|                 List<ResolveInfo> supportedActivities = getSupportedActivities(context, packageManager); | ||||
|                 for (int i = 0; i < supportedActivities.size(); i++) { | ||||
|                     ResolveInfo resolveInfo = supportedActivities.get(i); | ||||
|                     menu.add(0, 0, i + 100, resolveInfo.loadLabel(packageManager)).setIntent(createProcessTextIntentForResolveInfo(resolveInfo, this.mTextView)).setShowAsAction(1); | ||||
|                 } | ||||
|             } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException unused2) { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private List<ResolveInfo> getSupportedActivities(Context context, PackageManager packageManager) { | ||||
|             ArrayList arrayList = new ArrayList(); | ||||
|             if (!(context instanceof Activity)) { | ||||
|                 return arrayList; | ||||
|             } | ||||
|             for (ResolveInfo resolveInfo : packageManager.queryIntentActivities(createProcessTextIntent(), 0)) { | ||||
|                 if (isSupportedActivity(resolveInfo, context)) { | ||||
|                     arrayList.add(resolveInfo); | ||||
|                 } | ||||
|             } | ||||
|             return arrayList; | ||||
|         } | ||||
|  | ||||
|         private boolean isSupportedActivity(ResolveInfo resolveInfo, Context context) { | ||||
|             int checkSelfPermission; | ||||
|             if (context.getPackageName().equals(resolveInfo.activityInfo.packageName)) { | ||||
|                 return true; | ||||
|             } | ||||
|             if (!resolveInfo.activityInfo.exported) { | ||||
|                 return false; | ||||
|             } | ||||
|             if (resolveInfo.activityInfo.permission == null) { | ||||
|                 return true; | ||||
|             } | ||||
|             checkSelfPermission = context.checkSelfPermission(resolveInfo.activityInfo.permission); | ||||
|             return checkSelfPermission == 0; | ||||
|         } | ||||
|  | ||||
|         private Intent createProcessTextIntentForResolveInfo(ResolveInfo resolveInfo, TextView textView) { | ||||
|             return createProcessTextIntent().putExtra("android.intent.extra.PROCESS_TEXT_READONLY", !isEditable(textView)).setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); | ||||
|         } | ||||
|  | ||||
|         private boolean isEditable(TextView textView) { | ||||
|             return (textView instanceof Editable) && textView.onCheckIsTextEditor() && textView.isEnabled(); | ||||
|         } | ||||
|  | ||||
|         private Intent createProcessTextIntent() { | ||||
|             return new Intent().setAction("android.intent.action.PROCESS_TEXT").setType("text/plain"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setFirstBaselineToTopHeight(TextView textView, int i) { | ||||
|         int i2; | ||||
|         Preconditions.checkArgumentNonnegative(i); | ||||
|         if (Build.VERSION.SDK_INT >= 28) { | ||||
|             Api28Impl.setFirstBaselineToTopHeight(textView, i); | ||||
|             return; | ||||
|         } | ||||
|         Paint.FontMetricsInt fontMetricsInt = textView.getPaint().getFontMetricsInt(); | ||||
|         if (Api16Impl.getIncludeFontPadding(textView)) { | ||||
|             i2 = fontMetricsInt.top; | ||||
|         } else { | ||||
|             i2 = fontMetricsInt.ascent; | ||||
|         } | ||||
|         if (i > Math.abs(i2)) { | ||||
|             textView.setPadding(textView.getPaddingLeft(), i + i2, textView.getPaddingRight(), textView.getPaddingBottom()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setLastBaselineToBottomHeight(TextView textView, int i) { | ||||
|         int i2; | ||||
|         Preconditions.checkArgumentNonnegative(i); | ||||
|         Paint.FontMetricsInt fontMetricsInt = textView.getPaint().getFontMetricsInt(); | ||||
|         if (Api16Impl.getIncludeFontPadding(textView)) { | ||||
|             i2 = fontMetricsInt.bottom; | ||||
|         } else { | ||||
|             i2 = fontMetricsInt.descent; | ||||
|         } | ||||
|         if (i > Math.abs(i2)) { | ||||
|             textView.setPadding(textView.getPaddingLeft(), textView.getPaddingTop(), textView.getPaddingRight(), i - i2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static int getFirstBaselineToTopHeight(TextView textView) { | ||||
|         return textView.getPaddingTop() - textView.getPaint().getFontMetricsInt().top; | ||||
|     } | ||||
|  | ||||
|     public static int getLastBaselineToBottomHeight(TextView textView) { | ||||
|         return textView.getPaddingBottom() + textView.getPaint().getFontMetricsInt().bottom; | ||||
|     } | ||||
|  | ||||
|     public static void setLineHeight(TextView textView, int i) { | ||||
|         Preconditions.checkArgumentNonnegative(i); | ||||
|         if (i != textView.getPaint().getFontMetricsInt(null)) { | ||||
|             textView.setLineSpacing(i - r0, 1.0f); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static PrecomputedTextCompat.Params getTextMetricsParams(TextView textView) { | ||||
|         if (Build.VERSION.SDK_INT >= 28) { | ||||
|             return new PrecomputedTextCompat.Params(Api28Impl.getTextMetricsParams(textView)); | ||||
|         } | ||||
|         PrecomputedTextCompat.Params.Builder builder = new PrecomputedTextCompat.Params.Builder(new TextPaint(textView.getPaint())); | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             builder.setBreakStrategy(Api23Impl.getBreakStrategy(textView)); | ||||
|             builder.setHyphenationFrequency(Api23Impl.getHyphenationFrequency(textView)); | ||||
|         } | ||||
|         builder.setTextDirection(getTextDirectionHeuristic(textView)); | ||||
|         return builder.build(); | ||||
|     } | ||||
|  | ||||
|     public static void setTextMetricsParams(TextView textView, PrecomputedTextCompat.Params params) { | ||||
|         Api17Impl.setTextDirection(textView, getTextDirection(params.getTextDirection())); | ||||
|         if (Build.VERSION.SDK_INT < 23) { | ||||
|             float textScaleX = params.getTextPaint().getTextScaleX(); | ||||
|             textView.getPaint().set(params.getTextPaint()); | ||||
|             if (textScaleX == textView.getTextScaleX()) { | ||||
|                 textView.setTextScaleX((textScaleX / 2.0f) + 1.0f); | ||||
|             } | ||||
|             textView.setTextScaleX(textScaleX); | ||||
|             return; | ||||
|         } | ||||
|         textView.getPaint().set(params.getTextPaint()); | ||||
|         Api23Impl.setBreakStrategy(textView, params.getBreakStrategy()); | ||||
|         Api23Impl.setHyphenationFrequency(textView, params.getHyphenationFrequency()); | ||||
|     } | ||||
|  | ||||
|     public static void setPrecomputedText(TextView textView, PrecomputedTextCompat precomputedTextCompat) { | ||||
|         if (Build.VERSION.SDK_INT >= 29) { | ||||
|             textView.setText(precomputedTextCompat.getPrecomputedText()); | ||||
|         } else { | ||||
|             if (!getTextMetricsParams(textView).equalsWithoutTextDirection(precomputedTextCompat.getParams())) { | ||||
|                 throw new IllegalArgumentException("Given text can not be applied to TextView."); | ||||
|             } | ||||
|             textView.setText(precomputedTextCompat); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static TextDirectionHeuristic getTextDirectionHeuristic(TextView textView) { | ||||
|         if (textView.getTransformationMethod() instanceof PasswordTransformationMethod) { | ||||
|             return TextDirectionHeuristics.LTR; | ||||
|         } | ||||
|         if (Build.VERSION.SDK_INT >= 28 && (textView.getInputType() & 15) == 3) { | ||||
|             byte directionality = Character.getDirectionality(Api28Impl.getDigitStrings(Api24Impl.getInstance(Api17Impl.getTextLocale(textView)))[0].codePointAt(0)); | ||||
|             if (directionality == 1 || directionality == 2) { | ||||
|                 return TextDirectionHeuristics.RTL; | ||||
|             } | ||||
|             return TextDirectionHeuristics.LTR; | ||||
|         } | ||||
|         boolean z = Api17Impl.getLayoutDirection(textView) == 1; | ||||
|         switch (Api17Impl.getTextDirection(textView)) { | ||||
|             case 2: | ||||
|                 break; | ||||
|             case 3: | ||||
|                 break; | ||||
|             case 4: | ||||
|                 break; | ||||
|             case 5: | ||||
|                 break; | ||||
|             case 6: | ||||
|                 break; | ||||
|             case 7: | ||||
|                 break; | ||||
|             default: | ||||
|                 if (!z) { | ||||
|                     break; | ||||
|                 } else { | ||||
|                     break; | ||||
|                 } | ||||
|         } | ||||
|         return TextDirectionHeuristics.LTR; | ||||
|     } | ||||
|  | ||||
|     private static int getTextDirection(TextDirectionHeuristic textDirectionHeuristic) { | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.FIRSTSTRONG_RTL || textDirectionHeuristic == TextDirectionHeuristics.FIRSTSTRONG_LTR) { | ||||
|             return 1; | ||||
|         } | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.ANYRTL_LTR) { | ||||
|             return 2; | ||||
|         } | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.LTR) { | ||||
|             return 3; | ||||
|         } | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.RTL) { | ||||
|             return 4; | ||||
|         } | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.LOCALE) { | ||||
|             return 5; | ||||
|         } | ||||
|         if (textDirectionHeuristic == TextDirectionHeuristics.FIRSTSTRONG_LTR) { | ||||
|             return 6; | ||||
|         } | ||||
|         return textDirectionHeuristic == TextDirectionHeuristics.FIRSTSTRONG_RTL ? 7 : 1; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static void setCompoundDrawableTintList(TextView textView, ColorStateList colorStateList) { | ||||
|         Preconditions.checkNotNull(textView); | ||||
|         if (Build.VERSION.SDK_INT >= 24) { | ||||
|             Api23Impl.setCompoundDrawableTintList(textView, colorStateList); | ||||
|         } else if (textView instanceof TintableCompoundDrawablesView) { | ||||
|             ((TintableCompoundDrawablesView) textView).setSupportCompoundDrawablesTintList(colorStateList); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static ColorStateList getCompoundDrawableTintList(TextView textView) { | ||||
|         Preconditions.checkNotNull(textView); | ||||
|         if (Build.VERSION.SDK_INT >= 24) { | ||||
|             return Api23Impl.getCompoundDrawableTintList(textView); | ||||
|         } | ||||
|         if (textView instanceof TintableCompoundDrawablesView) { | ||||
|             return ((TintableCompoundDrawablesView) textView).getSupportCompoundDrawablesTintList(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static void setCompoundDrawableTintMode(TextView textView, PorterDuff.Mode mode) { | ||||
|         Preconditions.checkNotNull(textView); | ||||
|         if (Build.VERSION.SDK_INT >= 24) { | ||||
|             Api23Impl.setCompoundDrawableTintMode(textView, mode); | ||||
|         } else if (textView instanceof TintableCompoundDrawablesView) { | ||||
|             ((TintableCompoundDrawablesView) textView).setSupportCompoundDrawablesTintMode(mode); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public static PorterDuff.Mode getCompoundDrawableTintMode(TextView textView) { | ||||
|         Preconditions.checkNotNull(textView); | ||||
|         if (Build.VERSION.SDK_INT >= 24) { | ||||
|             return Api23Impl.getCompoundDrawableTintMode(textView); | ||||
|         } | ||||
|         if (textView instanceof TintableCompoundDrawablesView) { | ||||
|             return ((TintableCompoundDrawablesView) textView).getSupportCompoundDrawablesTintMode(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     static class Api17Impl { | ||||
|         private Api17Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setCompoundDrawablesRelative(TextView textView, Drawable drawable, Drawable drawable2, Drawable drawable3, Drawable drawable4) { | ||||
|             textView.setCompoundDrawablesRelative(drawable, drawable2, drawable3, drawable4); | ||||
|         } | ||||
|  | ||||
|         static int getLayoutDirection(View view) { | ||||
|             return view.getLayoutDirection(); | ||||
|         } | ||||
|  | ||||
|         static void setCompoundDrawablesRelativeWithIntrinsicBounds(TextView textView, Drawable drawable, Drawable drawable2, Drawable drawable3, Drawable drawable4) { | ||||
|             textView.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, drawable2, drawable3, drawable4); | ||||
|         } | ||||
|  | ||||
|         static void setCompoundDrawablesRelativeWithIntrinsicBounds(TextView textView, int i, int i2, int i3, int i4) { | ||||
|             textView.setCompoundDrawablesRelativeWithIntrinsicBounds(i, i2, i3, i4); | ||||
|         } | ||||
|  | ||||
|         static Drawable[] getCompoundDrawablesRelative(TextView textView) { | ||||
|             return textView.getCompoundDrawablesRelative(); | ||||
|         } | ||||
|  | ||||
|         static void setTextDirection(View view, int i) { | ||||
|             view.setTextDirection(i); | ||||
|         } | ||||
|  | ||||
|         static Locale getTextLocale(TextView textView) { | ||||
|             return textView.getTextLocale(); | ||||
|         } | ||||
|  | ||||
|         static int getTextDirection(View view) { | ||||
|             return view.getTextDirection(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api16Impl { | ||||
|         private Api16Impl() { | ||||
|         } | ||||
|  | ||||
|         static int getMaxLines(TextView textView) { | ||||
|             return textView.getMaxLines(); | ||||
|         } | ||||
|  | ||||
|         static int getMinLines(TextView textView) { | ||||
|             return textView.getMinLines(); | ||||
|         } | ||||
|  | ||||
|         static boolean getIncludeFontPadding(TextView textView) { | ||||
|             return textView.getIncludeFontPadding(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api26Impl { | ||||
|         private Api26Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setAutoSizeTextTypeWithDefaults(TextView textView, int i) { | ||||
|             textView.setAutoSizeTextTypeWithDefaults(i); | ||||
|         } | ||||
|  | ||||
|         static void setAutoSizeTextTypeUniformWithConfiguration(TextView textView, int i, int i2, int i3, int i4) { | ||||
|             textView.setAutoSizeTextTypeUniformWithConfiguration(i, i2, i3, i4); | ||||
|         } | ||||
|  | ||||
|         static void setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] iArr, int i) { | ||||
|             textView.setAutoSizeTextTypeUniformWithPresetSizes(iArr, i); | ||||
|         } | ||||
|  | ||||
|         static int getAutoSizeTextType(TextView textView) { | ||||
|             return textView.getAutoSizeTextType(); | ||||
|         } | ||||
|  | ||||
|         static int getAutoSizeStepGranularity(TextView textView) { | ||||
|             return textView.getAutoSizeStepGranularity(); | ||||
|         } | ||||
|  | ||||
|         static int getAutoSizeMinTextSize(TextView textView) { | ||||
|             return textView.getAutoSizeMinTextSize(); | ||||
|         } | ||||
|  | ||||
|         static int getAutoSizeMaxTextSize(TextView textView) { | ||||
|             return textView.getAutoSizeMaxTextSize(); | ||||
|         } | ||||
|  | ||||
|         static int[] getAutoSizeTextAvailableSizes(TextView textView) { | ||||
|             return textView.getAutoSizeTextAvailableSizes(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api28Impl { | ||||
|         private Api28Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setFirstBaselineToTopHeight(TextView textView, int i) { | ||||
|             textView.setFirstBaselineToTopHeight(i); | ||||
|         } | ||||
|  | ||||
|         static PrecomputedText.Params getTextMetricsParams(TextView textView) { | ||||
|             return textView.getTextMetricsParams(); | ||||
|         } | ||||
|  | ||||
|         static String[] getDigitStrings(DecimalFormatSymbols decimalFormatSymbols) { | ||||
|             return decimalFormatSymbols.getDigitStrings(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api23Impl { | ||||
|         private Api23Impl() { | ||||
|         } | ||||
|  | ||||
|         static int getBreakStrategy(TextView textView) { | ||||
|             return textView.getBreakStrategy(); | ||||
|         } | ||||
|  | ||||
|         static void setBreakStrategy(TextView textView, int i) { | ||||
|             textView.setBreakStrategy(i); | ||||
|         } | ||||
|  | ||||
|         static int getHyphenationFrequency(TextView textView) { | ||||
|             return textView.getHyphenationFrequency(); | ||||
|         } | ||||
|  | ||||
|         static void setHyphenationFrequency(TextView textView, int i) { | ||||
|             textView.setHyphenationFrequency(i); | ||||
|         } | ||||
|  | ||||
|         static PorterDuff.Mode getCompoundDrawableTintMode(TextView textView) { | ||||
|             return textView.getCompoundDrawableTintMode(); | ||||
|         } | ||||
|  | ||||
|         static ColorStateList getCompoundDrawableTintList(TextView textView) { | ||||
|             return textView.getCompoundDrawableTintList(); | ||||
|         } | ||||
|  | ||||
|         static void setCompoundDrawableTintList(TextView textView, ColorStateList colorStateList) { | ||||
|             textView.setCompoundDrawableTintList(colorStateList); | ||||
|         } | ||||
|  | ||||
|         static void setCompoundDrawableTintMode(TextView textView, PorterDuff.Mode mode) { | ||||
|             textView.setCompoundDrawableTintMode(mode); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Api24Impl { | ||||
|         private Api24Impl() { | ||||
|         } | ||||
|  | ||||
|         static DecimalFormatSymbols getInstance(Locale locale) { | ||||
|             return DecimalFormatSymbols.getInstance(locale); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,39 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.text.Editable; | ||||
| import android.text.TextWatcher; | ||||
| import kotlin.Metadata; | ||||
| import kotlin.Unit; | ||||
| import kotlin.jvm.functions.Function1; | ||||
| import kotlin.jvm.functions.Function4; | ||||
|  | ||||
| /* compiled from: TextView.kt */ | ||||
| @Metadata(d1 = {"\u0000'\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\r\n\u0000\n\u0002\u0010\b\n\u0002\b\u0005*\u0001\u0000\b\n\u0018\u00002\u00020\u0001J\u0012\u0010\u0002\u001a\u00020\u00032\b\u0010\u0004\u001a\u0004\u0018\u00010\u0005H\u0016J*\u0010\u0006\u001a\u00020\u00032\b\u0010\u0007\u001a\u0004\u0018\u00010\b2\u0006\u0010\t\u001a\u00020\n2\u0006\u0010\u000b\u001a\u00020\n2\u0006\u0010\f\u001a\u00020\nH\u0016J*\u0010\r\u001a\u00020\u00032\b\u0010\u0007\u001a\u0004\u0018\u00010\b2\u0006\u0010\t\u001a\u00020\n2\u0006\u0010\u000e\u001a\u00020\n2\u0006\u0010\u000b\u001a\u00020\nH\u0016¨\u0006\u000f"}, d2 = {"androidx/core/widget/TextViewKt$addTextChangedListener$textWatcher$1", "Landroid/text/TextWatcher;", "afterTextChanged", "", "s", "Landroid/text/Editable;", "beforeTextChanged", "text", "", "start", "", "count", "after", "onTextChanged", "before", "core-ktx_release"}, k = 1, mv = {1, 7, 1}, xi = 176) | ||||
| /* loaded from: classes.dex */ | ||||
| public final class TextViewKt$addTextChangedListener$textWatcher$1 implements TextWatcher { | ||||
|     final /* synthetic */ Function1<Editable, Unit> $afterTextChanged; | ||||
|     final /* synthetic */ Function4<CharSequence, Integer, Integer, Integer, Unit> $beforeTextChanged; | ||||
|     final /* synthetic */ Function4<CharSequence, Integer, Integer, Integer, Unit> $onTextChanged; | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public TextViewKt$addTextChangedListener$textWatcher$1(Function1<? super Editable, Unit> function1, Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> function4, Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> function42) { | ||||
|         this.$afterTextChanged = function1; | ||||
|         this.$beforeTextChanged = function4; | ||||
|         this.$onTextChanged = function42; | ||||
|     } | ||||
|  | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void afterTextChanged(Editable s) { | ||||
|         this.$afterTextChanged.invoke(s); | ||||
|     } | ||||
|  | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void beforeTextChanged(CharSequence text, int start, int count, int after) { | ||||
|         this.$beforeTextChanged.invoke(text, Integer.valueOf(start), Integer.valueOf(count), Integer.valueOf(after)); | ||||
|     } | ||||
|  | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void onTextChanged(CharSequence text, int start, int before, int count) { | ||||
|         this.$onTextChanged.invoke(text, Integer.valueOf(start), Integer.valueOf(before), Integer.valueOf(count)); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										135
									
								
								02-Easy5/E5/sources/androidx/core/widget/TextViewKt.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								02-Easy5/E5/sources/androidx/core/widget/TextViewKt.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.text.Editable; | ||||
| import android.text.TextWatcher; | ||||
| import android.widget.TextView; | ||||
| import kotlin.Metadata; | ||||
| import kotlin.Unit; | ||||
| import kotlin.jvm.functions.Function1; | ||||
| import kotlin.jvm.functions.Function4; | ||||
| import kotlin.jvm.internal.Intrinsics; | ||||
|  | ||||
| /* compiled from: TextView.kt */ | ||||
| @Metadata(d1 = {"\u00008\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\r\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0005\u001a\u0083\u0002\u0010\u0000\u001a\u00020\u0001*\u00020\u00022d\b\u0006\u0010\u0003\u001a^\u0012\u0015\u0012\u0013\u0018\u00010\u0005¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\n\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\f\u0012\u0004\u0012\u00020\r0\u00042d\b\u0006\u0010\u000e\u001a^\u0012\u0015\u0012\u0013\u0018\u00010\u0005¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\n\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000f\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000b\u0012\u0004\u0012\u00020\r0\u00042%\b\u0006\u0010\u0010\u001a\u001f\u0012\u0015\u0012\u0013\u0018\u00010\u0012¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0004\u0012\u00020\r0\u0011H\u0086\bø\u0001\u0000\u001a7\u0010\u0013\u001a\u00020\u0001*\u00020\u00022%\b\u0004\u0010\u0014\u001a\u001f\u0012\u0015\u0012\u0013\u0018\u00010\u0012¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0004\u0012\u00020\r0\u0011H\u0086\bø\u0001\u0000\u001av\u0010\u0015\u001a\u00020\u0001*\u00020\u00022d\b\u0004\u0010\u0014\u001a^\u0012\u0015\u0012\u0013\u0018\u00010\u0005¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\n\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\f\u0012\u0004\u0012\u00020\r0\u0004H\u0086\bø\u0001\u0000\u001av\u0010\u0016\u001a\u00020\u0001*\u00020\u00022d\b\u0004\u0010\u0014\u001a^\u0012\u0015\u0012\u0013\u0018\u00010\u0005¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\b\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\n\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000f\u0012\u0013\u0012\u00110\t¢\u0006\f\b\u0006\u0012\b\b\u0007\u0012\u0004\b\b(\u000b\u0012\u0004\u0012\u00020\r0\u0004H\u0086\bø\u0001\u0000\u0082\u0002\u0007\n\u0005\b\u009920\u0001¨\u0006\u0017"}, d2 = {"addTextChangedListener", "Landroid/text/TextWatcher;", "Landroid/widget/TextView;", "beforeTextChanged", "Lkotlin/Function4;", "", "Lkotlin/ParameterName;", "name", "text", "", "start", "count", "after", "", "onTextChanged", "before", "afterTextChanged", "Lkotlin/Function1;", "Landroid/text/Editable;", "doAfterTextChanged", "action", "doBeforeTextChanged", "doOnTextChanged", "core-ktx_release"}, k = 2, mv = {1, 7, 1}, xi = 48) | ||||
| /* loaded from: classes.dex */ | ||||
| public final class TextViewKt { | ||||
|     public static /* synthetic */ TextWatcher addTextChangedListener$default(TextView textView, Function4 beforeTextChanged, Function4 onTextChanged, Function1 afterTextChanged, int i, Object obj) { | ||||
|         if ((i & 1) != 0) { | ||||
|             beforeTextChanged = new Function4<CharSequence, Integer, Integer, Integer, Unit>() { // from class: androidx.core.widget.TextViewKt$addTextChangedListener$1 | ||||
|                 public final void invoke(CharSequence charSequence, int i2, int i3, int i4) { | ||||
|                 } | ||||
|  | ||||
|                 @Override // kotlin.jvm.functions.Function4 | ||||
|                 public /* bridge */ /* synthetic */ Unit invoke(CharSequence charSequence, Integer num, Integer num2, Integer num3) { | ||||
|                     invoke(charSequence, num.intValue(), num2.intValue(), num3.intValue()); | ||||
|                     return Unit.INSTANCE; | ||||
|                 } | ||||
|             }; | ||||
|         } | ||||
|         if ((i & 2) != 0) { | ||||
|             onTextChanged = new Function4<CharSequence, Integer, Integer, Integer, Unit>() { // from class: androidx.core.widget.TextViewKt$addTextChangedListener$2 | ||||
|                 public final void invoke(CharSequence charSequence, int i2, int i3, int i4) { | ||||
|                 } | ||||
|  | ||||
|                 @Override // kotlin.jvm.functions.Function4 | ||||
|                 public /* bridge */ /* synthetic */ Unit invoke(CharSequence charSequence, Integer num, Integer num2, Integer num3) { | ||||
|                     invoke(charSequence, num.intValue(), num2.intValue(), num3.intValue()); | ||||
|                     return Unit.INSTANCE; | ||||
|                 } | ||||
|             }; | ||||
|         } | ||||
|         if ((i & 4) != 0) { | ||||
|             afterTextChanged = new Function1<Editable, Unit>() { // from class: androidx.core.widget.TextViewKt$addTextChangedListener$3 | ||||
|                 /* renamed from: invoke, reason: avoid collision after fix types in other method */ | ||||
|                 public final void invoke2(Editable editable) { | ||||
|                 } | ||||
|  | ||||
|                 @Override // kotlin.jvm.functions.Function1 | ||||
|                 public /* bridge */ /* synthetic */ Unit invoke(Editable editable) { | ||||
|                     invoke2(editable); | ||||
|                     return Unit.INSTANCE; | ||||
|                 } | ||||
|             }; | ||||
|         } | ||||
|         Intrinsics.checkNotNullParameter(textView, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(beforeTextChanged, "beforeTextChanged"); | ||||
|         Intrinsics.checkNotNullParameter(onTextChanged, "onTextChanged"); | ||||
|         Intrinsics.checkNotNullParameter(afterTextChanged, "afterTextChanged"); | ||||
|         TextViewKt$addTextChangedListener$textWatcher$1 textViewKt$addTextChangedListener$textWatcher$1 = new TextViewKt$addTextChangedListener$textWatcher$1(afterTextChanged, beforeTextChanged, onTextChanged); | ||||
|         textView.addTextChangedListener(textViewKt$addTextChangedListener$textWatcher$1); | ||||
|         return textViewKt$addTextChangedListener$textWatcher$1; | ||||
|     } | ||||
|  | ||||
|     public static final TextWatcher addTextChangedListener(TextView textView, Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> beforeTextChanged, Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> onTextChanged, Function1<? super Editable, Unit> afterTextChanged) { | ||||
|         Intrinsics.checkNotNullParameter(textView, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(beforeTextChanged, "beforeTextChanged"); | ||||
|         Intrinsics.checkNotNullParameter(onTextChanged, "onTextChanged"); | ||||
|         Intrinsics.checkNotNullParameter(afterTextChanged, "afterTextChanged"); | ||||
|         TextViewKt$addTextChangedListener$textWatcher$1 textViewKt$addTextChangedListener$textWatcher$1 = new TextViewKt$addTextChangedListener$textWatcher$1(afterTextChanged, beforeTextChanged, onTextChanged); | ||||
|         textView.addTextChangedListener(textViewKt$addTextChangedListener$textWatcher$1); | ||||
|         return textViewKt$addTextChangedListener$textWatcher$1; | ||||
|     } | ||||
|  | ||||
|     public static final TextWatcher doBeforeTextChanged(TextView textView, final Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> action) { | ||||
|         Intrinsics.checkNotNullParameter(textView, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         TextWatcher textWatcher = new TextWatcher() { // from class: androidx.core.widget.TextViewKt$doBeforeTextChanged$$inlined$addTextChangedListener$default$1 | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void afterTextChanged(Editable s) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void onTextChanged(CharSequence text, int start, int before, int count) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void beforeTextChanged(CharSequence text, int start, int count, int after) { | ||||
|                 Function4.this.invoke(text, Integer.valueOf(start), Integer.valueOf(count), Integer.valueOf(after)); | ||||
|             } | ||||
|         }; | ||||
|         textView.addTextChangedListener(textWatcher); | ||||
|         return textWatcher; | ||||
|     } | ||||
|  | ||||
|     public static final TextWatcher doOnTextChanged(TextView textView, final Function4<? super CharSequence, ? super Integer, ? super Integer, ? super Integer, Unit> action) { | ||||
|         Intrinsics.checkNotNullParameter(textView, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         TextWatcher textWatcher = new TextWatcher() { // from class: androidx.core.widget.TextViewKt$doOnTextChanged$$inlined$addTextChangedListener$default$1 | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void afterTextChanged(Editable s) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void beforeTextChanged(CharSequence text, int start, int count, int after) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void onTextChanged(CharSequence text, int start, int before, int count) { | ||||
|                 Function4.this.invoke(text, Integer.valueOf(start), Integer.valueOf(before), Integer.valueOf(count)); | ||||
|             } | ||||
|         }; | ||||
|         textView.addTextChangedListener(textWatcher); | ||||
|         return textWatcher; | ||||
|     } | ||||
|  | ||||
|     public static final TextWatcher doAfterTextChanged(TextView textView, final Function1<? super Editable, Unit> action) { | ||||
|         Intrinsics.checkNotNullParameter(textView, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         TextWatcher textWatcher = new TextWatcher() { // from class: androidx.core.widget.TextViewKt$doAfterTextChanged$$inlined$addTextChangedListener$default$1 | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void beforeTextChanged(CharSequence text, int start, int count, int after) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void onTextChanged(CharSequence text, int start, int before, int count) { | ||||
|             } | ||||
|  | ||||
|             @Override // android.text.TextWatcher | ||||
|             public void afterTextChanged(Editable s) { | ||||
|                 Function1.this.invoke(s); | ||||
|             } | ||||
|         }; | ||||
|         textView.addTextChangedListener(textWatcher); | ||||
|         return textWatcher; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,82 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.ClipData; | ||||
| import android.content.Context; | ||||
| import android.text.Editable; | ||||
| import android.text.Selection; | ||||
| import android.text.Spanned; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| import androidx.core.view.ContentInfoCompat; | ||||
| import androidx.core.view.OnReceiveContentListener; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class TextViewOnReceiveContentListener implements OnReceiveContentListener { | ||||
|     private static final String LOG_TAG = "ReceiveContent"; | ||||
|  | ||||
|     @Override // androidx.core.view.OnReceiveContentListener | ||||
|     public ContentInfoCompat onReceiveContent(View view, ContentInfoCompat contentInfoCompat) { | ||||
|         if (Log.isLoggable(LOG_TAG, 3)) { | ||||
|             Log.d(LOG_TAG, "onReceive: " + contentInfoCompat); | ||||
|         } | ||||
|         if (contentInfoCompat.getSource() == 2) { | ||||
|             return contentInfoCompat; | ||||
|         } | ||||
|         ClipData clip = contentInfoCompat.getClip(); | ||||
|         int flags = contentInfoCompat.getFlags(); | ||||
|         TextView textView = (TextView) view; | ||||
|         Editable editable = (Editable) textView.getText(); | ||||
|         Context context = textView.getContext(); | ||||
|         boolean z = false; | ||||
|         for (int i = 0; i < clip.getItemCount(); i++) { | ||||
|             CharSequence coerceToText = coerceToText(context, clip.getItemAt(i), flags); | ||||
|             if (coerceToText != null) { | ||||
|                 if (!z) { | ||||
|                     replaceSelection(editable, coerceToText); | ||||
|                     z = true; | ||||
|                 } else { | ||||
|                     editable.insert(Selection.getSelectionEnd(editable), "\n"); | ||||
|                     editable.insert(Selection.getSelectionEnd(editable), coerceToText); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private static CharSequence coerceToText(Context context, ClipData.Item item, int i) { | ||||
|         return Api16Impl.coerce(context, item, i); | ||||
|     } | ||||
|  | ||||
|     private static void replaceSelection(Editable editable, CharSequence charSequence) { | ||||
|         int selectionStart = Selection.getSelectionStart(editable); | ||||
|         int selectionEnd = Selection.getSelectionEnd(editable); | ||||
|         int max = Math.max(0, Math.min(selectionStart, selectionEnd)); | ||||
|         int max2 = Math.max(0, Math.max(selectionStart, selectionEnd)); | ||||
|         Selection.setSelection(editable, max2); | ||||
|         editable.replace(max, max2, charSequence); | ||||
|     } | ||||
|  | ||||
|     private static final class Api16Impl { | ||||
|         private Api16Impl() { | ||||
|         } | ||||
|  | ||||
|         static CharSequence coerce(Context context, ClipData.Item item, int i) { | ||||
|             if ((i & 1) != 0) { | ||||
|                 CharSequence coerceToText = item.coerceToText(context); | ||||
|                 return coerceToText instanceof Spanned ? coerceToText.toString() : coerceToText; | ||||
|             } | ||||
|             return item.coerceToStyledText(context); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final class ApiImpl { | ||||
|         private ApiImpl() { | ||||
|         } | ||||
|  | ||||
|         static CharSequence coerce(Context context, ClipData.Item item, int i) { | ||||
|             CharSequence coerceToText = item.coerceToText(context); | ||||
|             return ((i & 1) == 0 || !(coerceToText instanceof Spanned)) ? coerceToText : coerceToText.toString(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface TintableCheckedTextView { | ||||
|     ColorStateList getSupportCheckMarkTintList(); | ||||
|  | ||||
|     PorterDuff.Mode getSupportCheckMarkTintMode(); | ||||
|  | ||||
|     void setSupportCheckMarkTintList(ColorStateList colorStateList); | ||||
|  | ||||
|     void setSupportCheckMarkTintMode(PorterDuff.Mode mode); | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface TintableCompoundButton { | ||||
|     ColorStateList getSupportButtonTintList(); | ||||
|  | ||||
|     PorterDuff.Mode getSupportButtonTintMode(); | ||||
|  | ||||
|     void setSupportButtonTintList(ColorStateList colorStateList); | ||||
|  | ||||
|     void setSupportButtonTintMode(PorterDuff.Mode mode); | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface TintableCompoundDrawablesView { | ||||
|     ColorStateList getSupportCompoundDrawablesTintList(); | ||||
|  | ||||
|     PorterDuff.Mode getSupportCompoundDrawablesTintMode(); | ||||
|  | ||||
|     void setSupportCompoundDrawablesTintList(ColorStateList colorStateList); | ||||
|  | ||||
|     void setSupportCompoundDrawablesTintMode(PorterDuff.Mode mode); | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package androidx.core.widget; | ||||
|  | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.PorterDuff; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface TintableImageSourceView { | ||||
|     ColorStateList getSupportImageTintList(); | ||||
|  | ||||
|     PorterDuff.Mode getSupportImageTintMode(); | ||||
|  | ||||
|     void setSupportImageTintList(ColorStateList colorStateList); | ||||
|  | ||||
|     void setSupportImageTintMode(PorterDuff.Mode mode); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user