ADD week 5
This commit is contained in:
		| @@ -0,0 +1,840 @@ | ||||
| package androidx.appcompat.widget; | ||||
|  | ||||
| import android.R; | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.content.res.Resources; | ||||
| import android.database.DataSetObserver; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.Build; | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.Log; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewTreeObserver; | ||||
| import android.widget.AdapterView; | ||||
| import android.widget.ListAdapter; | ||||
| import android.widget.ListView; | ||||
| import android.widget.PopupWindow; | ||||
| import android.widget.Spinner; | ||||
| import android.widget.SpinnerAdapter; | ||||
| import androidx.activity.ComponentDialog$$ExternalSyntheticApiModelOutline0; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.appcompat.content.res.AppCompatResources; | ||||
| import androidx.core.util.ObjectsCompat; | ||||
| import androidx.core.view.TintableBackgroundView; | ||||
| import androidx.core.view.ViewCompat; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class AppCompatSpinner extends Spinner implements TintableBackgroundView { | ||||
|     private static final int[] ATTRS_ANDROID_SPINNERMODE = {R.attr.spinnerMode}; | ||||
|     private static final int MAX_ITEMS_MEASURED = 15; | ||||
|     private static final int MODE_DIALOG = 0; | ||||
|     private static final int MODE_DROPDOWN = 1; | ||||
|     private static final int MODE_THEME = -1; | ||||
|     private static final String TAG = "AppCompatSpinner"; | ||||
|     private final AppCompatBackgroundHelper mBackgroundTintHelper; | ||||
|     int mDropDownWidth; | ||||
|     private ForwardingListener mForwardingListener; | ||||
|     private SpinnerPopup mPopup; | ||||
|     private final Context mPopupContext; | ||||
|     private final boolean mPopupSet; | ||||
|     private SpinnerAdapter mTempAdapter; | ||||
|     final Rect mTempRect; | ||||
|  | ||||
|     interface SpinnerPopup { | ||||
|         void dismiss(); | ||||
|  | ||||
|         Drawable getBackground(); | ||||
|  | ||||
|         CharSequence getHintText(); | ||||
|  | ||||
|         int getHorizontalOffset(); | ||||
|  | ||||
|         int getHorizontalOriginalOffset(); | ||||
|  | ||||
|         int getVerticalOffset(); | ||||
|  | ||||
|         boolean isShowing(); | ||||
|  | ||||
|         void setAdapter(ListAdapter listAdapter); | ||||
|  | ||||
|         void setBackgroundDrawable(Drawable drawable); | ||||
|  | ||||
|         void setHorizontalOffset(int i); | ||||
|  | ||||
|         void setHorizontalOriginalOffset(int i); | ||||
|  | ||||
|         void setPromptText(CharSequence charSequence); | ||||
|  | ||||
|         void setVerticalOffset(int i); | ||||
|  | ||||
|         void show(int i, int i2); | ||||
|     } | ||||
|  | ||||
|     final SpinnerPopup getInternalPopup() { | ||||
|         return this.mPopup; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public Context getPopupContext() { | ||||
|         return this.mPopupContext; | ||||
|     } | ||||
|  | ||||
|     public AppCompatSpinner(Context context) { | ||||
|         this(context, (AttributeSet) null); | ||||
|     } | ||||
|  | ||||
|     public AppCompatSpinner(Context context, int i) { | ||||
|         this(context, null, androidx.appcompat.R.attr.spinnerStyle, i); | ||||
|     } | ||||
|  | ||||
|     public AppCompatSpinner(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, androidx.appcompat.R.attr.spinnerStyle); | ||||
|     } | ||||
|  | ||||
|     public AppCompatSpinner(Context context, AttributeSet attributeSet, int i) { | ||||
|         this(context, attributeSet, i, -1); | ||||
|     } | ||||
|  | ||||
|     public AppCompatSpinner(Context context, AttributeSet attributeSet, int i, int i2) { | ||||
|         this(context, attributeSet, i, i2, null); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:28:0x004f, code lost: | ||||
|      | ||||
|         if (r11 != null) goto L16; | ||||
|      */ | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:29:0x0051, code lost: | ||||
|      | ||||
|         r11.recycle(); | ||||
|      */ | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:32:0x0062, code lost: | ||||
|      | ||||
|         if (r11 == null) goto L31; | ||||
|      */ | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public AppCompatSpinner(android.content.Context r7, android.util.AttributeSet r8, int r9, int r10, android.content.res.Resources.Theme r11) { | ||||
|         /* | ||||
|             Method dump skipped, instructions count: 230 | ||||
|             To view this dump add '--comments-level debug' option | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.appcompat.widget.AppCompatSpinner.<init>(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources$Theme):void"); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setPopupBackgroundDrawable(Drawable drawable) { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             spinnerPopup.setBackgroundDrawable(drawable); | ||||
|         } else { | ||||
|             super.setPopupBackgroundDrawable(drawable); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setPopupBackgroundResource(int i) { | ||||
|         setPopupBackgroundDrawable(AppCompatResources.getDrawable(getPopupContext(), i)); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public Drawable getPopupBackground() { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             return spinnerPopup.getBackground(); | ||||
|         } | ||||
|         return super.getPopupBackground(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setDropDownVerticalOffset(int i) { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             spinnerPopup.setVerticalOffset(i); | ||||
|         } else { | ||||
|             super.setDropDownVerticalOffset(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public int getDropDownVerticalOffset() { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             return spinnerPopup.getVerticalOffset(); | ||||
|         } | ||||
|         return super.getDropDownVerticalOffset(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setDropDownHorizontalOffset(int i) { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             spinnerPopup.setHorizontalOriginalOffset(i); | ||||
|             this.mPopup.setHorizontalOffset(i); | ||||
|         } else { | ||||
|             super.setDropDownHorizontalOffset(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public int getDropDownHorizontalOffset() { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             return spinnerPopup.getHorizontalOffset(); | ||||
|         } | ||||
|         return super.getDropDownHorizontalOffset(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setDropDownWidth(int i) { | ||||
|         if (this.mPopup != null) { | ||||
|             this.mDropDownWidth = i; | ||||
|         } else { | ||||
|             super.setDropDownWidth(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public int getDropDownWidth() { | ||||
|         return this.mPopup != null ? this.mDropDownWidth : super.getDropDownWidth(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.AdapterView | ||||
|     public void setAdapter(SpinnerAdapter spinnerAdapter) { | ||||
|         if (!this.mPopupSet) { | ||||
|             this.mTempAdapter = spinnerAdapter; | ||||
|             return; | ||||
|         } | ||||
|         super.setAdapter(spinnerAdapter); | ||||
|         if (this.mPopup != null) { | ||||
|             Context context = this.mPopupContext; | ||||
|             if (context == null) { | ||||
|                 context = getContext(); | ||||
|             } | ||||
|             this.mPopup.setAdapter(new DropDownAdapter(spinnerAdapter, context.getTheme())); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.widget.AdapterView, android.view.ViewGroup, android.view.View | ||||
|     protected void onDetachedFromWindow() { | ||||
|         super.onDetachedFromWindow(); | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup == null || !spinnerPopup.isShowing()) { | ||||
|             return; | ||||
|         } | ||||
|         this.mPopup.dismiss(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.view.View | ||||
|     public boolean onTouchEvent(MotionEvent motionEvent) { | ||||
|         ForwardingListener forwardingListener = this.mForwardingListener; | ||||
|         if (forwardingListener == null || !forwardingListener.onTouch(this, motionEvent)) { | ||||
|             return super.onTouchEvent(motionEvent); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.widget.AbsSpinner, android.view.View | ||||
|     protected void onMeasure(int i, int i2) { | ||||
|         super.onMeasure(i, i2); | ||||
|         if (this.mPopup == null || View.MeasureSpec.getMode(i) != Integer.MIN_VALUE) { | ||||
|             return; | ||||
|         } | ||||
|         setMeasuredDimension(Math.min(Math.max(getMeasuredWidth(), compatMeasureContentWidth(getAdapter(), getBackground())), View.MeasureSpec.getSize(i)), getMeasuredHeight()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.view.View | ||||
|     public boolean performClick() { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             if (spinnerPopup.isShowing()) { | ||||
|                 return true; | ||||
|             } | ||||
|             showPopup(); | ||||
|             return true; | ||||
|         } | ||||
|         return super.performClick(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public void setPrompt(CharSequence charSequence) { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         if (spinnerPopup != null) { | ||||
|             spinnerPopup.setPromptText(charSequence); | ||||
|         } else { | ||||
|             super.setPrompt(charSequence); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner | ||||
|     public CharSequence getPrompt() { | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         return spinnerPopup != null ? spinnerPopup.getHintText() : super.getPrompt(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setBackgroundResource(int i) { | ||||
|         super.setBackgroundResource(i); | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             appCompatBackgroundHelper.onSetBackgroundResource(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setBackgroundDrawable(Drawable drawable) { | ||||
|         super.setBackgroundDrawable(drawable); | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             appCompatBackgroundHelper.onSetBackgroundDrawable(drawable); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.TintableBackgroundView | ||||
|     public void setSupportBackgroundTintList(ColorStateList colorStateList) { | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             appCompatBackgroundHelper.setSupportBackgroundTintList(colorStateList); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.TintableBackgroundView | ||||
|     public ColorStateList getSupportBackgroundTintList() { | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             return appCompatBackgroundHelper.getSupportBackgroundTintList(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.TintableBackgroundView | ||||
|     public void setSupportBackgroundTintMode(PorterDuff.Mode mode) { | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             appCompatBackgroundHelper.setSupportBackgroundTintMode(mode); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.TintableBackgroundView | ||||
|     public PorterDuff.Mode getSupportBackgroundTintMode() { | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             return appCompatBackgroundHelper.getSupportBackgroundTintMode(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void drawableStateChanged() { | ||||
|         super.drawableStateChanged(); | ||||
|         AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; | ||||
|         if (appCompatBackgroundHelper != null) { | ||||
|             appCompatBackgroundHelper.applySupportBackgroundTint(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     int compatMeasureContentWidth(SpinnerAdapter spinnerAdapter, Drawable drawable) { | ||||
|         int i = 0; | ||||
|         if (spinnerAdapter == null) { | ||||
|             return 0; | ||||
|         } | ||||
|         int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(getMeasuredWidth(), 0); | ||||
|         int makeMeasureSpec2 = View.MeasureSpec.makeMeasureSpec(getMeasuredHeight(), 0); | ||||
|         int max = Math.max(0, getSelectedItemPosition()); | ||||
|         int min = Math.min(spinnerAdapter.getCount(), max + 15); | ||||
|         View view = null; | ||||
|         int i2 = 0; | ||||
|         for (int max2 = Math.max(0, max - (15 - (min - max))); max2 < min; max2++) { | ||||
|             int itemViewType = spinnerAdapter.getItemViewType(max2); | ||||
|             if (itemViewType != i) { | ||||
|                 view = null; | ||||
|                 i = itemViewType; | ||||
|             } | ||||
|             view = spinnerAdapter.getView(max2, view, this); | ||||
|             if (view.getLayoutParams() == null) { | ||||
|                 view.setLayoutParams(new ViewGroup.LayoutParams(-2, -2)); | ||||
|             } | ||||
|             view.measure(makeMeasureSpec, makeMeasureSpec2); | ||||
|             i2 = Math.max(i2, view.getMeasuredWidth()); | ||||
|         } | ||||
|         if (drawable == null) { | ||||
|             return i2; | ||||
|         } | ||||
|         drawable.getPadding(this.mTempRect); | ||||
|         return i2 + this.mTempRect.left + this.mTempRect.right; | ||||
|     } | ||||
|  | ||||
|     void showPopup() { | ||||
|         this.mPopup.show(Api17Impl.getTextDirection(this), Api17Impl.getTextAlignment(this)); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.widget.AbsSpinner, android.view.View | ||||
|     public Parcelable onSaveInstanceState() { | ||||
|         SavedState savedState = new SavedState(super.onSaveInstanceState()); | ||||
|         SpinnerPopup spinnerPopup = this.mPopup; | ||||
|         savedState.mShowDropdown = spinnerPopup != null && spinnerPopup.isShowing(); | ||||
|         return savedState; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Spinner, android.widget.AbsSpinner, android.view.View | ||||
|     public void onRestoreInstanceState(Parcelable parcelable) { | ||||
|         ViewTreeObserver viewTreeObserver; | ||||
|         SavedState savedState = (SavedState) parcelable; | ||||
|         super.onRestoreInstanceState(savedState.getSuperState()); | ||||
|         if (!savedState.mShowDropdown || (viewTreeObserver = getViewTreeObserver()) == null) { | ||||
|             return; | ||||
|         } | ||||
|         viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { // from class: androidx.appcompat.widget.AppCompatSpinner.2 | ||||
|             @Override // android.view.ViewTreeObserver.OnGlobalLayoutListener | ||||
|             public void onGlobalLayout() { | ||||
|                 if (!AppCompatSpinner.this.getInternalPopup().isShowing()) { | ||||
|                     AppCompatSpinner.this.showPopup(); | ||||
|                 } | ||||
|                 ViewTreeObserver viewTreeObserver2 = AppCompatSpinner.this.getViewTreeObserver(); | ||||
|                 if (viewTreeObserver2 != null) { | ||||
|                     Api16Impl.removeOnGlobalLayoutListener(viewTreeObserver2, this); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     static class SavedState extends View.BaseSavedState { | ||||
|         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { // from class: androidx.appcompat.widget.AppCompatSpinner.SavedState.1 | ||||
|             /* JADX WARN: Can't rename method to resolve collision */ | ||||
|             @Override // android.os.Parcelable.Creator | ||||
|             public SavedState createFromParcel(Parcel parcel) { | ||||
|                 return new SavedState(parcel); | ||||
|             } | ||||
|  | ||||
|             /* JADX WARN: Can't rename method to resolve collision */ | ||||
|             @Override // android.os.Parcelable.Creator | ||||
|             public SavedState[] newArray(int i) { | ||||
|                 return new SavedState[i]; | ||||
|             } | ||||
|         }; | ||||
|         boolean mShowDropdown; | ||||
|  | ||||
|         SavedState(Parcelable parcelable) { | ||||
|             super(parcelable); | ||||
|         } | ||||
|  | ||||
|         SavedState(Parcel parcel) { | ||||
|             super(parcel); | ||||
|             this.mShowDropdown = parcel.readByte() != 0; | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.View.BaseSavedState, android.view.AbsSavedState, android.os.Parcelable | ||||
|         public void writeToParcel(Parcel parcel, int i) { | ||||
|             super.writeToParcel(parcel, i); | ||||
|             parcel.writeByte(this.mShowDropdown ? (byte) 1 : (byte) 0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class DropDownAdapter implements ListAdapter, SpinnerAdapter { | ||||
|         private SpinnerAdapter mAdapter; | ||||
|         private ListAdapter mListAdapter; | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public int getItemViewType(int i) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public int getViewTypeCount() { | ||||
|             return 1; | ||||
|         } | ||||
|  | ||||
|         public DropDownAdapter(SpinnerAdapter spinnerAdapter, Resources.Theme theme) { | ||||
|             this.mAdapter = spinnerAdapter; | ||||
|             if (spinnerAdapter instanceof ListAdapter) { | ||||
|                 this.mListAdapter = (ListAdapter) spinnerAdapter; | ||||
|             } | ||||
|             if (theme != null) { | ||||
|                 if (Build.VERSION.SDK_INT >= 23 && ComponentDialog$$ExternalSyntheticApiModelOutline0.m33m((Object) spinnerAdapter)) { | ||||
|                     Api23Impl.setDropDownViewTheme(ComponentDialog$$ExternalSyntheticApiModelOutline0.m16m((Object) spinnerAdapter), theme); | ||||
|                 } else if (spinnerAdapter instanceof ThemedSpinnerAdapter) { | ||||
|                     ThemedSpinnerAdapter themedSpinnerAdapter = (ThemedSpinnerAdapter) spinnerAdapter; | ||||
|                     if (themedSpinnerAdapter.getDropDownViewTheme() == null) { | ||||
|                         themedSpinnerAdapter.setDropDownViewTheme(theme); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public int getCount() { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter == null) { | ||||
|                 return 0; | ||||
|             } | ||||
|             return spinnerAdapter.getCount(); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public Object getItem(int i) { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             return spinnerAdapter.getItem(i); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public long getItemId(int i) { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter == null) { | ||||
|                 return -1L; | ||||
|             } | ||||
|             return spinnerAdapter.getItemId(i); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public View getView(int i, View view, ViewGroup viewGroup) { | ||||
|             return getDropDownView(i, view, viewGroup); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.SpinnerAdapter | ||||
|         public View getDropDownView(int i, View view, ViewGroup viewGroup) { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             return spinnerAdapter.getDropDownView(i, view, viewGroup); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public boolean hasStableIds() { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             return spinnerAdapter != null && spinnerAdapter.hasStableIds(); | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public void registerDataSetObserver(DataSetObserver dataSetObserver) { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter != null) { | ||||
|                 spinnerAdapter.registerDataSetObserver(dataSetObserver); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { | ||||
|             SpinnerAdapter spinnerAdapter = this.mAdapter; | ||||
|             if (spinnerAdapter != null) { | ||||
|                 spinnerAdapter.unregisterDataSetObserver(dataSetObserver); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.ListAdapter | ||||
|         public boolean areAllItemsEnabled() { | ||||
|             ListAdapter listAdapter = this.mListAdapter; | ||||
|             if (listAdapter != null) { | ||||
|                 return listAdapter.areAllItemsEnabled(); | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.ListAdapter | ||||
|         public boolean isEnabled(int i) { | ||||
|             ListAdapter listAdapter = this.mListAdapter; | ||||
|             if (listAdapter != null) { | ||||
|                 return listAdapter.isEnabled(i); | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.Adapter | ||||
|         public boolean isEmpty() { | ||||
|             return getCount() == 0; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class DialogPopup implements SpinnerPopup, DialogInterface.OnClickListener { | ||||
|         private ListAdapter mListAdapter; | ||||
|         AlertDialog mPopup; | ||||
|         private CharSequence mPrompt; | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public Drawable getBackground() { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public CharSequence getHintText() { | ||||
|             return this.mPrompt; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public int getHorizontalOffset() { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public int getHorizontalOriginalOffset() { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public int getVerticalOffset() { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setAdapter(ListAdapter listAdapter) { | ||||
|             this.mListAdapter = listAdapter; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setPromptText(CharSequence charSequence) { | ||||
|             this.mPrompt = charSequence; | ||||
|         } | ||||
|  | ||||
|         DialogPopup() { | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void dismiss() { | ||||
|             AlertDialog alertDialog = this.mPopup; | ||||
|             if (alertDialog != null) { | ||||
|                 alertDialog.dismiss(); | ||||
|                 this.mPopup = null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public boolean isShowing() { | ||||
|             AlertDialog alertDialog = this.mPopup; | ||||
|             if (alertDialog != null) { | ||||
|                 return alertDialog.isShowing(); | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void show(int i, int i2) { | ||||
|             if (this.mListAdapter == null) { | ||||
|                 return; | ||||
|             } | ||||
|             AlertDialog.Builder builder = new AlertDialog.Builder(AppCompatSpinner.this.getPopupContext()); | ||||
|             CharSequence charSequence = this.mPrompt; | ||||
|             if (charSequence != null) { | ||||
|                 builder.setTitle(charSequence); | ||||
|             } | ||||
|             AlertDialog create = builder.setSingleChoiceItems(this.mListAdapter, AppCompatSpinner.this.getSelectedItemPosition(), this).create(); | ||||
|             this.mPopup = create; | ||||
|             ListView listView = create.getListView(); | ||||
|             Api17Impl.setTextDirection(listView, i); | ||||
|             Api17Impl.setTextAlignment(listView, i2); | ||||
|             this.mPopup.show(); | ||||
|         } | ||||
|  | ||||
|         @Override // android.content.DialogInterface.OnClickListener | ||||
|         public void onClick(DialogInterface dialogInterface, int i) { | ||||
|             AppCompatSpinner.this.setSelection(i); | ||||
|             if (AppCompatSpinner.this.getOnItemClickListener() != null) { | ||||
|                 AppCompatSpinner.this.performItemClick(null, i, this.mListAdapter.getItemId(i)); | ||||
|             } | ||||
|             dismiss(); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setBackgroundDrawable(Drawable drawable) { | ||||
|             Log.e(AppCompatSpinner.TAG, "Cannot set popup background for MODE_DIALOG, ignoring"); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setVerticalOffset(int i) { | ||||
|             Log.e(AppCompatSpinner.TAG, "Cannot set vertical offset for MODE_DIALOG, ignoring"); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setHorizontalOffset(int i) { | ||||
|             Log.e(AppCompatSpinner.TAG, "Cannot set horizontal offset for MODE_DIALOG, ignoring"); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setHorizontalOriginalOffset(int i) { | ||||
|             Log.e(AppCompatSpinner.TAG, "Cannot set horizontal (original) offset for MODE_DIALOG, ignoring"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class DropdownPopup extends ListPopupWindow implements SpinnerPopup { | ||||
|         ListAdapter mAdapter; | ||||
|         private CharSequence mHintText; | ||||
|         private int mOriginalHorizontalOffset; | ||||
|         private final Rect mVisibleRect; | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public CharSequence getHintText() { | ||||
|             return this.mHintText; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public int getHorizontalOriginalOffset() { | ||||
|             return this.mOriginalHorizontalOffset; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setHorizontalOriginalOffset(int i) { | ||||
|             this.mOriginalHorizontalOffset = i; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setPromptText(CharSequence charSequence) { | ||||
|             this.mHintText = charSequence; | ||||
|         } | ||||
|  | ||||
|         public DropdownPopup(Context context, AttributeSet attributeSet, int i) { | ||||
|             super(context, attributeSet, i); | ||||
|             this.mVisibleRect = new Rect(); | ||||
|             setAnchorView(AppCompatSpinner.this); | ||||
|             setModal(true); | ||||
|             setPromptPosition(0); | ||||
|             setOnItemClickListener(new AdapterView.OnItemClickListener() { // from class: androidx.appcompat.widget.AppCompatSpinner.DropdownPopup.1 | ||||
|                 @Override // android.widget.AdapterView.OnItemClickListener | ||||
|                 public void onItemClick(AdapterView<?> adapterView, View view, int i2, long j) { | ||||
|                     AppCompatSpinner.this.setSelection(i2); | ||||
|                     if (AppCompatSpinner.this.getOnItemClickListener() != null) { | ||||
|                         AppCompatSpinner.this.performItemClick(view, i2, DropdownPopup.this.mAdapter.getItemId(i2)); | ||||
|                     } | ||||
|                     DropdownPopup.this.dismiss(); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.ListPopupWindow, androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void setAdapter(ListAdapter listAdapter) { | ||||
|             super.setAdapter(listAdapter); | ||||
|             this.mAdapter = listAdapter; | ||||
|         } | ||||
|  | ||||
|         void computeContentWidth() { | ||||
|             int i; | ||||
|             int horizontalOriginalOffset; | ||||
|             Drawable background = getBackground(); | ||||
|             if (background != null) { | ||||
|                 background.getPadding(AppCompatSpinner.this.mTempRect); | ||||
|                 i = ViewUtils.isLayoutRtl(AppCompatSpinner.this) ? AppCompatSpinner.this.mTempRect.right : -AppCompatSpinner.this.mTempRect.left; | ||||
|             } else { | ||||
|                 Rect rect = AppCompatSpinner.this.mTempRect; | ||||
|                 AppCompatSpinner.this.mTempRect.right = 0; | ||||
|                 rect.left = 0; | ||||
|                 i = 0; | ||||
|             } | ||||
|             int paddingLeft = AppCompatSpinner.this.getPaddingLeft(); | ||||
|             int paddingRight = AppCompatSpinner.this.getPaddingRight(); | ||||
|             int width = AppCompatSpinner.this.getWidth(); | ||||
|             if (AppCompatSpinner.this.mDropDownWidth == -2) { | ||||
|                 int compatMeasureContentWidth = AppCompatSpinner.this.compatMeasureContentWidth((SpinnerAdapter) this.mAdapter, getBackground()); | ||||
|                 int i2 = (AppCompatSpinner.this.getContext().getResources().getDisplayMetrics().widthPixels - AppCompatSpinner.this.mTempRect.left) - AppCompatSpinner.this.mTempRect.right; | ||||
|                 if (compatMeasureContentWidth > i2) { | ||||
|                     compatMeasureContentWidth = i2; | ||||
|                 } | ||||
|                 setContentWidth(Math.max(compatMeasureContentWidth, (width - paddingLeft) - paddingRight)); | ||||
|             } else if (AppCompatSpinner.this.mDropDownWidth == -1) { | ||||
|                 setContentWidth((width - paddingLeft) - paddingRight); | ||||
|             } else { | ||||
|                 setContentWidth(AppCompatSpinner.this.mDropDownWidth); | ||||
|             } | ||||
|             if (ViewUtils.isLayoutRtl(AppCompatSpinner.this)) { | ||||
|                 horizontalOriginalOffset = i + (((width - paddingRight) - getWidth()) - getHorizontalOriginalOffset()); | ||||
|             } else { | ||||
|                 horizontalOriginalOffset = i + paddingLeft + getHorizontalOriginalOffset(); | ||||
|             } | ||||
|             setHorizontalOffset(horizontalOriginalOffset); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.appcompat.widget.AppCompatSpinner.SpinnerPopup | ||||
|         public void show(int i, int i2) { | ||||
|             ViewTreeObserver viewTreeObserver; | ||||
|             boolean isShowing = isShowing(); | ||||
|             computeContentWidth(); | ||||
|             setInputMethodMode(2); | ||||
|             super.show(); | ||||
|             ListView listView = getListView(); | ||||
|             listView.setChoiceMode(1); | ||||
|             Api17Impl.setTextDirection(listView, i); | ||||
|             Api17Impl.setTextAlignment(listView, i2); | ||||
|             setSelection(AppCompatSpinner.this.getSelectedItemPosition()); | ||||
|             if (isShowing || (viewTreeObserver = AppCompatSpinner.this.getViewTreeObserver()) == null) { | ||||
|                 return; | ||||
|             } | ||||
|             final ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { // from class: androidx.appcompat.widget.AppCompatSpinner.DropdownPopup.2 | ||||
|                 @Override // android.view.ViewTreeObserver.OnGlobalLayoutListener | ||||
|                 public void onGlobalLayout() { | ||||
|                     DropdownPopup dropdownPopup = DropdownPopup.this; | ||||
|                     if (!dropdownPopup.isVisibleToUser(AppCompatSpinner.this)) { | ||||
|                         DropdownPopup.this.dismiss(); | ||||
|                     } else { | ||||
|                         DropdownPopup.this.computeContentWidth(); | ||||
|                         DropdownPopup.super.show(); | ||||
|                     } | ||||
|                 } | ||||
|             }; | ||||
|             viewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener); | ||||
|             setOnDismissListener(new PopupWindow.OnDismissListener() { // from class: androidx.appcompat.widget.AppCompatSpinner.DropdownPopup.3 | ||||
|                 @Override // android.widget.PopupWindow.OnDismissListener | ||||
|                 public void onDismiss() { | ||||
|                     ViewTreeObserver viewTreeObserver2 = AppCompatSpinner.this.getViewTreeObserver(); | ||||
|                     if (viewTreeObserver2 != null) { | ||||
|                         viewTreeObserver2.removeGlobalOnLayoutListener(onGlobalLayoutListener); | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         boolean isVisibleToUser(View view) { | ||||
|             return ViewCompat.isAttachedToWindow(view) && view.getGlobalVisibleRect(this.mVisibleRect); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final class Api23Impl { | ||||
|         private Api23Impl() { | ||||
|         } | ||||
|  | ||||
|         static void setDropDownViewTheme(android.widget.ThemedSpinnerAdapter themedSpinnerAdapter, Resources.Theme theme) { | ||||
|             if (ObjectsCompat.equals(themedSpinnerAdapter.getDropDownViewTheme(), theme)) { | ||||
|                 return; | ||||
|             } | ||||
|             themedSpinnerAdapter.setDropDownViewTheme(theme); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final class Api17Impl { | ||||
|         private Api17Impl() { | ||||
|         } | ||||
|  | ||||
|         static int getTextAlignment(View view) { | ||||
|             return view.getTextAlignment(); | ||||
|         } | ||||
|  | ||||
|         static void setTextAlignment(View view, int i) { | ||||
|             view.setTextAlignment(i); | ||||
|         } | ||||
|  | ||||
|         static int getTextDirection(View view) { | ||||
|             return view.getTextDirection(); | ||||
|         } | ||||
|  | ||||
|         static void setTextDirection(View view, int i) { | ||||
|             view.setTextDirection(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final class Api16Impl { | ||||
|         private Api16Impl() { | ||||
|         } | ||||
|  | ||||
|         static void removeOnGlobalLayoutListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) { | ||||
|             viewTreeObserver.removeOnGlobalLayoutListener(onGlobalLayoutListener); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user