package androidx.appcompat.view.menu; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Parcelable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import androidx.annotation.RestrictTo; import androidx.appcompat.R; import androidx.appcompat.view.menu.MenuBuilder; import androidx.appcompat.view.menu.MenuView; import androidx.appcompat.widget.ActionMenuView; import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.ForwardingListener; import androidx.appcompat.widget.TooltipCompat; import androidx.constraintlayout.solver.widgets.analyzer.BasicMeasure; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public class ActionMenuItemView extends AppCompatTextView implements MenuView.ItemView, View.OnClickListener, ActionMenuView.ActionMenuChildView { private static final int MAX_ICON_SIZE = 32; private static final String TAG = "ActionMenuItemView"; private boolean mAllowTextWithIcon; private boolean mExpandedFormat; private ForwardingListener mForwardingListener; private Drawable mIcon; public MenuItemImpl mItemData; public MenuBuilder.ItemInvoker mItemInvoker; private int mMaxIconSize; private int mMinWidth; public PopupCallback mPopupCallback; private int mSavedPaddingLeft; private CharSequence mTitle; public class ActionMenuItemForwardingListener extends ForwardingListener { public ActionMenuItemForwardingListener() { super(ActionMenuItemView.this); } @Override // androidx.appcompat.widget.ForwardingListener public ShowableListMenu getPopup() { PopupCallback popupCallback = ActionMenuItemView.this.mPopupCallback; if (popupCallback != null) { return popupCallback.getPopup(); } return null; } @Override // androidx.appcompat.widget.ForwardingListener public boolean onForwardingStarted() { ShowableListMenu popup; ActionMenuItemView actionMenuItemView = ActionMenuItemView.this; MenuBuilder.ItemInvoker itemInvoker = actionMenuItemView.mItemInvoker; return itemInvoker != null && itemInvoker.invokeItem(actionMenuItemView.mItemData) && (popup = getPopup()) != null && popup.isShowing(); } } public static abstract class PopupCallback { public abstract ShowableListMenu getPopup(); } public ActionMenuItemView(Context context) { this(context, null); } public ActionMenuItemView(Context context, AttributeSet attributeSet) { this(context, attributeSet, 0); } public ActionMenuItemView(Context context, AttributeSet attributeSet, int i) { super(context, attributeSet, i); Resources resources = context.getResources(); this.mAllowTextWithIcon = shouldAllowTextWithIcon(); TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ActionMenuItemView, i, 0); this.mMinWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.ActionMenuItemView_android_minWidth, 0); obtainStyledAttributes.recycle(); this.mMaxIconSize = (int) ((resources.getDisplayMetrics().density * 32.0f) + 0.5f); setOnClickListener(this); this.mSavedPaddingLeft = -1; setSaveEnabled(false); } private boolean shouldAllowTextWithIcon() { Configuration configuration = getContext().getResources().getConfiguration(); int i = configuration.screenWidthDp; return i >= 480 || (i >= 640 && configuration.screenHeightDp >= 480) || configuration.orientation == 2; } private void updateTextButtonVisibility() { boolean z2 = true; boolean z3 = !TextUtils.isEmpty(this.mTitle); if (this.mIcon != null && (!this.mItemData.showsTextAsAction() || (!this.mAllowTextWithIcon && !this.mExpandedFormat))) { z2 = false; } boolean z4 = z3 & z2; CharSequence charSequence = null; setText(z4 ? this.mTitle : null); CharSequence contentDescription = this.mItemData.getContentDescription(); if (TextUtils.isEmpty(contentDescription)) { setContentDescription(z4 ? null : this.mItemData.getTitle()); } else { setContentDescription(contentDescription); } CharSequence tooltipText = this.mItemData.getTooltipText(); if (TextUtils.isEmpty(tooltipText)) { if (!z4) { charSequence = this.mItemData.getTitle(); } TooltipCompat.setTooltipText(this, charSequence); return; } TooltipCompat.setTooltipText(this, tooltipText); } @Override // androidx.appcompat.view.menu.MenuView.ItemView public MenuItemImpl getItemData() { return this.mItemData; } public boolean hasText() { return !TextUtils.isEmpty(getText()); } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void initialize(MenuItemImpl menuItemImpl, int i) { this.mItemData = menuItemImpl; setIcon(menuItemImpl.getIcon()); setTitle(menuItemImpl.getTitleForItemView(this)); setId(menuItemImpl.getItemId()); setVisibility(menuItemImpl.isVisible() ? 0 : 8); setEnabled(menuItemImpl.isEnabled()); if (menuItemImpl.hasSubMenu() && this.mForwardingListener == null) { this.mForwardingListener = new ActionMenuItemForwardingListener(); } } @Override // androidx.appcompat.widget.ActionMenuView.ActionMenuChildView public boolean needsDividerAfter() { return hasText(); } @Override // androidx.appcompat.widget.ActionMenuView.ActionMenuChildView public boolean needsDividerBefore() { return hasText() && this.mItemData.getIcon() == null; } @Override // android.view.View.OnClickListener public void onClick(View view) { MenuBuilder.ItemInvoker itemInvoker = this.mItemInvoker; if (itemInvoker != null) { itemInvoker.invokeItem(this.mItemData); } } @Override // android.widget.TextView, android.view.View public void onConfigurationChanged(Configuration configuration) { super.onConfigurationChanged(configuration); this.mAllowTextWithIcon = shouldAllowTextWithIcon(); updateTextButtonVisibility(); } @Override // androidx.appcompat.widget.AppCompatTextView, android.widget.TextView, android.view.View public void onMeasure(int i, int i2) { int i3; boolean hasText = hasText(); if (hasText && (i3 = this.mSavedPaddingLeft) >= 0) { super.setPadding(i3, getPaddingTop(), getPaddingRight(), getPaddingBottom()); } super.onMeasure(i, i2); int mode = View.MeasureSpec.getMode(i); int size = View.MeasureSpec.getSize(i); int measuredWidth = getMeasuredWidth(); int min = mode == Integer.MIN_VALUE ? Math.min(size, this.mMinWidth) : this.mMinWidth; if (mode != 1073741824 && this.mMinWidth > 0 && measuredWidth < min) { super.onMeasure(View.MeasureSpec.makeMeasureSpec(min, BasicMeasure.EXACTLY), i2); } if (!hasText && this.mIcon != null) { super.setPadding((getMeasuredWidth() - this.mIcon.getBounds().width()) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom()); } } @Override // android.widget.TextView, android.view.View public void onRestoreInstanceState(Parcelable parcelable) { super.onRestoreInstanceState(null); } @Override // android.widget.TextView, android.view.View public boolean onTouchEvent(MotionEvent motionEvent) { ForwardingListener forwardingListener; if (!this.mItemData.hasSubMenu() || (forwardingListener = this.mForwardingListener) == null || !forwardingListener.onTouch(this, motionEvent)) { return super.onTouchEvent(motionEvent); } return true; } @Override // androidx.appcompat.view.menu.MenuView.ItemView public boolean prefersCondensedTitle() { return true; } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void setCheckable(boolean z2) { } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void setChecked(boolean z2) { } public void setExpandedFormat(boolean z2) { if (this.mExpandedFormat != z2) { this.mExpandedFormat = z2; MenuItemImpl menuItemImpl = this.mItemData; if (menuItemImpl != null) { menuItemImpl.actionFormatChanged(); } } } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void setIcon(Drawable drawable) { this.mIcon = drawable; if (drawable != null) { int intrinsicWidth = drawable.getIntrinsicWidth(); int intrinsicHeight = drawable.getIntrinsicHeight(); int i = this.mMaxIconSize; if (intrinsicWidth > i) { intrinsicHeight = (int) (((float) intrinsicHeight) * (((float) i) / ((float) intrinsicWidth))); intrinsicWidth = i; } if (intrinsicHeight > i) { intrinsicWidth = (int) (((float) intrinsicWidth) * (((float) i) / ((float) intrinsicHeight))); } else { i = intrinsicHeight; } drawable.setBounds(0, 0, intrinsicWidth, i); } setCompoundDrawables(drawable, null, null, null); updateTextButtonVisibility(); } public void setItemInvoker(MenuBuilder.ItemInvoker itemInvoker) { this.mItemInvoker = itemInvoker; } @Override // android.widget.TextView, android.view.View public void setPadding(int i, int i2, int i3, int i4) { this.mSavedPaddingLeft = i; super.setPadding(i, i2, i3, i4); } public void setPopupCallback(PopupCallback popupCallback) { this.mPopupCallback = popupCallback; } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void setShortcut(boolean z2, char c2) { } @Override // androidx.appcompat.view.menu.MenuView.ItemView public void setTitle(CharSequence charSequence) { this.mTitle = charSequence; updateTextButtonVisibility(); } @Override // androidx.appcompat.view.menu.MenuView.ItemView public boolean showsIcon() { return true; } }