201 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.view.menu;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.graphics.Point;
 | |
| import android.graphics.Rect;
 | |
| import android.view.Display;
 | |
| import android.view.View;
 | |
| import android.view.WindowManager;
 | |
| import android.widget.ListView;
 | |
| import android.widget.PopupWindow;
 | |
| import androidx.appcompat.R;
 | |
| import androidx.appcompat.view.menu.MenuPresenter;
 | |
| import androidx.core.view.GravityCompat;
 | |
| import androidx.core.view.ViewCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MenuPopupHelper implements MenuHelper {
 | |
|     private static final int TOUCH_EPICENTER_SIZE_DP = 48;
 | |
|     private View mAnchorView;
 | |
|     private final Context mContext;
 | |
|     private int mDropDownGravity;
 | |
|     private boolean mForceShowIcon;
 | |
|     private final PopupWindow.OnDismissListener mInternalOnDismissListener;
 | |
|     private final MenuBuilder mMenu;
 | |
|     private PopupWindow.OnDismissListener mOnDismissListener;
 | |
|     private final boolean mOverflowOnly;
 | |
|     private MenuPopup mPopup;
 | |
|     private final int mPopupStyleAttr;
 | |
|     private final int mPopupStyleRes;
 | |
|     private MenuPresenter.Callback mPresenterCallback;
 | |
| 
 | |
|     public int getGravity() {
 | |
|         return this.mDropDownGravity;
 | |
|     }
 | |
| 
 | |
|     public void setAnchorView(View view) {
 | |
|         this.mAnchorView = view;
 | |
|     }
 | |
| 
 | |
|     public void setGravity(int i) {
 | |
|         this.mDropDownGravity = i;
 | |
|     }
 | |
| 
 | |
|     public void setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) {
 | |
|         this.mOnDismissListener = onDismissListener;
 | |
|     }
 | |
| 
 | |
|     public MenuPopupHelper(Context context, MenuBuilder menuBuilder) {
 | |
|         this(context, menuBuilder, null, false, R.attr.popupMenuStyle, 0);
 | |
|     }
 | |
| 
 | |
|     public MenuPopupHelper(Context context, MenuBuilder menuBuilder, View view) {
 | |
|         this(context, menuBuilder, view, false, R.attr.popupMenuStyle, 0);
 | |
|     }
 | |
| 
 | |
|     public MenuPopupHelper(Context context, MenuBuilder menuBuilder, View view, boolean z, int i) {
 | |
|         this(context, menuBuilder, view, z, i, 0);
 | |
|     }
 | |
| 
 | |
|     public MenuPopupHelper(Context context, MenuBuilder menuBuilder, View view, boolean z, int i, int i2) {
 | |
|         this.mDropDownGravity = GravityCompat.START;
 | |
|         this.mInternalOnDismissListener = new PopupWindow.OnDismissListener() { // from class: androidx.appcompat.view.menu.MenuPopupHelper.1
 | |
|             @Override // android.widget.PopupWindow.OnDismissListener
 | |
|             public void onDismiss() {
 | |
|                 MenuPopupHelper.this.onDismiss();
 | |
|             }
 | |
|         };
 | |
|         this.mContext = context;
 | |
|         this.mMenu = menuBuilder;
 | |
|         this.mAnchorView = view;
 | |
|         this.mOverflowOnly = z;
 | |
|         this.mPopupStyleAttr = i;
 | |
|         this.mPopupStyleRes = i2;
 | |
|     }
 | |
| 
 | |
