353 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.textfield;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Rect;
 | |
| import android.graphics.drawable.ColorDrawable;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.graphics.drawable.RippleDrawable;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.ViewParent;
 | |
| import android.view.accessibility.AccessibilityManager;
 | |
| import android.widget.AdapterView;
 | |
| import android.widget.ArrayAdapter;
 | |
| import android.widget.Filterable;
 | |
| import android.widget.ListAdapter;
 | |
| import android.widget.TextView;
 | |
| import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
 | |
| import androidx.appcompat.widget.ListPopupWindow;
 | |
| import androidx.core.graphics.drawable.DrawableCompat;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.color.MaterialColors;
 | |
| import com.google.android.material.internal.ManufacturerUtils;
 | |
| import com.google.android.material.internal.ThemeEnforcement;
 | |
| import com.google.android.material.resources.MaterialResources;
 | |
| import com.google.android.material.shape.MaterialShapeDrawable;
 | |
| import com.google.android.material.theme.overlay.MaterialThemeOverlay;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MaterialAutoCompleteTextView extends AppCompatAutoCompleteTextView {
 | |
|     private static final int MAX_ITEMS_MEASURED = 15;
 | |
|     private final AccessibilityManager accessibilityManager;
 | |
|     private ColorStateList dropDownBackgroundTint;
 | |
|     private final ListPopupWindow modalListPopup;
 | |
|     private final float popupElevation;
 | |
|     private final int simpleItemLayout;
 | |
|     private int simpleItemSelectedColor;
 | |
|     private ColorStateList simpleItemSelectedRippleColor;
 | |
|     private final Rect tempRect;
 | |
| 
 | |
|     public ColorStateList getDropDownBackgroundTintList() {
 | |
|         return this.dropDownBackgroundTint;
 | |
|     }
 | |
| 
 | |
|     public float getPopupElevation() {
 | |
|         return this.popupElevation;
 | |
|     }
 | |
| 
 | |
|     public int getSimpleItemSelectedColor() {
 | |
|         return this.simpleItemSelectedColor;
 | |
|     }
 | |
| 
 | |
|     public ColorStateList getSimpleItemSelectedRippleColor() {
 | |
|         return this.simpleItemSelectedRippleColor;
 | |
|     }
 | |
| 
 | |
|     public MaterialAutoCompleteTextView(Context context) {
 | |
|         this(context, null);
 | |
|     }
 | |
| 
 | |
|     public MaterialAutoCompleteTextView(Context context, AttributeSet attributeSet) {
 | |
|         this(context, attributeSet, R.attr.autoCompleteTextViewStyle);
 | |
|     }
 | |
| 
 | |
|     public MaterialAutoCompleteTextView(Context context, AttributeSet attributeSet, int i) {
 | |
|         super(MaterialThemeOverlay.wrap(context, attributeSet, i, 0), attributeSet, i);
 | |
|         this.tempRect = new Rect();
 | |
|         Context context2 = getContext();
 | |
|         TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context2, attributeSet, R.styleable.MaterialAutoCompleteTextView, i, R.style.Widget_AppCompat_AutoCompleteTextView, new int[0]);
 | |
|         if (obtainStyledAttributes.hasValue(R.styleable.MaterialAutoCompleteTextView_android_inputType) && obtainStyledAttributes.getInt(R.styleable.MaterialAutoCompleteTextView_android_inputType, 0) == 0) {
 | |
|             setKeyListener(null);
 | |
|         }
 | |
|         this.simpleItemLayout = obtainStyledAttributes.getResourceId(R.styleable.MaterialAutoCompleteTextView_simpleItemLayout, R.layout.mtrl_auto_complete_simple_item);
 | |
|         this.popupElevation = obtainStyledAttributes.getDimensionPixelOffset(R.styleable.MaterialAutoCompleteTextView_android_popupElevation, R.dimen.mtrl_exposed_dropdown_menu_popup_elevation);
 | |
|         if (obtainStyledAttributes.hasValue(R.styleable.MaterialAutoCompleteTextView_dropDownBackgroundTint)) {
 | |
|             this.dropDownBackgroundTint = ColorStateList.valueOf(obtainStyledAttributes.getColor(R.styleable.MaterialAutoCompleteTextView_dropDownBackgroundTint, 0));
 | |
|         }
 | |
|         this.simpleItemSelectedColor = obtainStyledAttributes.getColor(R.styleable.MaterialAutoCompleteTextView_simpleItemSelectedColor, 0);
 | |
|         this.simpleItemSelectedRippleColor = MaterialResources.getColorStateList(context2, obtainStyledAttributes, R.styleable.MaterialAutoCompleteTextView_simpleItemSelectedRippleColor);
 | |
|         this.accessibilityManager = (AccessibilityManager) context2.getSystemService("accessibility");
 | |
|         ListPopupWindow listPopupWindow = new ListPopupWindow(context2);
 | |
|         this.modalListPopup = listPopupWindow;
 | |
|         listPopupWindow.setModal(true);
 | |
|         listPopupWindow.setAnchorView(this);
 | |
|         listPopupWindow.setInputMethodMode(2);
 | |
|         listPopupWindow.setAdapter(getAdapter());
 | |
|         listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { // from class: com.google.android.material.textfield.MaterialAutoCompleteTextView.1
 | |
|             @Override // android.widget.AdapterView.OnItemClickListener
 | |
|             public void onItemClick(AdapterView<?> adapterView, View view, int i2, long j) {
 | |
|                 MaterialAutoCompleteTextView materialAutoCompleteTextView = MaterialAutoCompleteTextView.this;
 | |
|                 MaterialAutoCompleteTextView.this.updateText(i2 < 0 ? materialAutoCompleteTextView.modalListPopup.getSelectedItem() : materialAutoCompleteTextView.getAdapter().getItem(i2));
 | |
|                 AdapterView.OnItemClickListener onItemClickListener = MaterialAutoCompleteTextView.this.getOnItemClickListener();
 | |
|                 if (onItemClickListener != null) {
 | |
|                     if (view == null || i2 < 0) {
 | |
|                         view = MaterialAutoCompleteTextView.this.modalListPopup.getSelectedView();
 | |
|                         i2 = MaterialAutoCompleteTextView.this.modalListPopup.getSelectedItemPosition();
 | |
|                         j = MaterialAutoCompleteTextView.this.modalListPopup.getSelectedItemId();
 | |
|                     }
 | |
|                     onItemClickListener.onItemClick(MaterialAutoCompleteTextView.this.modalListPopup.getListView(), view, i2, j);
 | |
|                 }
 | |
|                 MaterialAutoCompleteTextView.this.modalListPopup.dismiss();
 | |
|             }
 | |
|         });
 | |
