ADD week 5
This commit is contained in:
		
							
								
								
									
										864
									
								
								02-Easy5/E5/sources/androidx/appcompat/app/AlertController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										864
									
								
								02-Easy5/E5/sources/androidx/appcompat/app/AlertController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,864 @@ | ||||
| package androidx.appcompat.app; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.res.TypedArray; | ||||
| import android.database.Cursor; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.Build; | ||||
| import android.os.Handler; | ||||
| import android.os.Message; | ||||
| import android.text.TextUtils; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.TypedValue; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewParent; | ||||
| import android.view.ViewStub; | ||||
| import android.view.Window; | ||||
| import android.widget.AbsListView; | ||||
| import android.widget.AdapterView; | ||||
| import android.widget.ArrayAdapter; | ||||
| import android.widget.Button; | ||||
| import android.widget.CheckedTextView; | ||||
| import android.widget.CursorAdapter; | ||||
| import android.widget.FrameLayout; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.ListAdapter; | ||||
| import android.widget.ListView; | ||||
| import android.widget.SimpleCursorAdapter; | ||||
| import android.widget.TextView; | ||||
| import androidx.appcompat.R; | ||||
| import androidx.appcompat.widget.LinearLayoutCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.widget.NestedScrollView; | ||||
| import java.lang.ref.WeakReference; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class AlertController { | ||||
|     ListAdapter mAdapter; | ||||
|     private int mAlertDialogLayout; | ||||
|     private final int mButtonIconDimen; | ||||
|     Button mButtonNegative; | ||||
|     private Drawable mButtonNegativeIcon; | ||||
|     Message mButtonNegativeMessage; | ||||
|     private CharSequence mButtonNegativeText; | ||||
|     Button mButtonNeutral; | ||||
|     private Drawable mButtonNeutralIcon; | ||||
|     Message mButtonNeutralMessage; | ||||
|     private CharSequence mButtonNeutralText; | ||||
|     private int mButtonPanelSideLayout; | ||||
|     Button mButtonPositive; | ||||
|     private Drawable mButtonPositiveIcon; | ||||
|     Message mButtonPositiveMessage; | ||||
|     private CharSequence mButtonPositiveText; | ||||
|     private final Context mContext; | ||||
|     private View mCustomTitleView; | ||||
|     final AppCompatDialog mDialog; | ||||
|     Handler mHandler; | ||||
|     private Drawable mIcon; | ||||
|     private ImageView mIconView; | ||||
|     int mListItemLayout; | ||||
|     int mListLayout; | ||||
|     ListView mListView; | ||||
|     private CharSequence mMessage; | ||||
|     private TextView mMessageView; | ||||
|     int mMultiChoiceItemLayout; | ||||
|     NestedScrollView mScrollView; | ||||
|     private boolean mShowTitle; | ||||
|     int mSingleChoiceItemLayout; | ||||
|     private CharSequence mTitle; | ||||
|     private TextView mTitleView; | ||||
|     private View mView; | ||||
|     private int mViewLayoutResId; | ||||
|     private int mViewSpacingBottom; | ||||
|     private int mViewSpacingLeft; | ||||
|     private int mViewSpacingRight; | ||||
|     private int mViewSpacingTop; | ||||
|     private final Window mWindow; | ||||
|     private boolean mViewSpacingSpecified = false; | ||||
|     private int mIconId = 0; | ||||
|     int mCheckedItem = -1; | ||||
|     private int mButtonPanelLayoutHint = 0; | ||||
|     private final View.OnClickListener mButtonHandler = new View.OnClickListener() { // from class: androidx.appcompat.app.AlertController.1 | ||||
|         @Override // android.view.View.OnClickListener | ||||
|         public void onClick(View view) { | ||||
|             Message obtain; | ||||
|             if (view == AlertController.this.mButtonPositive && AlertController.this.mButtonPositiveMessage != null) { | ||||
|                 obtain = Message.obtain(AlertController.this.mButtonPositiveMessage); | ||||
|             } else if (view == AlertController.this.mButtonNegative && AlertController.this.mButtonNegativeMessage != null) { | ||||
|                 obtain = Message.obtain(AlertController.this.mButtonNegativeMessage); | ||||
|             } else { | ||||
|                 obtain = (view != AlertController.this.mButtonNeutral || AlertController.this.mButtonNeutralMessage == null) ? null : Message.obtain(AlertController.this.mButtonNeutralMessage); | ||||
|             } | ||||
|             if (obtain != null) { | ||||
|                 obtain.sendToTarget(); | ||||
|             } | ||||
|             AlertController.this.mHandler.obtainMessage(1, AlertController.this.mDialog).sendToTarget(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     private int selectContentView() { | ||||
|         int i = this.mButtonPanelSideLayout; | ||||
|         return (i != 0 && this.mButtonPanelLayoutHint == 1) ? i : this.mAlertDialogLayout; | ||||
|     } | ||||
|  | ||||
|     public Button getButton(int i) { | ||||
|         if (i == -3) { | ||||
|             return this.mButtonNeutral; | ||||
|         } | ||||
|         if (i == -2) { | ||||
|             return this.mButtonNegative; | ||||
|         } | ||||
|         if (i != -1) { | ||||
|             return null; | ||||
|         } | ||||
|         return this.mButtonPositive; | ||||
|     } | ||||
|  | ||||
|     public ListView getListView() { | ||||
|         return this.mListView; | ||||
|     } | ||||
|  | ||||
|     public void setButtonPanelLayoutHint(int i) { | ||||
|         this.mButtonPanelLayoutHint = i; | ||||
|     } | ||||
|  | ||||
|     public void setCustomTitle(View view) { | ||||
|         this.mCustomTitleView = view; | ||||
|     } | ||||
|  | ||||
|     public void setView(int i) { | ||||
|         this.mView = null; | ||||
|         this.mViewLayoutResId = i; | ||||
|         this.mViewSpacingSpecified = false; | ||||
|     } | ||||
|  | ||||
|     public void setView(View view) { | ||||
|         this.mView = view; | ||||
|         this.mViewLayoutResId = 0; | ||||
|         this.mViewSpacingSpecified = false; | ||||
|     } | ||||
|  | ||||
|     public void setView(View view, int i, int i2, int i3, int i4) { | ||||
|         this.mView = view; | ||||
|         this.mViewLayoutResId = 0; | ||||
|         this.mViewSpacingSpecified = true; | ||||
|         this.mViewSpacingLeft = i; | ||||
|         this.mViewSpacingTop = i2; | ||||
|         this.mViewSpacingRight = i3; | ||||
|         this.mViewSpacingBottom = i4; | ||||
|     } | ||||
|  | ||||
|     private static final class ButtonHandler extends Handler { | ||||
|         private static final int MSG_DISMISS_DIALOG = 1; | ||||
|         private WeakReference<DialogInterface> mDialog; | ||||
|  | ||||
|         public ButtonHandler(DialogInterface dialogInterface) { | ||||
|             this.mDialog = new WeakReference<>(dialogInterface); | ||||
|         } | ||||
|  | ||||
|         @Override // android.os.Handler | ||||
|         public void handleMessage(Message message) { | ||||
|             int i = message.what; | ||||
|             if (i == -3 || i == -2 || i == -1) { | ||||
|                 ((DialogInterface.OnClickListener) message.obj).onClick(this.mDialog.get(), message.what); | ||||
|             } else { | ||||
|                 if (i != 1) { | ||||
|                     return; | ||||
|                 } | ||||
|                 ((DialogInterface) message.obj).dismiss(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static boolean shouldCenterSingleButton(Context context) { | ||||
|         TypedValue typedValue = new TypedValue(); | ||||
|         context.getTheme().resolveAttribute(R.attr.alertDialogCenterButtons, typedValue, true); | ||||
|         return typedValue.data != 0; | ||||
|     } | ||||
|  | ||||
|     public AlertController(Context context, AppCompatDialog appCompatDialog, Window window) { | ||||
|         this.mContext = context; | ||||
|         this.mDialog = appCompatDialog; | ||||
|         this.mWindow = window; | ||||
|         this.mHandler = new ButtonHandler(appCompatDialog); | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(null, R.styleable.AlertDialog, R.attr.alertDialogStyle, 0); | ||||
|         this.mAlertDialogLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_android_layout, 0); | ||||
|         this.mButtonPanelSideLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_buttonPanelSideLayout, 0); | ||||
|         this.mListLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_listLayout, 0); | ||||
|         this.mMultiChoiceItemLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_multiChoiceItemLayout, 0); | ||||
|         this.mSingleChoiceItemLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_singleChoiceItemLayout, 0); | ||||
|         this.mListItemLayout = obtainStyledAttributes.getResourceId(R.styleable.AlertDialog_listItemLayout, 0); | ||||
|         this.mShowTitle = obtainStyledAttributes.getBoolean(R.styleable.AlertDialog_showTitle, true); | ||||
|         this.mButtonIconDimen = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AlertDialog_buttonIconDimen, 0); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         appCompatDialog.supportRequestWindowFeature(1); | ||||
|     } | ||||
|  | ||||
|     static boolean canTextInput(View view) { | ||||
|         if (view.onCheckIsTextEditor()) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(view instanceof ViewGroup)) { | ||||
|             return false; | ||||
|         } | ||||
|         ViewGroup viewGroup = (ViewGroup) view; | ||||
|         int childCount = viewGroup.getChildCount(); | ||||
|         while (childCount > 0) { | ||||
|             childCount--; | ||||
|             if (canTextInput(viewGroup.getChildAt(childCount))) { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public void installContent() { | ||||
|         this.mDialog.setContentView(selectContentView()); | ||||
|         setupView(); | ||||
|     } | ||||
|  | ||||
|     public void setTitle(CharSequence charSequence) { | ||||
|         this.mTitle = charSequence; | ||||
|         TextView textView = this.mTitleView; | ||||
|         if (textView != null) { | ||||
|             textView.setText(charSequence); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setMessage(CharSequence charSequence) { | ||||
|         this.mMessage = charSequence; | ||||
|         TextView textView = this.mMessageView; | ||||
|         if (textView != null) { | ||||
|             textView.setText(charSequence); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setButton(int i, CharSequence charSequence, DialogInterface.OnClickListener onClickListener, Message message, Drawable drawable) { | ||||
|         if (message == null && onClickListener != null) { | ||||
|             message = this.mHandler.obtainMessage(i, onClickListener); | ||||
|         } | ||||
|         if (i == -3) { | ||||
|             this.mButtonNeutralText = charSequence; | ||||
|             this.mButtonNeutralMessage = message; | ||||
|             this.mButtonNeutralIcon = drawable; | ||||
|         } else if (i == -2) { | ||||
|             this.mButtonNegativeText = charSequence; | ||||
|             this.mButtonNegativeMessage = message; | ||||
|             this.mButtonNegativeIcon = drawable; | ||||
|         } else { | ||||
|             if (i != -1) { | ||||
|                 throw new IllegalArgumentException("Button does not exist"); | ||||
|             } | ||||
|             this.mButtonPositiveText = charSequence; | ||||
|             this.mButtonPositiveMessage = message; | ||||
|             this.mButtonPositiveIcon = drawable; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setIcon(int i) { | ||||
|         this.mIcon = null; | ||||
|         this.mIconId = i; | ||||
|         ImageView imageView = this.mIconView; | ||||
|         if (imageView != null) { | ||||
|             if (i != 0) { | ||||
|                 imageView.setVisibility(0); | ||||
|                 this.mIconView.setImageResource(this.mIconId); | ||||
|             } else { | ||||
|                 imageView.setVisibility(8); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setIcon(Drawable drawable) { | ||||
|         this.mIcon = drawable; | ||||
|         this.mIconId = 0; | ||||
|         ImageView imageView = this.mIconView; | ||||
|         if (imageView != null) { | ||||
|             if (drawable != null) { | ||||
|                 imageView.setVisibility(0); | ||||
|                 this.mIconView.setImageDrawable(drawable); | ||||
|             } else { | ||||
|                 imageView.setVisibility(8); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public int getIconAttributeResId(int i) { | ||||
|         TypedValue typedValue = new TypedValue(); | ||||
|         this.mContext.getTheme().resolveAttribute(i, typedValue, true); | ||||
|         return typedValue.resourceId; | ||||
|     } | ||||
|  | ||||
|     public boolean onKeyDown(int i, KeyEvent keyEvent) { | ||||
|         NestedScrollView nestedScrollView = this.mScrollView; | ||||
|         return nestedScrollView != null && nestedScrollView.executeKeyEvent(keyEvent); | ||||
|     } | ||||
|  | ||||
|     public boolean onKeyUp(int i, KeyEvent keyEvent) { | ||||
|         NestedScrollView nestedScrollView = this.mScrollView; | ||||
|         return nestedScrollView != null && nestedScrollView.executeKeyEvent(keyEvent); | ||||
|     } | ||||
|  | ||||
|     private ViewGroup resolvePanel(View view, View view2) { | ||||
|         if (view == null) { | ||||
|             if (view2 instanceof ViewStub) { | ||||
|                 view2 = ((ViewStub) view2).inflate(); | ||||
|             } | ||||
|             return (ViewGroup) view2; | ||||
|         } | ||||
|         if (view2 != null) { | ||||
|             ViewParent parent = view2.getParent(); | ||||
|             if (parent instanceof ViewGroup) { | ||||
|                 ((ViewGroup) parent).removeView(view2); | ||||
|             } | ||||
|         } | ||||
|         if (view instanceof ViewStub) { | ||||
|             view = ((ViewStub) view).inflate(); | ||||
|         } | ||||
|         return (ViewGroup) view; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     private void setupView() { | ||||
|         View findViewById; | ||||
|         ListAdapter listAdapter; | ||||
|         View findViewById2; | ||||
|         View findViewById3 = this.mWindow.findViewById(R.id.parentPanel); | ||||
|         View findViewById4 = findViewById3.findViewById(R.id.topPanel); | ||||
|         View findViewById5 = findViewById3.findViewById(R.id.contentPanel); | ||||
|         View findViewById6 = findViewById3.findViewById(R.id.buttonPanel); | ||||
|         ViewGroup viewGroup = (ViewGroup) findViewById3.findViewById(R.id.customPanel); | ||||
|         setupCustomContent(viewGroup); | ||||
|         View findViewById7 = viewGroup.findViewById(R.id.topPanel); | ||||
|         View findViewById8 = viewGroup.findViewById(R.id.contentPanel); | ||||
|         View findViewById9 = viewGroup.findViewById(R.id.buttonPanel); | ||||
|         ViewGroup resolvePanel = resolvePanel(findViewById7, findViewById4); | ||||
|         ViewGroup resolvePanel2 = resolvePanel(findViewById8, findViewById5); | ||||
|         ViewGroup resolvePanel3 = resolvePanel(findViewById9, findViewById6); | ||||
|         setupContent(resolvePanel2); | ||||
|         setupButtons(resolvePanel3); | ||||
|         setupTitle(resolvePanel); | ||||
|         boolean z = (viewGroup == null || viewGroup.getVisibility() == 8) ? false : true; | ||||
|         boolean z2 = (resolvePanel == null || resolvePanel.getVisibility() == 8) ? 0 : 1; | ||||
|         boolean z3 = (resolvePanel3 == null || resolvePanel3.getVisibility() == 8) ? false : true; | ||||
|         if (!z3 && resolvePanel2 != null && (findViewById2 = resolvePanel2.findViewById(R.id.textSpacerNoButtons)) != null) { | ||||
|             findViewById2.setVisibility(0); | ||||
|         } | ||||
|         if (z2 != 0) { | ||||
|             NestedScrollView nestedScrollView = this.mScrollView; | ||||
|             if (nestedScrollView != null) { | ||||
|                 nestedScrollView.setClipToPadding(true); | ||||
|             } | ||||
|             View findViewById10 = (this.mMessage == null && this.mListView == null) ? null : resolvePanel.findViewById(R.id.titleDividerNoCustom); | ||||
|             if (findViewById10 != null) { | ||||
|                 findViewById10.setVisibility(0); | ||||
|             } | ||||
|         } else if (resolvePanel2 != null && (findViewById = resolvePanel2.findViewById(R.id.textSpacerNoTitle)) != null) { | ||||
|             findViewById.setVisibility(0); | ||||
|         } | ||||
|         ListView listView = this.mListView; | ||||
|         if (listView instanceof RecycleListView) { | ||||
|             ((RecycleListView) listView).setHasDecor(z2, z3); | ||||
|         } | ||||
|         if (!z) { | ||||
|             View view = this.mListView; | ||||
|             if (view == null) { | ||||
|                 view = this.mScrollView; | ||||
|             } | ||||
|             if (view != null) { | ||||
|                 setScrollIndicators(resolvePanel2, view, z2 | (z3 ? 2 : 0), 3); | ||||
|             } | ||||
|         } | ||||
|         ListView listView2 = this.mListView; | ||||
|         if (listView2 == null || (listAdapter = this.mAdapter) == null) { | ||||
|             return; | ||||
|         } | ||||
|         listView2.setAdapter(listAdapter); | ||||
|         int i = this.mCheckedItem; | ||||
|         if (i > -1) { | ||||
|             listView2.setItemChecked(i, true); | ||||
|             listView2.setSelection(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void setScrollIndicators(ViewGroup viewGroup, View view, int i, int i2) { | ||||
|         final View findViewById = this.mWindow.findViewById(R.id.scrollIndicatorUp); | ||||
|         final View findViewById2 = this.mWindow.findViewById(R.id.scrollIndicatorDown); | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             ViewCompat.setScrollIndicators(view, i, i2); | ||||
|             if (findViewById != null) { | ||||
|                 viewGroup.removeView(findViewById); | ||||
|             } | ||||
|             if (findViewById2 != null) { | ||||
|                 viewGroup.removeView(findViewById2); | ||||
|                 return; | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         if (findViewById != null && (i & 1) == 0) { | ||||
|             viewGroup.removeView(findViewById); | ||||
|             findViewById = null; | ||||
|         } | ||||
|         if (findViewById2 != null && (i & 2) == 0) { | ||||
|             viewGroup.removeView(findViewById2); | ||||
|             findViewById2 = null; | ||||
|         } | ||||
|         if (findViewById == null && findViewById2 == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (this.mMessage != null) { | ||||
|             this.mScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { // from class: androidx.appcompat.app.AlertController.2 | ||||
|                 @Override // androidx.core.widget.NestedScrollView.OnScrollChangeListener | ||||
|                 public void onScrollChange(NestedScrollView nestedScrollView, int i3, int i4, int i5, int i6) { | ||||
|                     AlertController.manageScrollIndicators(nestedScrollView, findViewById, findViewById2); | ||||
|                 } | ||||
|             }); | ||||
|             this.mScrollView.post(new Runnable() { // from class: androidx.appcompat.app.AlertController.3 | ||||
|                 @Override // java.lang.Runnable | ||||
|                 public void run() { | ||||
|                     AlertController.manageScrollIndicators(AlertController.this.mScrollView, findViewById, findViewById2); | ||||
|                 } | ||||
|             }); | ||||
|             return; | ||||
|         } | ||||
|         ListView listView = this.mListView; | ||||
|         if (listView != null) { | ||||
|             listView.setOnScrollListener(new AbsListView.OnScrollListener() { // from class: androidx.appcompat.app.AlertController.4 | ||||
|                 @Override // android.widget.AbsListView.OnScrollListener | ||||
|                 public void onScrollStateChanged(AbsListView absListView, int i3) { | ||||
|                 } | ||||
|  | ||||
|                 @Override // android.widget.AbsListView.OnScrollListener | ||||
|                 public void onScroll(AbsListView absListView, int i3, int i4, int i5) { | ||||
|                     AlertController.manageScrollIndicators(absListView, findViewById, findViewById2); | ||||
|                 } | ||||
|             }); | ||||
|             this.mListView.post(new Runnable() { // from class: androidx.appcompat.app.AlertController.5 | ||||
|                 @Override // java.lang.Runnable | ||||
|                 public void run() { | ||||
|                     AlertController.manageScrollIndicators(AlertController.this.mListView, findViewById, findViewById2); | ||||
|                 } | ||||
|             }); | ||||
|             return; | ||||
|         } | ||||
|         if (findViewById != null) { | ||||
|             viewGroup.removeView(findViewById); | ||||
|         } | ||||
|         if (findViewById2 != null) { | ||||
|             viewGroup.removeView(findViewById2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void setupCustomContent(ViewGroup viewGroup) { | ||||
|         View view = this.mView; | ||||
|         if (view == null) { | ||||
|             view = this.mViewLayoutResId != 0 ? LayoutInflater.from(this.mContext).inflate(this.mViewLayoutResId, viewGroup, false) : null; | ||||
|         } | ||||
|         boolean z = view != null; | ||||
|         if (!z || !canTextInput(view)) { | ||||
|             this.mWindow.setFlags(131072, 131072); | ||||
|         } | ||||
|         if (z) { | ||||
|             FrameLayout frameLayout = (FrameLayout) this.mWindow.findViewById(R.id.custom); | ||||
|             frameLayout.addView(view, new ViewGroup.LayoutParams(-1, -1)); | ||||
|             if (this.mViewSpacingSpecified) { | ||||
|                 frameLayout.setPadding(this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom); | ||||
|             } | ||||
|             if (this.mListView != null) { | ||||
|                 ((LinearLayoutCompat.LayoutParams) viewGroup.getLayoutParams()).weight = 0.0f; | ||||
|                 return; | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         viewGroup.setVisibility(8); | ||||
|     } | ||||
|  | ||||
|     private void setupTitle(ViewGroup viewGroup) { | ||||
|         if (this.mCustomTitleView != null) { | ||||
|             viewGroup.addView(this.mCustomTitleView, 0, new ViewGroup.LayoutParams(-1, -2)); | ||||
|             this.mWindow.findViewById(R.id.title_template).setVisibility(8); | ||||
|             return; | ||||
|         } | ||||
|         this.mIconView = (ImageView) this.mWindow.findViewById(android.R.id.icon); | ||||
|         if ((!TextUtils.isEmpty(this.mTitle)) && this.mShowTitle) { | ||||
|             TextView textView = (TextView) this.mWindow.findViewById(R.id.alertTitle); | ||||
|             this.mTitleView = textView; | ||||
|             textView.setText(this.mTitle); | ||||
|             int i = this.mIconId; | ||||
|             if (i != 0) { | ||||
|                 this.mIconView.setImageResource(i); | ||||
|                 return; | ||||
|             } | ||||
|             Drawable drawable = this.mIcon; | ||||
|             if (drawable != null) { | ||||
|                 this.mIconView.setImageDrawable(drawable); | ||||
|                 return; | ||||
|             } else { | ||||
|                 this.mTitleView.setPadding(this.mIconView.getPaddingLeft(), this.mIconView.getPaddingTop(), this.mIconView.getPaddingRight(), this.mIconView.getPaddingBottom()); | ||||
|                 this.mIconView.setVisibility(8); | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|         this.mWindow.findViewById(R.id.title_template).setVisibility(8); | ||||
|         this.mIconView.setVisibility(8); | ||||
|         viewGroup.setVisibility(8); | ||||
|     } | ||||
|  | ||||
|     private void setupContent(ViewGroup viewGroup) { | ||||
|         NestedScrollView nestedScrollView = (NestedScrollView) this.mWindow.findViewById(R.id.scrollView); | ||||
|         this.mScrollView = nestedScrollView; | ||||
|         nestedScrollView.setFocusable(false); | ||||
|         this.mScrollView.setNestedScrollingEnabled(false); | ||||
|         TextView textView = (TextView) viewGroup.findViewById(android.R.id.message); | ||||
|         this.mMessageView = textView; | ||||
|         if (textView == null) { | ||||
|             return; | ||||
|         } | ||||
|         CharSequence charSequence = this.mMessage; | ||||
|         if (charSequence != null) { | ||||
|             textView.setText(charSequence); | ||||
|             return; | ||||
|         } | ||||
|         textView.setVisibility(8); | ||||
|         this.mScrollView.removeView(this.mMessageView); | ||||
|         if (this.mListView != null) { | ||||
|             ViewGroup viewGroup2 = (ViewGroup) this.mScrollView.getParent(); | ||||
|             int indexOfChild = viewGroup2.indexOfChild(this.mScrollView); | ||||
|             viewGroup2.removeViewAt(indexOfChild); | ||||
|             viewGroup2.addView(this.mListView, indexOfChild, new ViewGroup.LayoutParams(-1, -1)); | ||||
|             return; | ||||
|         } | ||||
|         viewGroup.setVisibility(8); | ||||
|     } | ||||
|  | ||||
|     static void manageScrollIndicators(View view, View view2, View view3) { | ||||
|         if (view2 != null) { | ||||
|             view2.setVisibility(view.canScrollVertically(-1) ? 0 : 4); | ||||
|         } | ||||
|         if (view3 != null) { | ||||
|             view3.setVisibility(view.canScrollVertically(1) ? 0 : 4); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void setupButtons(ViewGroup viewGroup) { | ||||
|         int i; | ||||
|         Button button = (Button) viewGroup.findViewById(android.R.id.button1); | ||||
|         this.mButtonPositive = button; | ||||
|         button.setOnClickListener(this.mButtonHandler); | ||||
|         if (TextUtils.isEmpty(this.mButtonPositiveText) && this.mButtonPositiveIcon == null) { | ||||
|             this.mButtonPositive.setVisibility(8); | ||||
|             i = 0; | ||||
|         } else { | ||||
|             this.mButtonPositive.setText(this.mButtonPositiveText); | ||||
|             Drawable drawable = this.mButtonPositiveIcon; | ||||
|             if (drawable != null) { | ||||
|                 int i2 = this.mButtonIconDimen; | ||||
|                 drawable.setBounds(0, 0, i2, i2); | ||||
|                 this.mButtonPositive.setCompoundDrawables(this.mButtonPositiveIcon, null, null, null); | ||||
|             } | ||||
|             this.mButtonPositive.setVisibility(0); | ||||
|             i = 1; | ||||
|         } | ||||
|         Button button2 = (Button) viewGroup.findViewById(android.R.id.button2); | ||||
|         this.mButtonNegative = button2; | ||||
|         button2.setOnClickListener(this.mButtonHandler); | ||||
|         if (TextUtils.isEmpty(this.mButtonNegativeText) && this.mButtonNegativeIcon == null) { | ||||
|             this.mButtonNegative.setVisibility(8); | ||||
|         } else { | ||||
|             this.mButtonNegative.setText(this.mButtonNegativeText); | ||||
|             Drawable drawable2 = this.mButtonNegativeIcon; | ||||
|             if (drawable2 != null) { | ||||
|                 int i3 = this.mButtonIconDimen; | ||||
|                 drawable2.setBounds(0, 0, i3, i3); | ||||
|                 this.mButtonNegative.setCompoundDrawables(this.mButtonNegativeIcon, null, null, null); | ||||
|             } | ||||
|             this.mButtonNegative.setVisibility(0); | ||||
|             i |= 2; | ||||
|         } | ||||
|         Button button3 = (Button) viewGroup.findViewById(android.R.id.button3); | ||||
|         this.mButtonNeutral = button3; | ||||
|         button3.setOnClickListener(this.mButtonHandler); | ||||
|         if (TextUtils.isEmpty(this.mButtonNeutralText) && this.mButtonNeutralIcon == null) { | ||||
|             this.mButtonNeutral.setVisibility(8); | ||||
|         } else { | ||||
|             this.mButtonNeutral.setText(this.mButtonNeutralText); | ||||
|             Drawable drawable3 = this.mButtonNeutralIcon; | ||||
|             if (drawable3 != null) { | ||||
|                 int i4 = this.mButtonIconDimen; | ||||
|                 drawable3.setBounds(0, 0, i4, i4); | ||||
|                 this.mButtonNeutral.setCompoundDrawables(this.mButtonNeutralIcon, null, null, null); | ||||
|             } | ||||
|             this.mButtonNeutral.setVisibility(0); | ||||
|             i |= 4; | ||||
|         } | ||||
|         if (shouldCenterSingleButton(this.mContext)) { | ||||
|             if (i == 1) { | ||||
|                 centerButton(this.mButtonPositive); | ||||
|             } else if (i == 2) { | ||||
|                 centerButton(this.mButtonNegative); | ||||
|             } else if (i == 4) { | ||||
|                 centerButton(this.mButtonNeutral); | ||||
|             } | ||||
|         } | ||||
|         if (i != 0) { | ||||
|             return; | ||||
|         } | ||||
|         viewGroup.setVisibility(8); | ||||
|     } | ||||
|  | ||||
|     private void centerButton(Button button) { | ||||
|         LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) button.getLayoutParams(); | ||||
|         layoutParams.gravity = 1; | ||||
|         layoutParams.weight = 0.5f; | ||||
|         button.setLayoutParams(layoutParams); | ||||
|     } | ||||
|  | ||||
|     public static class RecycleListView extends ListView { | ||||
|         private final int mPaddingBottomNoButtons; | ||||
|         private final int mPaddingTopNoTitle; | ||||
|  | ||||
|         public RecycleListView(Context context) { | ||||
|             this(context, null); | ||||
|         } | ||||
|  | ||||
|         public RecycleListView(Context context, AttributeSet attributeSet) { | ||||
|             super(context, attributeSet); | ||||
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.RecycleListView); | ||||
|             this.mPaddingBottomNoButtons = obtainStyledAttributes.getDimensionPixelOffset(R.styleable.RecycleListView_paddingBottomNoButtons, -1); | ||||
|             this.mPaddingTopNoTitle = obtainStyledAttributes.getDimensionPixelOffset(R.styleable.RecycleListView_paddingTopNoTitle, -1); | ||||
|         } | ||||
|  | ||||
|         public void setHasDecor(boolean z, boolean z2) { | ||||
|             if (z2 && z) { | ||||
|                 return; | ||||
|             } | ||||
|             setPadding(getPaddingLeft(), z ? getPaddingTop() : this.mPaddingTopNoTitle, getPaddingRight(), z2 ? getPaddingBottom() : this.mPaddingBottomNoButtons); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static class AlertParams { | ||||
|         public ListAdapter mAdapter; | ||||
|         public boolean[] mCheckedItems; | ||||
|         public final Context mContext; | ||||
|         public Cursor mCursor; | ||||
|         public View mCustomTitleView; | ||||
|         public boolean mForceInverseBackground; | ||||
|         public Drawable mIcon; | ||||
|         public final LayoutInflater mInflater; | ||||
|         public String mIsCheckedColumn; | ||||
|         public boolean mIsMultiChoice; | ||||
|         public boolean mIsSingleChoice; | ||||
|         public CharSequence[] mItems; | ||||
|         public String mLabelColumn; | ||||
|         public CharSequence mMessage; | ||||
|         public Drawable mNegativeButtonIcon; | ||||
|         public DialogInterface.OnClickListener mNegativeButtonListener; | ||||
|         public CharSequence mNegativeButtonText; | ||||
|         public Drawable mNeutralButtonIcon; | ||||
|         public DialogInterface.OnClickListener mNeutralButtonListener; | ||||
|         public CharSequence mNeutralButtonText; | ||||
|         public DialogInterface.OnCancelListener mOnCancelListener; | ||||
|         public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener; | ||||
|         public DialogInterface.OnClickListener mOnClickListener; | ||||
|         public DialogInterface.OnDismissListener mOnDismissListener; | ||||
|         public AdapterView.OnItemSelectedListener mOnItemSelectedListener; | ||||
|         public DialogInterface.OnKeyListener mOnKeyListener; | ||||
|         public OnPrepareListViewListener mOnPrepareListViewListener; | ||||
|         public Drawable mPositiveButtonIcon; | ||||
|         public DialogInterface.OnClickListener mPositiveButtonListener; | ||||
|         public CharSequence mPositiveButtonText; | ||||
|         public CharSequence mTitle; | ||||
|         public View mView; | ||||
|         public int mViewLayoutResId; | ||||
|         public int mViewSpacingBottom; | ||||
|         public int mViewSpacingLeft; | ||||
|         public int mViewSpacingRight; | ||||
|         public int mViewSpacingTop; | ||||
|         public int mIconId = 0; | ||||
|         public int mIconAttrId = 0; | ||||
|         public boolean mViewSpacingSpecified = false; | ||||
|         public int mCheckedItem = -1; | ||||
|         public boolean mRecycleOnMeasure = true; | ||||
|         public boolean mCancelable = true; | ||||
|  | ||||
|         public interface OnPrepareListViewListener { | ||||
|             void onPrepareListView(ListView listView); | ||||
|         } | ||||
|  | ||||
|         public AlertParams(Context context) { | ||||
|             this.mContext = context; | ||||
|             this.mInflater = (LayoutInflater) context.getSystemService("layout_inflater"); | ||||
|         } | ||||
|  | ||||
|         public void apply(AlertController alertController) { | ||||
|             View view = this.mCustomTitleView; | ||||
|             if (view != null) { | ||||
|                 alertController.setCustomTitle(view); | ||||
|             } else { | ||||
|                 CharSequence charSequence = this.mTitle; | ||||
|                 if (charSequence != null) { | ||||
|                     alertController.setTitle(charSequence); | ||||
|                 } | ||||
|                 Drawable drawable = this.mIcon; | ||||
|                 if (drawable != null) { | ||||
|                     alertController.setIcon(drawable); | ||||
|                 } | ||||
|                 int i = this.mIconId; | ||||
|                 if (i != 0) { | ||||
|                     alertController.setIcon(i); | ||||
|                 } | ||||
|                 int i2 = this.mIconAttrId; | ||||
|                 if (i2 != 0) { | ||||
|                     alertController.setIcon(alertController.getIconAttributeResId(i2)); | ||||
|                 } | ||||
|             } | ||||
|             CharSequence charSequence2 = this.mMessage; | ||||
|             if (charSequence2 != null) { | ||||
|                 alertController.setMessage(charSequence2); | ||||
|             } | ||||
|             CharSequence charSequence3 = this.mPositiveButtonText; | ||||
|             if (charSequence3 != null || this.mPositiveButtonIcon != null) { | ||||
|                 alertController.setButton(-1, charSequence3, this.mPositiveButtonListener, null, this.mPositiveButtonIcon); | ||||
|             } | ||||
|             CharSequence charSequence4 = this.mNegativeButtonText; | ||||
|             if (charSequence4 != null || this.mNegativeButtonIcon != null) { | ||||
|                 alertController.setButton(-2, charSequence4, this.mNegativeButtonListener, null, this.mNegativeButtonIcon); | ||||
|             } | ||||
|             CharSequence charSequence5 = this.mNeutralButtonText; | ||||
|             if (charSequence5 != null || this.mNeutralButtonIcon != null) { | ||||
|                 alertController.setButton(-3, charSequence5, this.mNeutralButtonListener, null, this.mNeutralButtonIcon); | ||||
|             } | ||||
|             if (this.mItems != null || this.mCursor != null || this.mAdapter != null) { | ||||
|                 createListView(alertController); | ||||
|             } | ||||
|             View view2 = this.mView; | ||||
|             if (view2 != null) { | ||||
|                 if (this.mViewSpacingSpecified) { | ||||
|                     alertController.setView(view2, this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom); | ||||
|                     return; | ||||
|                 } else { | ||||
|                     alertController.setView(view2); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|             int i3 = this.mViewLayoutResId; | ||||
|             if (i3 != 0) { | ||||
|                 alertController.setView(i3); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void createListView(final AlertController alertController) { | ||||
|             int i; | ||||
|             ListAdapter listAdapter; | ||||
|             final RecycleListView recycleListView = (RecycleListView) this.mInflater.inflate(alertController.mListLayout, (ViewGroup) null); | ||||
|             if (!this.mIsMultiChoice) { | ||||
|                 if (this.mIsSingleChoice) { | ||||
|                     i = alertController.mSingleChoiceItemLayout; | ||||
|                 } else { | ||||
|                     i = alertController.mListItemLayout; | ||||
|                 } | ||||
|                 int i2 = i; | ||||
|                 if (this.mCursor != null) { | ||||
|                     listAdapter = new SimpleCursorAdapter(this.mContext, i2, this.mCursor, new String[]{this.mLabelColumn}, new int[]{android.R.id.text1}); | ||||
|                 } else { | ||||
|                     listAdapter = this.mAdapter; | ||||
|                     if (listAdapter == null) { | ||||
|                         listAdapter = new CheckedItemAdapter(this.mContext, i2, android.R.id.text1, this.mItems); | ||||
|                     } | ||||
|                 } | ||||
|             } else if (this.mCursor == null) { | ||||
|                 listAdapter = new ArrayAdapter<CharSequence>(this.mContext, alertController.mMultiChoiceItemLayout, android.R.id.text1, this.mItems) { // from class: androidx.appcompat.app.AlertController.AlertParams.1 | ||||
|                     @Override // android.widget.ArrayAdapter, android.widget.Adapter | ||||
|                     public View getView(int i3, View view, ViewGroup viewGroup) { | ||||
|                         View view2 = super.getView(i3, view, viewGroup); | ||||
|                         if (AlertParams.this.mCheckedItems != null && AlertParams.this.mCheckedItems[i3]) { | ||||
|                             recycleListView.setItemChecked(i3, true); | ||||
|                         } | ||||
|                         return view2; | ||||
|                     } | ||||
|                 }; | ||||
|             } else { | ||||
|                 listAdapter = new CursorAdapter(this.mContext, this.mCursor, false) { // from class: androidx.appcompat.app.AlertController.AlertParams.2 | ||||
|                     private final int mIsCheckedIndex; | ||||
|                     private final int mLabelIndex; | ||||
|  | ||||
|                     { | ||||
|                         Cursor cursor = getCursor(); | ||||
|                         this.mLabelIndex = cursor.getColumnIndexOrThrow(AlertParams.this.mLabelColumn); | ||||
|                         this.mIsCheckedIndex = cursor.getColumnIndexOrThrow(AlertParams.this.mIsCheckedColumn); | ||||
|                     } | ||||
|  | ||||
|                     @Override // android.widget.CursorAdapter | ||||
|                     public void bindView(View view, Context context, Cursor cursor) { | ||||
|                         ((CheckedTextView) view.findViewById(android.R.id.text1)).setText(cursor.getString(this.mLabelIndex)); | ||||
|                         recycleListView.setItemChecked(cursor.getPosition(), cursor.getInt(this.mIsCheckedIndex) == 1); | ||||
|                     } | ||||
|  | ||||
|                     @Override // android.widget.CursorAdapter | ||||
|                     public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { | ||||
|                         return AlertParams.this.mInflater.inflate(alertController.mMultiChoiceItemLayout, viewGroup, false); | ||||
|                     } | ||||
|                 }; | ||||
|             } | ||||
|             OnPrepareListViewListener onPrepareListViewListener = this.mOnPrepareListViewListener; | ||||
|             if (onPrepareListViewListener != null) { | ||||
|                 onPrepareListViewListener.onPrepareListView(recycleListView); | ||||
|             } | ||||
|             alertController.mAdapter = listAdapter; | ||||
|             alertController.mCheckedItem = this.mCheckedItem; | ||||
|             if (this.mOnClickListener != null) { | ||||
|                 recycleListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // from class: androidx.appcompat.app.AlertController.AlertParams.3 | ||||
|                     @Override // android.widget.AdapterView.OnItemClickListener | ||||
|                     public void onItemClick(AdapterView<?> adapterView, View view, int i3, long j) { | ||||
|                         AlertParams.this.mOnClickListener.onClick(alertController.mDialog, i3); | ||||
|                         if (AlertParams.this.mIsSingleChoice) { | ||||
|                             return; | ||||
|                         } | ||||
|                         alertController.mDialog.dismiss(); | ||||
|                     } | ||||
|                 }); | ||||
|             } else if (this.mOnCheckboxClickListener != null) { | ||||
|                 recycleListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // from class: androidx.appcompat.app.AlertController.AlertParams.4 | ||||
|                     @Override // android.widget.AdapterView.OnItemClickListener | ||||
|                     public void onItemClick(AdapterView<?> adapterView, View view, int i3, long j) { | ||||
|                         if (AlertParams.this.mCheckedItems != null) { | ||||
|                             AlertParams.this.mCheckedItems[i3] = recycleListView.isItemChecked(i3); | ||||
|                         } | ||||
|                         AlertParams.this.mOnCheckboxClickListener.onClick(alertController.mDialog, i3, recycleListView.isItemChecked(i3)); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|             AdapterView.OnItemSelectedListener onItemSelectedListener = this.mOnItemSelectedListener; | ||||
|             if (onItemSelectedListener != null) { | ||||
|                 recycleListView.setOnItemSelectedListener(onItemSelectedListener); | ||||
|             } | ||||
|             if (this.mIsSingleChoice) { | ||||
|                 recycleListView.setChoiceMode(1); | ||||
|             } else if (this.mIsMultiChoice) { | ||||
|                 recycleListView.setChoiceMode(2); | ||||
|             } | ||||
|             alertController.mListView = recycleListView; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class CheckedItemAdapter extends ArrayAdapter<CharSequence> { | ||||
|         @Override // android.widget.ArrayAdapter, android.widget.Adapter | ||||
|         public long getItemId(int i) { | ||||
|             return i; | ||||
|         } | ||||
|  | ||||
|         @Override // android.widget.BaseAdapter, android.widget.Adapter | ||||
|         public boolean hasStableIds() { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         public CheckedItemAdapter(Context context, int i, int i2, CharSequence[] charSequenceArr) { | ||||
|             super(context, i, i2, charSequenceArr); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user