865 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			865 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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);
 | |
|         }
 | |
|     }
 | |
| }
 |