|         if (obtainStyledAttributes.hasValue(R.styleable.MaterialAutoCompleteTextView_simpleItems)) {
 | |
|             setSimpleItems(obtainStyledAttributes.getResourceId(R.styleable.MaterialAutoCompleteTextView_simpleItems, 0));
 | |
|         }
 | |
|         obtainStyledAttributes.recycle();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView
 | |
|     public void showDropDown() {
 | |
|         if (isTouchExplorationEnabled()) {
 | |
|             this.modalListPopup.show();
 | |
|         } else {
 | |
|             super.showDropDown();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView
 | |
|     public void dismissDropDown() {
 | |
|         if (isTouchExplorationEnabled()) {
 | |
|             this.modalListPopup.dismiss();
 | |
|         } else {
 | |
|             super.dismissDropDown();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView, android.widget.TextView, android.view.View
 | |
|     public void onWindowFocusChanged(boolean z) {
 | |
|         if (isTouchExplorationEnabled()) {
 | |
|             return;
 | |
|         }
 | |
|         super.onWindowFocusChanged(z);
 | |
|     }
 | |
| 
 | |
|     private boolean isTouchExplorationEnabled() {
 | |
|         AccessibilityManager accessibilityManager = this.accessibilityManager;
 | |
|         return accessibilityManager != null && accessibilityManager.isTouchExplorationEnabled();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView
 | |
|     public <T extends ListAdapter & Filterable> void setAdapter(T t) {
 | |
|         super.setAdapter(t);
 | |
|         this.modalListPopup.setAdapter(getAdapter());
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView
 | |
|     public void setRawInputType(int i) {
 | |
|         super.setRawInputType(i);
 | |
|         onInputTypeChanged();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView
 | |
|     public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener onItemSelectedListener) {
 | |
|         super.setOnItemSelectedListener(onItemSelectedListener);
 | |
|         this.modalListPopup.setOnItemSelectedListener(getOnItemSelectedListener());
 | |
|     }
 | |
| 
 | |
|     public void setSimpleItems(int i) {
 | |
|         setSimpleItems(getResources().getStringArray(i));
 | |
|     }
 | |
| 
 | |
|     public void setSimpleItems(String[] strArr) {
 | |
|         setAdapter(new MaterialArrayAdapter(getContext(), this.simpleItemLayout, strArr));
 | |
|     }
 | |
| 
 | |
|     public void setDropDownBackgroundTint(int i) {
 | |
|         setDropDownBackgroundTintList(ColorStateList.valueOf(i));
 | |
|     }
 | |
| 
 | |
|     public void setDropDownBackgroundTintList(ColorStateList colorStateList) {
 | |
|         this.dropDownBackgroundTint = colorStateList;
 | |
|         Drawable dropDownBackground = getDropDownBackground();
 | |
|         if (dropDownBackground instanceof MaterialShapeDrawable) {
 | |
|             ((MaterialShapeDrawable) dropDownBackground).setFillColor(this.dropDownBackgroundTint);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setSimpleItemSelectedColor(int i) {
 | |
|         this.simpleItemSelectedColor = i;
 | |
|         if (getAdapter() instanceof MaterialArrayAdapter) {
 | |
|             ((MaterialArrayAdapter) getAdapter()).updateSelectedItemColorStateList();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setSimpleItemSelectedRippleColor(ColorStateList colorStateList) {
 | |
|         this.simpleItemSelectedRippleColor = colorStateList;
 | |
|         if (getAdapter() instanceof MaterialArrayAdapter) {
 | |
|             ((MaterialArrayAdapter) getAdapter()).updateSelectedItemColorStateList();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView
 | |
|     public void setDropDownBackgroundDrawable(Drawable drawable) {
 | |
|         super.setDropDownBackgroundDrawable(drawable);
 | |
|         ListPopupWindow listPopupWindow = this.modalListPopup;
 | |
|         if (listPopupWindow != null) {
 | |
|             listPopupWindow.setBackgroundDrawable(drawable);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView, android.widget.TextView, android.view.View
 | |
|     protected void onAttachedToWindow() {
 | |
|         super.onAttachedToWindow();
 | |
|         TextInputLayout findTextInputLayoutAncestor = findTextInputLayoutAncestor();
 | |
|         if (findTextInputLayoutAncestor != null && findTextInputLayoutAncestor.isProvidingHint() && super.getHint() == null && ManufacturerUtils.isMeizuDevice()) {
 | |
|             setHint("");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.AutoCompleteTextView, android.view.View
 | |
|     protected void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         this.modalListPopup.dismiss();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView
 | |
|     public CharSequence getHint() {
 | |
|         TextInputLayout findTextInputLayoutAncestor = findTextInputLayoutAncestor();
 | |
|         if (findTextInputLayoutAncestor != null && findTextInputLayoutAncestor.isProvidingHint()) {
 | |
|             return findTextInputLayoutAncestor.getHint();
 | |
|         }
 | |
|         return super.getHint();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView, android.view.View
 | |
|     protected void onMeasure(int i, int i2) {
 | |
|         super.onMeasure(i, i2);
 | |
|         if (View.MeasureSpec.getMode(i) == Integer.MIN_VALUE) {
 | |
|             setMeasuredDimension(Math.min(Math.max(getMeasuredWidth(), measureContentWidth()), View.MeasureSpec.getSize(i)), getMeasuredHeight());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private int measureContentWidth() {
 | |
|         ListAdapter adapter = getAdapter();
 | |
|         TextInputLayout findTextInputLayoutAncestor = findTextInputLayoutAncestor();
 | |
|         int i = 0;
 | |
|         if (adapter == null || findTextInputLayoutAncestor == null) {
 | |
|             return 0;
 | |
|         }
 | |
|         int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(getMeasuredWidth(), 0);
 | |
|         int makeMeasureSpec2 = View.MeasureSpec.makeMeasureSpec(getMeasuredHeight(), 0);
 | |
|         int min = Math.min(adapter.getCount(), Math.max(0, this.modalListPopup.getSelectedItemPosition()) + 15);
 | |
|         View view = null;
 | |
|         int i2 = 0;
 | |
|         for (int max = Math.max(0, min - 15); max < min; max++) {
 | |
|             int itemViewType = adapter.getItemViewType(max);
 | |
|             if (itemViewType != i) {
 | |
|                 view = null;
 | |
|                 i = itemViewType;
 | |
|             }
 | |
|             view = adapter.getView(max, view, findTextInputLayoutAncestor);
 | |
|             if (view.getLayoutParams() == null) {
 | |
|                 view.setLayoutParams(new ViewGroup.LayoutParams(-2, -2));
 | |
|             }
 | |
|             view.measure(makeMeasureSpec, makeMeasureSpec2);
 | |
|             i2 = Math.max(i2, view.getMeasuredWidth());
 | |
|         }
 | |
|         Drawable background = this.modalListPopup.getBackground();
 | |
|         if (background != null) {
 | |
|             background.getPadding(this.tempRect);
 | |
|             i2 += this.tempRect.left + this.tempRect.right;
 | |
|         }
 | |
|         return i2 + findTextInputLayoutAncestor.getEndIconView().getMeasuredWidth();
 | |
|     }
 | |
| 
 | |
|     private void onInputTypeChanged() {
 | |
|         TextInputLayout findTextInputLayoutAncestor = findTextInputLayoutAncestor();
 | |
|         if (findTextInputLayoutAncestor != null) {
 | |
|             findTextInputLayoutAncestor.updateEditTextBoxBackgroundIfNeeded();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private TextInputLayout findTextInputLayoutAncestor() {
 | |
|         for (ViewParent parent = getParent(); parent != null; parent = parent.getParent()) {
 | |
|             if (parent instanceof TextInputLayout) {
 | |
|                 return (TextInputLayout) parent;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public <T extends ListAdapter & Filterable> void updateText(Object obj) {
 | |
|         setText(convertSelectionToString(obj), false);
 | |
|     }
 | |
| 
 | |
|     private class MaterialArrayAdapter<T> extends ArrayAdapter<String> {
 | |
|         private ColorStateList pressedRippleColor;
 | |
|         private ColorStateList selectedItemRippleOverlaidColor;
 | |
| 
 | |
|         MaterialArrayAdapter(Context context, int i, String[] strArr) {
 | |
|             super(context, i, strArr);
 | |
|             updateSelectedItemColorStateList();
 | |
|         }
 | |
| 
 | |
|         void updateSelectedItemColorStateList() {
 | |
|             this.pressedRippleColor = sanitizeDropdownItemSelectedRippleColor();
 | |
|             this.selectedItemRippleOverlaidColor = createItemSelectedColorStateList();
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.ArrayAdapter, android.widget.Adapter
 | |
|         public View getView(int i, View view, ViewGroup viewGroup) {
 | |
|             View view2 = super.getView(i, view, viewGroup);
 | |
|             if (view2 instanceof TextView) {
 | |
|                 TextView textView = (TextView) view2;
 | |
|                 ViewCompat.setBackground(textView, MaterialAutoCompleteTextView.this.getText().toString().contentEquals(textView.getText()) ? getSelectedItemDrawable() : null);
 | |
|             }
 | |
|             return view2;
 | |
|         }
 | |
| 
 | |
|         private Drawable getSelectedItemDrawable() {
 | |
|             if (!hasSelectedColor()) {
 | |
|                 return null;
 | |
|             }
 | |
|             ColorDrawable colorDrawable = new ColorDrawable(MaterialAutoCompleteTextView.this.simpleItemSelectedColor);
 | |
|             if (this.pressedRippleColor == null) {
 | |
|                 return colorDrawable;
 | |
|             }
 | |
|             DrawableCompat.setTintList(colorDrawable, this.selectedItemRippleOverlaidColor);
 | |
|             return new RippleDrawable(this.pressedRippleColor, colorDrawable, null);
 | |
|         }
 | |
| 
 | |
|         private ColorStateList createItemSelectedColorStateList() {
 | |
|             if (!hasSelectedColor() || !hasSelectedRippleColor()) {
 | |
|                 return null;
 | |
|             }
 | |
|             int[] iArr = {android.R.attr.state_hovered, -16842919};
 | |
|             int[] iArr2 = {android.R.attr.state_selected, -16842919};
 | |
|             return new ColorStateList(new int[][]{iArr2, iArr, new int[0]}, new int[]{MaterialColors.layer(MaterialAutoCompleteTextView.this.simpleItemSelectedColor, MaterialAutoCompleteTextView.this.simpleItemSelectedRippleColor.getColorForState(iArr2, 0)), MaterialColors.layer(MaterialAutoCompleteTextView.this.simpleItemSelectedColor, MaterialAutoCompleteTextView.this.simpleItemSelectedRippleColor.getColorForState(iArr, 0)), MaterialAutoCompleteTextView.this.simpleItemSelectedColor});
 | |
|         }
 | |
| 
 | |
|         private ColorStateList sanitizeDropdownItemSelectedRippleColor() {
 | |
|             if (!hasSelectedRippleColor()) {
 | |
|                 return null;
 | |
|             }
 | |
|             int[] iArr = {android.R.attr.state_pressed};
 | |
|             return new ColorStateList(new int[][]{iArr, new int[0]}, new int[]{MaterialAutoCompleteTextView.this.simpleItemSelectedRippleColor.getColorForState(iArr, 0), 0});
 | |
|         }
 | |
| 
 | |
|         private boolean hasSelectedColor() {
 | |
|             return MaterialAutoCompleteTextView.this.simpleItemSelectedColor != 0;
 | |
|         }
 | |
| 
 | |
|         private boolean hasSelectedRippleColor() {
 | |
|             return MaterialAutoCompleteTextView.this.simpleItemSelectedRippleColor != null;
 | |
|         }
 | |
|     }
 | |
| }
 |