389 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			389 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.text.TextUtils;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.MotionEvent;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.widget.LinearLayout;
 | |
| import android.widget.TextView;
 | |
| import androidx.appcompat.R;
 | |
| import androidx.appcompat.view.ActionMode;
 | |
| import androidx.appcompat.view.menu.MenuBuilder;
 | |
| import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.ViewPropertyAnimatorCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class ActionBarContextView extends AbsActionBarView {
 | |
|     private View mClose;
 | |
|     private View mCloseButton;
 | |
|     private int mCloseItemLayout;
 | |
|     private View mCustomView;
 | |
|     private CharSequence mSubtitle;
 | |
|     private int mSubtitleStyleRes;
 | |
|     private TextView mSubtitleView;
 | |
|     private CharSequence mTitle;
 | |
|     private LinearLayout mTitleLayout;
 | |
|     private boolean mTitleOptional;
 | |
|     private int mTitleStyleRes;
 | |
|     private TextView mTitleView;
 | |
| 
 | |
|     public CharSequence getSubtitle() {
 | |
|         return this.mSubtitle;
 | |
|     }
 | |
| 
 | |
|     public CharSequence getTitle() {
 | |
|         return this.mTitle;
 | |
|     }
 | |
| 
 | |
|     public boolean isTitleOptional() {
 | |
|         return this.mTitleOptional;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public boolean shouldDelayChildPressedState() {
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ void animateToVisibility(int i) {
 | |
|         super.animateToVisibility(i);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ boolean canShowOverflowMenu() {
 | |
|         return super.canShowOverflowMenu();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ void dismissPopupMenus() {
 | |
|         super.dismissPopupMenus();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ int getAnimatedVisibility() {
 | |
|         return super.getAnimatedVisibility();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ int getContentHeight() {
 | |
|         return super.getContentHeight();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ boolean isOverflowMenuShowPending() {
 | |
|         return super.isOverflowMenuShowPending();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ boolean isOverflowReserved() {
 | |
|         return super.isOverflowReserved();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView, android.view.View
 | |
|     public /* bridge */ /* synthetic */ boolean onHoverEvent(MotionEvent motionEvent) {
 | |
|         return super.onHoverEvent(motionEvent);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView, android.view.View
 | |
|     public /* bridge */ /* synthetic */ boolean onTouchEvent(MotionEvent motionEvent) {
 | |
|         return super.onTouchEvent(motionEvent);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ void postShowOverflowMenu() {
 | |
|         super.postShowOverflowMenu();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView, android.view.View
 | |
|     public /* bridge */ /* synthetic */ void setVisibility(int i) {
 | |
|         super.setVisibility(i);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public /* bridge */ /* synthetic */ ViewPropertyAnimatorCompat setupAnimatorToVisibility(int i, long j) {
 | |
|         return super.setupAnimatorToVisibility(i, j);
 | |
|     }
 | |
| 
 | |
|     public ActionBarContextView(Context context) {
 | |
|         this(context, null);
 | |
|     }
 | |
| 
 | |
|     public ActionBarContextView(Context context, AttributeSet attributeSet) {
 | |
|         this(context, attributeSet, R.attr.actionModeStyle);
 | |
|     }
 | |
| 
 | |
|     public ActionBarContextView(Context context, AttributeSet attributeSet, int i) {
 | |
|         super(context, attributeSet, i);
 | |
|         TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, attributeSet, R.styleable.ActionMode, i, 0);
 | |
|         ViewCompat.setBackground(this, obtainStyledAttributes.getDrawable(R.styleable.ActionMode_background));
 | |
|         this.mTitleStyleRes = obtainStyledAttributes.getResourceId(R.styleable.ActionMode_titleTextStyle, 0);
 | |
|         this.mSubtitleStyleRes = obtainStyledAttributes.getResourceId(R.styleable.ActionMode_subtitleTextStyle, 0);
 | |
|         this.mContentHeight = obtainStyledAttributes.getLayoutDimension(R.styleable.ActionMode_height, 0);
 | |
|         this.mCloseItemLayout = obtainStyledAttributes.getResourceId(R.styleable.ActionMode_closeItemLayout, R.layout.abc_action_mode_close_item_material);
 | |
|         obtainStyledAttributes.recycle();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     public void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         if (this.mActionMenuPresenter != null) {
 | |
|             this.mActionMenuPresenter.hideOverflowMenu();
 | |
|             this.mActionMenuPresenter.hideSubMenus();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public void setContentHeight(int i) {
 | |
|         this.mContentHeight = i;
 | |
|     }
 | |
| 
 | |
|     public void setCustomView(View view) {
 | |
|         LinearLayout linearLayout;
 | |
|         View view2 = this.mCustomView;
 | |
|         if (view2 != null) {
 | |
|             removeView(view2);
 | |
|         }
 | |
|         this.mCustomView = view;
 | |
|         if (view != null && (linearLayout = this.mTitleLayout) != null) {
 | |
|             removeView(linearLayout);
 | |
|             this.mTitleLayout = null;
 | |
|         }
 | |
|         if (view != null) {
 | |
|             addView(view);
 | |
|         }
 | |
|         requestLayout();
 | |
|     }
 | |
| 
 | |
|     public void setTitle(CharSequence charSequence) {
 | |
|         this.mTitle = charSequence;
 | |
|         initTitle();
 | |
|         ViewCompat.setAccessibilityPaneTitle(this, charSequence);
 | |
|     }
 | |
| 
 | |
|     public void setSubtitle(CharSequence charSequence) {
 | |
|         this.mSubtitle = charSequence;
 | |
|         initTitle();
 | |
|     }
 | |
| 
 | |
|     private void initTitle() {
 | |
|         if (this.mTitleLayout == null) {
 | |
|             LayoutInflater.from(getContext()).inflate(R.layout.abc_action_bar_title_item, this);
 | |
|             LinearLayout linearLayout = (LinearLayout) getChildAt(getChildCount() - 1);
 | |
|             this.mTitleLayout = linearLayout;
 | |
|             this.mTitleView = (TextView) linearLayout.findViewById(R.id.action_bar_title);
 | |
|             this.mSubtitleView = (TextView) this.mTitleLayout.findViewById(R.id.action_bar_subtitle);
 | |
|             if (this.mTitleStyleRes != 0) {
 | |
|                 this.mTitleView.setTextAppearance(getContext(), this.mTitleStyleRes);
 | |
|             }
 | |
|             if (this.mSubtitleStyleRes != 0) {
 | |
|                 this.mSubtitleView.setTextAppearance(getContext(), this.mSubtitleStyleRes);
 | |
|             }
 | |
|         }
 | |
|         this.mTitleView.setText(this.mTitle);
 | |
|         this.mSubtitleView.setText(this.mSubtitle);
 | |
|         boolean z = !TextUtils.isEmpty(this.mTitle);
 | |
|         boolean z2 = !TextUtils.isEmpty(this.mSubtitle);
 | |
|         int i = 0;
 | |
|         this.mSubtitleView.setVisibility(z2 ? 0 : 8);
 | |
|         LinearLayout linearLayout2 = this.mTitleLayout;
 | |
|         if (!z && !z2) {
 | |
|             i = 8;
 | |
|         }
 | |
|         linearLayout2.setVisibility(i);
 | |
|         if (this.mTitleLayout.getParent() == null) {
 | |
|             addView(this.mTitleLayout);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void initForMode(final ActionMode actionMode) {
 | |
|         View view = this.mClose;
 | |
|         if (view == null) {
 | |
|             View inflate = LayoutInflater.from(getContext()).inflate(this.mCloseItemLayout, (ViewGroup) this, false);
 | |
|             this.mClose = inflate;
 | |
|             addView(inflate);
 | |
|         } else if (view.getParent() == null) {
 | |
|             addView(this.mClose);
 | |
|         }
 | |
|         View findViewById = this.mClose.findViewById(R.id.action_mode_close_button);
 | |
|         this.mCloseButton = findViewById;
 | |
|         findViewById.setOnClickListener(new View.OnClickListener() { // from class: androidx.appcompat.widget.ActionBarContextView.1
 | |
|             @Override // android.view.View.OnClickListener
 | |
|             public void onClick(View view2) {
 | |
|                 actionMode.finish();
 | |
|             }
 | |
|         });
 | |
|         MenuBuilder menuBuilder = (MenuBuilder) actionMode.getMenu();
 | |
|         if (this.mActionMenuPresenter != null) {
 | |
|             this.mActionMenuPresenter.dismissPopupMenus();
 | |
|         }
 | |
|         this.mActionMenuPresenter = new ActionMenuPresenter(getContext());
 | |
|         this.mActionMenuPresenter.setReserveOverflow(true);
 | |
|         ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(-2, -1);
 | |
|         menuBuilder.addMenuPresenter(this.mActionMenuPresenter, this.mPopupContext);
 | |
|         this.mMenuView = (ActionMenuView) this.mActionMenuPresenter.getMenuView(this);
 | |
|         ViewCompat.setBackground(this.mMenuView, null);
 | |
|         addView(this.mMenuView, layoutParams);
 | |
|     }
 | |
| 
 | |
|     public void closeMode() {
 | |
|         if (this.mClose == null) {
 | |
|             killMode();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void killMode() {
 | |
|         removeAllViews();
 | |
|         this.mCustomView = null;
 | |
|         this.mMenuView = null;
 | |
|         this.mActionMenuPresenter = null;
 | |
|         View view = this.mCloseButton;
 | |
|         if (view != null) {
 | |
|             view.setOnClickListener(null);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public boolean showOverflowMenu() {
 | |
|         if (this.mActionMenuPresenter != null) {
 | |
|             return this.mActionMenuPresenter.showOverflowMenu();
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public boolean hideOverflowMenu() {
 | |
|         if (this.mActionMenuPresenter != null) {
 | |
|             return this.mActionMenuPresenter.hideOverflowMenu();
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AbsActionBarView
 | |
|     public boolean isOverflowMenuShowing() {
 | |
|         if (this.mActionMenuPresenter != null) {
 | |
|             return this.mActionMenuPresenter.isOverflowMenuShowing();
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
 | |
|         return new ViewGroup.MarginLayoutParams(-1, -2);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attributeSet) {
 | |
|         return new ViewGroup.MarginLayoutParams(getContext(), attributeSet);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onMeasure(int i, int i2) {
 | |
|         int mode = View.MeasureSpec.getMode(i);
 | |
|         int i3 = BasicMeasure.EXACTLY;
 | |
|         if (mode != 1073741824) {
 | |
|             throw new IllegalStateException(getClass().getSimpleName() + " can only be used with android:layout_width=\"match_parent\" (or fill_parent)");
 | |
|         }
 | |
|         if (View.MeasureSpec.getMode(i2) == 0) {
 | |
|             throw new IllegalStateException(getClass().getSimpleName() + " can only be used with android:layout_height=\"wrap_content\"");
 | |
|         }
 | |
|         int size = View.MeasureSpec.getSize(i);
 | |
|         int size2 = this.mContentHeight > 0 ? this.mContentHeight : View.MeasureSpec.getSize(i2);
 | |
|         int paddingTop = getPaddingTop() + getPaddingBottom();
 | |
|         int paddingLeft = (size - getPaddingLeft()) - getPaddingRight();
 | |
|         int i4 = size2 - paddingTop;
 | |
|         int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(i4, Integer.MIN_VALUE);
 | |
|         View view = this.mClose;
 | |
|         if (view != null) {
 | |
|             int measureChildView = measureChildView(view, paddingLeft, makeMeasureSpec, 0);
 | |
|             ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) this.mClose.getLayoutParams();
 | |
|             paddingLeft = measureChildView - (marginLayoutParams.leftMargin + marginLayoutParams.rightMargin);
 | |
|         }
 | |
|         if (this.mMenuView != null && this.mMenuView.getParent() == this) {
 | |
|             paddingLeft = measureChildView(this.mMenuView, paddingLeft, makeMeasureSpec, 0);
 | |
|         }
 | |
|         LinearLayout linearLayout = this.mTitleLayout;
 | |
|         if (linearLayout != null && this.mCustomView == null) {
 | |
|             if (this.mTitleOptional) {
 | |
|                 this.mTitleLayout.measure(View.MeasureSpec.makeMeasureSpec(0, 0), makeMeasureSpec);
 | |
|                 int measuredWidth = this.mTitleLayout.getMeasuredWidth();
 | |
|                 boolean z = measuredWidth <= paddingLeft;
 | |
|                 if (z) {
 | |
|                     paddingLeft -= measuredWidth;
 | |
|                 }
 | |
|                 this.mTitleLayout.setVisibility(z ? 0 : 8);
 | |
|             } else {
 | |
|                 paddingLeft = measureChildView(linearLayout, paddingLeft, makeMeasureSpec, 0);
 | |
|             }
 | |
|         }
 | |
|         View view2 = this.mCustomView;
 | |
|         if (view2 != null) {
 | |
|             ViewGroup.LayoutParams layoutParams = view2.getLayoutParams();
 | |
|             int i5 = layoutParams.width != -2 ? BasicMeasure.EXACTLY : Integer.MIN_VALUE;
 | |
|             if (layoutParams.width >= 0) {
 | |
|                 paddingLeft = Math.min(layoutParams.width, paddingLeft);
 | |
|             }
 | |
|             if (layoutParams.height == -2) {
 | |
|                 i3 = Integer.MIN_VALUE;
 | |
|             }
 | |
|             if (layoutParams.height >= 0) {
 | |
|                 i4 = Math.min(layoutParams.height, i4);
 | |
|             }
 | |
|             this.mCustomView.measure(View.MeasureSpec.makeMeasureSpec(paddingLeft, i5), View.MeasureSpec.makeMeasureSpec(i4, i3));
 | |
|         }
 | |
|         if (this.mContentHeight <= 0) {
 | |
|             int childCount = getChildCount();
 | |
|             int i6 = 0;
 | |
|             for (int i7 = 0; i7 < childCount; i7++) {
 | |
|                 int measuredHeight = getChildAt(i7).getMeasuredHeight() + paddingTop;
 | |
|                 if (measuredHeight > i6) {
 | |
|                     i6 = measuredHeight;
 | |
|                 }
 | |
|             }
 | |
|             setMeasuredDimension(size, i6);
 | |
|             return;
 | |
|         }
 | |
|         setMeasuredDimension(size, size2);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
 | |
|         boolean isLayoutRtl = ViewUtils.isLayoutRtl(this);
 | |
|         int paddingRight = isLayoutRtl ? (i3 - i) - getPaddingRight() : getPaddingLeft();
 | |
|         int paddingTop = getPaddingTop();
 | |
|         int paddingTop2 = ((i4 - i2) - getPaddingTop()) - getPaddingBottom();
 | |
|         View view = this.mClose;
 | |
|         if (view != null && view.getVisibility() != 8) {
 | |
|             ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) this.mClose.getLayoutParams();
 | |
|             int i5 = isLayoutRtl ? marginLayoutParams.rightMargin : marginLayoutParams.leftMargin;
 | |
|             int i6 = isLayoutRtl ? marginLayoutParams.leftMargin : marginLayoutParams.rightMargin;
 | |
|             int next = next(paddingRight, i5, isLayoutRtl);
 | |
|             paddingRight = next(next + positionChild(this.mClose, next, paddingTop, paddingTop2, isLayoutRtl), i6, isLayoutRtl);
 | |
|         }
 | |
|         int i7 = paddingRight;
 | |
|         LinearLayout linearLayout = this.mTitleLayout;
 | |
|         if (linearLayout != null && this.mCustomView == null && linearLayout.getVisibility() != 8) {
 | |
|             i7 += positionChild(this.mTitleLayout, i7, paddingTop, paddingTop2, isLayoutRtl);
 | |
|         }
 | |
|         int i8 = i7;
 | |
|         View view2 = this.mCustomView;
 | |
|         if (view2 != null) {
 | |
|             positionChild(view2, i8, paddingTop, paddingTop2, isLayoutRtl);
 | |
|         }
 | |
|         int paddingLeft = isLayoutRtl ? getPaddingLeft() : (i3 - i) - getPaddingRight();
 | |
|         if (this.mMenuView != null) {
 | |
|             positionChild(this.mMenuView, paddingLeft, paddingTop, paddingTop2, !isLayoutRtl);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setTitleOptional(boolean z) {
 | |
|         if (z != this.mTitleOptional) {
 | |
|             requestLayout();
 | |
|         }
 | |
|         this.mTitleOptional = z;
 | |
|     }
 | |
| }
 |