|     public void setForceShowIcon(boolean z) {
 | |
|         this.mForceShowIcon = z;
 | |
|         MenuPopup menuPopup = this.mPopup;
 | |
|         if (menuPopup != null) {
 | |
|             menuPopup.setForceShowIcon(z);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void show() {
 | |
|         if (!tryShow()) {
 | |
|             throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void show(int i, int i2) {
 | |
|         if (!tryShow(i, i2)) {
 | |
|             throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public MenuPopup getPopup() {
 | |
|         if (this.mPopup == null) {
 | |
|             this.mPopup = createPopup();
 | |
|         }
 | |
|         return this.mPopup;
 | |
|     }
 | |
| 
 | |
|     public boolean tryShow() {
 | |
|         if (isShowing()) {
 | |
|             return true;
 | |
|         }
 | |
|         if (this.mAnchorView == null) {
 | |
|             return false;
 | |
|         }
 | |
|         showPopup(0, 0, false, false);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public boolean tryShow(int i, int i2) {
 | |
|         if (isShowing()) {
 | |
|             return true;
 | |
|         }
 | |
|         if (this.mAnchorView == null) {
 | |
|             return false;
 | |
|         }
 | |
|         showPopup(i, i2, true, true);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     private MenuPopup createPopup() {
 | |
|         MenuPopup standardMenuPopup;
 | |
|         Display defaultDisplay = ((WindowManager) this.mContext.getSystemService("window")).getDefaultDisplay();
 | |
|         Point point = new Point();
 | |
|         Api17Impl.getRealSize(defaultDisplay, point);
 | |
|         if (Math.min(point.x, point.y) >= this.mContext.getResources().getDimensionPixelSize(R.dimen.abc_cascading_menus_min_smallest_width)) {
 | |
|             standardMenuPopup = new CascadingMenuPopup(this.mContext, this.mAnchorView, this.mPopupStyleAttr, this.mPopupStyleRes, this.mOverflowOnly);
 | |
|         } else {
 | |
|             standardMenuPopup = new StandardMenuPopup(this.mContext, this.mMenu, this.mAnchorView, this.mPopupStyleAttr, this.mPopupStyleRes, this.mOverflowOnly);
 | |
|         }
 | |
|         standardMenuPopup.addMenu(this.mMenu);
 | |
|         standardMenuPopup.setOnDismissListener(this.mInternalOnDismissListener);
 | |
|         standardMenuPopup.setAnchorView(this.mAnchorView);
 | |
|         standardMenuPopup.setCallback(this.mPresenterCallback);
 | |
|         standardMenuPopup.setForceShowIcon(this.mForceShowIcon);
 | |
|         standardMenuPopup.setGravity(this.mDropDownGravity);
 | |
|         return standardMenuPopup;
 | |
|     }
 | |
| 
 | |
|     private void showPopup(int i, int i2, boolean z, boolean z2) {
 | |
|         MenuPopup popup = getPopup();
 | |
|         popup.setShowTitle(z2);
 | |
|         if (z) {
 | |
|             if ((GravityCompat.getAbsoluteGravity(this.mDropDownGravity, ViewCompat.getLayoutDirection(this.mAnchorView)) & 7) == 5) {
 | |
|                 i -= this.mAnchorView.getWidth();
 | |
|             }
 | |
|             popup.setHorizontalOffset(i);
 | |
|             popup.setVerticalOffset(i2);
 | |
|             int i3 = (int) ((this.mContext.getResources().getDisplayMetrics().density * 48.0f) / 2.0f);
 | |
|             popup.setEpicenterBounds(new Rect(i - i3, i2 - i3, i + i3, i2 + i3));
 | |
|         }
 | |
|         popup.show();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.view.menu.MenuHelper
 | |
|     public void dismiss() {
 | |
|         if (isShowing()) {
 | |
|             this.mPopup.dismiss();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     protected void onDismiss() {
 | |
|         this.mPopup = null;
 | |
|         PopupWindow.OnDismissListener onDismissListener = this.mOnDismissListener;
 | |
|         if (onDismissListener != null) {
 | |
|             onDismissListener.onDismiss();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public boolean isShowing() {
 | |
|         MenuPopup menuPopup = this.mPopup;
 | |
|         return menuPopup != null && menuPopup.isShowing();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.view.menu.MenuHelper
 | |
|     public void setPresenterCallback(MenuPresenter.Callback callback) {
 | |
|         this.mPresenterCallback = callback;
 | |
|         MenuPopup menuPopup = this.mPopup;
 | |
|         if (menuPopup != null) {
 | |
|             menuPopup.setCallback(callback);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public ListView getListView() {
 | |
|         return getPopup().getListView();
 | |
|     }
 | |
| 
 | |
|     static class Api17Impl {
 | |
|         private Api17Impl() {
 | |
|         }
 | |
| 
 | |
|         static void getRealSize(Display display, Point point) {
 | |
|             display.getRealSize(point);
 | |
|         }
 | |
|     }
 | |
| }
 |