482 lines
15 KiB
Java
482 lines
15 KiB
Java
package androidx.appcompat.widget;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.AbsListView;
|
|
import android.widget.ListAdapter;
|
|
import android.widget.ListView;
|
|
import androidx.appcompat.R$attr;
|
|
import androidx.appcompat.graphics.drawable.DrawableWrapper;
|
|
import androidx.core.graphics.drawable.DrawableCompat;
|
|
import androidx.core.view.ViewPropertyAnimatorCompat;
|
|
import androidx.core.widget.ListViewAutoScrollHelper;
|
|
import java.lang.reflect.Field;
|
|
|
|
/* loaded from: classes.dex */
|
|
class DropDownListView extends ListView {
|
|
private final Rect a;
|
|
private int b;
|
|
private int c;
|
|
private int d;
|
|
private int e;
|
|
private int f;
|
|
private Field g;
|
|
private GateKeeperDrawable h;
|
|
private boolean i;
|
|
private boolean j;
|
|
private boolean k;
|
|
private ViewPropertyAnimatorCompat l;
|
|
private ListViewAutoScrollHelper m;
|
|
ResolveHoverRunnable n;
|
|
|
|
private static class GateKeeperDrawable extends DrawableWrapper {
|
|
private boolean b;
|
|
|
|
GateKeeperDrawable(Drawable drawable) {
|
|
super(drawable);
|
|
this.b = true;
|
|
}
|
|
|
|
void a(boolean z) {
|
|
this.b = z;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableWrapper, android.graphics.drawable.Drawable
|
|
public void draw(Canvas canvas) {
|
|
if (this.b) {
|
|
super.draw(canvas);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableWrapper, android.graphics.drawable.Drawable
|
|
public void setHotspot(float f, float f2) {
|
|
if (this.b) {
|
|
super.setHotspot(f, f2);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableWrapper, android.graphics.drawable.Drawable
|
|
public void setHotspotBounds(int i, int i2, int i3, int i4) {
|
|
if (this.b) {
|
|
super.setHotspotBounds(i, i2, i3, i4);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableWrapper, android.graphics.drawable.Drawable
|
|
public boolean setState(int[] iArr) {
|
|
if (this.b) {
|
|
return super.setState(iArr);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableWrapper, android.graphics.drawable.Drawable
|
|
public boolean setVisible(boolean z, boolean z2) {
|
|
if (this.b) {
|
|
return super.setVisible(z, z2);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private class ResolveHoverRunnable implements Runnable {
|
|
ResolveHoverRunnable() {
|
|
}
|
|
|
|
public void a() {
|
|
DropDownListView.this.post(this);
|
|
}
|
|
|
|
public void cancel() {
|
|
DropDownListView dropDownListView = DropDownListView.this;
|
|
dropDownListView.n = null;
|
|
dropDownListView.removeCallbacks(this);
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
DropDownListView dropDownListView = DropDownListView.this;
|
|
dropDownListView.n = null;
|
|
dropDownListView.drawableStateChanged();
|
|
}
|
|
}
|
|
|
|
DropDownListView(Context context, boolean z) {
|
|
super(context, null, R$attr.dropDownListViewStyle);
|
|
this.a = new Rect();
|
|
this.b = 0;
|
|
this.c = 0;
|
|
this.d = 0;
|
|
this.e = 0;
|
|
this.j = z;
|
|
setCacheColorHint(0);
|
|
try {
|
|
this.g = AbsListView.class.getDeclaredField("mIsChildViewEnabled");
|
|
this.g.setAccessible(true);
|
|
} catch (NoSuchFieldException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void b(int i, View view) {
|
|
Drawable selector = getSelector();
|
|
boolean z = (selector == null || i == -1) ? false : true;
|
|
if (z) {
|
|
selector.setVisible(false, false);
|
|
}
|
|
a(i, view);
|
|
if (z) {
|
|
Rect rect = this.a;
|
|
float exactCenterX = rect.exactCenterX();
|
|
float exactCenterY = rect.exactCenterY();
|
|
selector.setVisible(getVisibility() == 0, false);
|
|
DrawableCompat.a(selector, exactCenterX, exactCenterY);
|
|
}
|
|
}
|
|
|
|
private void c() {
|
|
Drawable selector = getSelector();
|
|
if (selector != null && b() && isPressed()) {
|
|
selector.setState(getDrawableState());
|
|
}
|
|
}
|
|
|
|
private void setSelectorEnabled(boolean z) {
|
|
GateKeeperDrawable gateKeeperDrawable = this.h;
|
|
if (gateKeeperDrawable != null) {
|
|
gateKeeperDrawable.a(z);
|
|
}
|
|
}
|
|
|
|
public int a(int i, int i2, int i3, int i4, int i5) {
|
|
int listPaddingTop = getListPaddingTop();
|
|
int listPaddingBottom = getListPaddingBottom();
|
|
getListPaddingLeft();
|
|
getListPaddingRight();
|
|
int dividerHeight = getDividerHeight();
|
|
Drawable divider = getDivider();
|
|
ListAdapter adapter = getAdapter();
|
|
if (adapter == null) {
|
|
return listPaddingTop + listPaddingBottom;
|
|
}
|
|
int i6 = listPaddingTop + listPaddingBottom;
|
|
if (dividerHeight <= 0 || divider == null) {
|
|
dividerHeight = 0;
|
|
}
|
|
int count = adapter.getCount();
|
|
int i7 = i6;
|
|
View view = null;
|
|
int i8 = 0;
|
|
int i9 = 0;
|
|
int i10 = 0;
|
|
while (i8 < count) {
|
|
int itemViewType = adapter.getItemViewType(i8);
|
|
if (itemViewType != i9) {
|
|
view = null;
|
|
i9 = itemViewType;
|
|
}
|
|
view = adapter.getView(i8, view, this);
|
|
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
|
|
if (layoutParams == null) {
|
|
layoutParams = generateDefaultLayoutParams();
|
|
view.setLayoutParams(layoutParams);
|
|
}
|
|
int i11 = layoutParams.height;
|
|
view.measure(i, i11 > 0 ? View.MeasureSpec.makeMeasureSpec(i11, 1073741824) : View.MeasureSpec.makeMeasureSpec(0, 0));
|
|
view.forceLayout();
|
|
if (i8 > 0) {
|
|
i7 += dividerHeight;
|
|
}
|
|
i7 += view.getMeasuredHeight();
|
|
if (i7 >= i4) {
|
|
return (i5 < 0 || i8 <= i5 || i10 <= 0 || i7 == i4) ? i4 : i10;
|
|
}
|
|
if (i5 >= 0 && i8 >= i5) {
|
|
i10 = i7;
|
|
}
|
|
i8++;
|
|
}
|
|
return i7;
|
|
}
|
|
|
|
@Override // android.widget.ListView, android.widget.AbsListView, android.view.ViewGroup, android.view.View
|
|
protected void dispatchDraw(Canvas canvas) {
|
|
a(canvas);
|
|
super.dispatchDraw(canvas);
|
|
}
|
|
|
|
@Override // android.widget.AbsListView, android.view.ViewGroup, android.view.View
|
|
protected void drawableStateChanged() {
|
|
if (this.n != null) {
|
|
return;
|
|
}
|
|
super.drawableStateChanged();
|
|
setSelectorEnabled(true);
|
|
c();
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
public boolean hasFocus() {
|
|
return this.j || super.hasFocus();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean hasWindowFocus() {
|
|
return this.j || super.hasWindowFocus();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean isFocused() {
|
|
return this.j || super.isFocused();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean isInTouchMode() {
|
|
return (this.j && this.i) || super.isInTouchMode();
|
|
}
|
|
|
|
@Override // android.widget.ListView, android.widget.AbsListView, android.widget.AdapterView, android.view.ViewGroup, android.view.View
|
|
protected void onDetachedFromWindow() {
|
|
this.n = null;
|
|
super.onDetachedFromWindow();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean onHoverEvent(MotionEvent motionEvent) {
|
|
if (Build.VERSION.SDK_INT < 26) {
|
|
return super.onHoverEvent(motionEvent);
|
|
}
|
|
int actionMasked = motionEvent.getActionMasked();
|
|
if (actionMasked == 10 && this.n == null) {
|
|
this.n = new ResolveHoverRunnable();
|
|
this.n.a();
|
|
}
|
|
boolean onHoverEvent = super.onHoverEvent(motionEvent);
|
|
if (actionMasked == 9 || actionMasked == 7) {
|
|
int pointToPosition = pointToPosition((int) motionEvent.getX(), (int) motionEvent.getY());
|
|
if (pointToPosition != -1 && pointToPosition != getSelectedItemPosition()) {
|
|
View childAt = getChildAt(pointToPosition - getFirstVisiblePosition());
|
|
if (childAt.isEnabled()) {
|
|
setSelectionFromTop(pointToPosition, childAt.getTop() - getTop());
|
|
}
|
|
c();
|
|
}
|
|
} else {
|
|
setSelection(-1);
|
|
}
|
|
return onHoverEvent;
|
|
}
|
|
|
|
@Override // android.widget.AbsListView, android.view.View
|
|
public boolean onTouchEvent(MotionEvent motionEvent) {
|
|
if (motionEvent.getAction() == 0) {
|
|
this.f = pointToPosition((int) motionEvent.getX(), (int) motionEvent.getY());
|
|
}
|
|
ResolveHoverRunnable resolveHoverRunnable = this.n;
|
|
if (resolveHoverRunnable != null) {
|
|
resolveHoverRunnable.cancel();
|
|
}
|
|
return super.onTouchEvent(motionEvent);
|
|
}
|
|
|
|
void setListSelectionHidden(boolean z) {
|
|
this.i = z;
|
|
}
|
|
|
|
@Override // android.widget.AbsListView
|
|
public void setSelector(Drawable drawable) {
|
|
this.h = drawable != null ? new GateKeeperDrawable(drawable) : null;
|
|
super.setSelector(this.h);
|
|
Rect rect = new Rect();
|
|
if (drawable != null) {
|
|
drawable.getPadding(rect);
|
|
}
|
|
this.b = rect.left;
|
|
this.c = rect.top;
|
|
this.d = rect.right;
|
|
this.e = rect.bottom;
|
|
}
|
|
|
|
private boolean b() {
|
|
return this.k;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:6:0x000c, code lost:
|
|
|
|
if (r0 != 3) goto L8;
|
|
*/
|
|
/* JADX WARN: Removed duplicated region for block: B:11:0x004f */
|
|
/* JADX WARN: Removed duplicated region for block: B:17:0x0065 */
|
|
/* JADX WARN: Removed duplicated region for block: B:9:0x0048 A[ADDED_TO_REGION] */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct code enable 'Show inconsistent code' option in preferences
|
|
*/
|
|
public boolean a(android.view.MotionEvent r8, int r9) {
|
|
/*
|
|
r7 = this;
|
|
int r0 = r8.getActionMasked()
|
|
r1 = 0
|
|
r2 = 1
|
|
if (r0 == r2) goto L16
|
|
r3 = 2
|
|
if (r0 == r3) goto L14
|
|
r9 = 3
|
|
if (r0 == r9) goto L11
|
|
Le:
|
|
r9 = 0
|
|
r3 = 1
|
|
goto L46
|
|
L11:
|
|
r9 = 0
|
|
r3 = 0
|
|
goto L46
|
|
L14:
|
|
r3 = 1
|
|
goto L17
|
|
L16:
|
|
r3 = 0
|
|
L17:
|
|
int r9 = r8.findPointerIndex(r9)
|
|
if (r9 >= 0) goto L1e
|
|
goto L11
|
|
L1e:
|
|
float r4 = r8.getX(r9)
|
|
int r4 = (int) r4
|
|
float r9 = r8.getY(r9)
|
|
int r9 = (int) r9
|
|
int r5 = r7.pointToPosition(r4, r9)
|
|
r6 = -1
|
|
if (r5 != r6) goto L31
|
|
r9 = 1
|
|
goto L46
|
|
L31:
|
|
int r3 = r7.getFirstVisiblePosition()
|
|
int r3 = r5 - r3
|
|
android.view.View r3 = r7.getChildAt(r3)
|
|
float r4 = (float) r4
|
|
float r9 = (float) r9
|
|
r7.a(r3, r5, r4, r9)
|
|
if (r0 != r2) goto Le
|
|
r7.a(r3, r5)
|
|
goto Le
|
|
L46:
|
|
if (r3 == 0) goto L4a
|
|
if (r9 == 0) goto L4d
|
|
L4a:
|
|
r7.a()
|
|
L4d:
|
|
if (r3 == 0) goto L65
|
|
androidx.core.widget.ListViewAutoScrollHelper r9 = r7.m
|
|
if (r9 != 0) goto L5a
|
|
androidx.core.widget.ListViewAutoScrollHelper r9 = new androidx.core.widget.ListViewAutoScrollHelper
|
|
r9.<init>(r7)
|
|
r7.m = r9
|
|
L5a:
|
|
androidx.core.widget.ListViewAutoScrollHelper r9 = r7.m
|
|
r9.a(r2)
|
|
androidx.core.widget.ListViewAutoScrollHelper r9 = r7.m
|
|
r9.onTouch(r7, r8)
|
|
goto L6c
|
|
L65:
|
|
androidx.core.widget.ListViewAutoScrollHelper r8 = r7.m
|
|
if (r8 == 0) goto L6c
|
|
r8.a(r1)
|
|
L6c:
|
|
return r3
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: androidx.appcompat.widget.DropDownListView.a(android.view.MotionEvent, int):boolean");
|
|
}
|
|
|
|
private void a(View view, int i) {
|
|
performItemClick(view, i, getItemIdAtPosition(i));
|
|
}
|
|
|
|
private void a(Canvas canvas) {
|
|
Drawable selector;
|
|
if (this.a.isEmpty() || (selector = getSelector()) == null) {
|
|
return;
|
|
}
|
|
selector.setBounds(this.a);
|
|
selector.draw(canvas);
|
|
}
|
|
|
|
private void a(int i, View view, float f, float f2) {
|
|
b(i, view);
|
|
Drawable selector = getSelector();
|
|
if (selector == null || i == -1) {
|
|
return;
|
|
}
|
|
DrawableCompat.a(selector, f, f2);
|
|
}
|
|
|
|
private void a(int i, View view) {
|
|
Rect rect = this.a;
|
|
rect.set(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
|
|
rect.left -= this.b;
|
|
rect.top -= this.c;
|
|
rect.right += this.d;
|
|
rect.bottom += this.e;
|
|
try {
|
|
boolean z = this.g.getBoolean(this);
|
|
if (view.isEnabled() != z) {
|
|
this.g.set(this, Boolean.valueOf(!z));
|
|
if (i != -1) {
|
|
refreshDrawableState();
|
|
}
|
|
}
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void a() {
|
|
this.k = false;
|
|
setPressed(false);
|
|
drawableStateChanged();
|
|
View childAt = getChildAt(this.f - getFirstVisiblePosition());
|
|
if (childAt != null) {
|
|
childAt.setPressed(false);
|
|
}
|
|
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = this.l;
|
|
if (viewPropertyAnimatorCompat != null) {
|
|
viewPropertyAnimatorCompat.a();
|
|
this.l = null;
|
|
}
|
|
}
|
|
|
|
private void a(View view, int i, float f, float f2) {
|
|
View childAt;
|
|
this.k = true;
|
|
if (Build.VERSION.SDK_INT >= 21) {
|
|
drawableHotspotChanged(f, f2);
|
|
}
|
|
if (!isPressed()) {
|
|
setPressed(true);
|
|
}
|
|
layoutChildren();
|
|
int i2 = this.f;
|
|
if (i2 != -1 && (childAt = getChildAt(i2 - getFirstVisiblePosition())) != null && childAt != view && childAt.isPressed()) {
|
|
childAt.setPressed(false);
|
|
}
|
|
this.f = i;
|
|
float left = f - view.getLeft();
|
|
float top = f2 - view.getTop();
|
|
if (Build.VERSION.SDK_INT >= 21) {
|
|
view.drawableHotspotChanged(left, top);
|
|
}
|
|
if (!view.isPressed()) {
|
|
view.setPressed(true);
|
|
}
|
|
a(i, view, f, f2);
|
|
setSelectorEnabled(false);
|
|
refreshDrawableState();
|
|
}
|
|
}
|