254 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.Configuration;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.os.Build;
 | |
| import android.transition.Transition;
 | |
| import android.util.AttributeSet;
 | |
| import android.util.Log;
 | |
| import android.view.KeyEvent;
 | |
| import android.view.MenuItem;
 | |
| import android.view.MotionEvent;
 | |
| import android.widget.HeaderViewListAdapter;
 | |
| import android.widget.ListAdapter;
 | |
| import android.widget.PopupWindow;
 | |
| import androidx.appcompat.view.menu.ListMenuItemView;
 | |
| import androidx.appcompat.view.menu.MenuAdapter;
 | |
| import androidx.appcompat.view.menu.MenuBuilder;
 | |
| import androidx.appcompat.view.menu.MenuItemImpl;
 | |
| import java.lang.reflect.Method;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MenuPopupWindow extends ListPopupWindow implements MenuItemHoverListener {
 | |
|     private static final String TAG = "MenuPopupWindow";
 | |
|     private static Method sSetTouchModalMethod;
 | |
|     private MenuItemHoverListener mHoverListener;
 | |
| 
 | |
|     public void setHoverListener(MenuItemHoverListener menuItemHoverListener) {
 | |
|         this.mHoverListener = menuItemHoverListener;
 | |
|     }
 | |
| 
 | |
|     static {
 | |
|         try {
 | |
|             if (Build.VERSION.SDK_INT <= 28) {
 | |
|                 sSetTouchModalMethod = PopupWindow.class.getDeclaredMethod("setTouchModal", Boolean.TYPE);
 | |
|             }
 | |
|         } catch (NoSuchMethodException unused) {
 | |
|             Log.i(TAG, "Could not find method setTouchModal() on PopupWindow. Oh well.");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public MenuPopupWindow(Context context, AttributeSet attributeSet, int i, int i2) {
 | |
|         super(context, attributeSet, i, i2);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.ListPopupWindow
 | |
|     DropDownListView createDropDownListView(Context context, boolean z) {
 | |
|         MenuDropDownListView menuDropDownListView = new MenuDropDownListView(context, z);
 | |
|         menuDropDownListView.setHoverListener(this);
 | |
|         return menuDropDownListView;
 | |
|     }
 | |
| 
 | |
|     public void setEnterTransition(Object obj) {
 | |
|         if (Build.VERSION.SDK_INT >= 23) {
 | |
|             Api23Impl.setEnterTransition(this.mPopup, (Transition) obj);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setExitTransition(Object obj) {
 | |
|         if (Build.VERSION.SDK_INT >= 23) {
 | |
|             Api23Impl.setExitTransition(this.mPopup, (Transition) obj);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setTouchModal(boolean z) {
 | |
|         if (Build.VERSION.SDK_INT > 28) {
 | |
|             Api29Impl.setTouchModal(this.mPopup, z);
 | |
|             return;
 | |
|         }
 | |
|         Method method = sSetTouchModalMethod;
 | |
|         if (method != null) {
 | |
|             try {
 | |
|                 method.invoke(this.mPopup, Boolean.valueOf(z));
 | |
|             } catch (Exception unused) {
 | |
|                 Log.i(TAG, "Could not invoke setTouchModal() on PopupWindow. Oh well.");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.MenuItemHoverListener
 | |
|     public void onItemHoverEnter(MenuBuilder menuBuilder, MenuItem menuItem) {
 | |
|         MenuItemHoverListener menuItemHoverListener = this.mHoverListener;
 | |
|         if (menuItemHoverListener != null) {
 | |
|             menuItemHoverListener.onItemHoverEnter(menuBuilder, menuItem);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.MenuItemHoverListener
 | |
|     public void onItemHoverExit(MenuBuilder menuBuilder, MenuItem menuItem) {
 | |
|         MenuItemHoverListener menuItemHoverListener = this.mHoverListener;
 | |
|         if (menuItemHoverListener != null) {
 | |
|             menuItemHoverListener.onItemHoverExit(menuBuilder, menuItem);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class MenuDropDownListView extends DropDownListView {
 | |
|         final int mAdvanceKey;
 | |
|         private MenuItemHoverListener mHoverListener;
 | |
|         private MenuItem mHoveredMenuItem;
 | |
|         final int mRetreatKey;
 | |
| 
 | |
|         public void setHoverListener(MenuItemHoverListener menuItemHoverListener) {
 | |
|             this.mHoverListener = menuItemHoverListener;
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.view.ViewGroup, android.view.View
 | |
|         public /* bridge */ /* synthetic */ boolean hasFocus() {
 | |
|             return super.hasFocus();
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.view.View
 | |
|         public /* bridge */ /* synthetic */ boolean hasWindowFocus() {
 | |
|             return super.hasWindowFocus();
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.view.View
 | |
|         public /* bridge */ /* synthetic */ boolean isFocused() {
 | |
|             return super.isFocused();
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.view.View
 | |
|         public /* bridge */ /* synthetic */ boolean isInTouchMode() {
 | |
|             return super.isInTouchMode();
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView
 | |
|         public /* bridge */ /* synthetic */ int lookForSelectablePosition(int i, boolean z) {
 | |
|             return super.lookForSelectablePosition(i, z);
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView
 | |
|         public /* bridge */ /* synthetic */ int measureHeightOfChildrenCompat(int i, int i2, int i3, int i4, int i5) {
 | |
|             return super.measureHeightOfChildrenCompat(i, i2, i3, i4, i5);
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView
 | |
|         public /* bridge */ /* synthetic */ boolean onForwardedEvent(MotionEvent motionEvent, int i) {
 | |
|             return super.onForwardedEvent(motionEvent, i);
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.widget.AbsListView, android.view.View
 | |
|         public /* bridge */ /* synthetic */ boolean onTouchEvent(MotionEvent motionEvent) {
 | |
|             return super.onTouchEvent(motionEvent);
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.widget.AbsListView
 | |
|         public /* bridge */ /* synthetic */ void setSelector(Drawable drawable) {
 | |
|             super.setSelector(drawable);
 | |
|         }
 | |
| 
 | |
|         public MenuDropDownListView(Context context, boolean z) {
 | |
|             super(context, z);
 | |
|             if (1 == Api17Impl.getLayoutDirection(context.getResources().getConfiguration())) {
 | |
|                 this.mAdvanceKey = 21;
 | |
|                 this.mRetreatKey = 22;
 | |
|             } else {
 | |
|                 this.mAdvanceKey = 22;
 | |
|                 this.mRetreatKey = 21;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void clearSelection() {
 | |
|             setSelection(-1);
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.ListView, android.widget.AbsListView, android.view.View, android.view.KeyEvent.Callback
 | |
|         public boolean onKeyDown(int i, KeyEvent keyEvent) {
 | |
|             MenuAdapter menuAdapter;
 | |
|             ListMenuItemView listMenuItemView = (ListMenuItemView) getSelectedView();
 | |
|             if (listMenuItemView != null && i == this.mAdvanceKey) {
 | |
|                 if (listMenuItemView.isEnabled() && listMenuItemView.getItemData().hasSubMenu()) {
 | |
|                     performItemClick(listMenuItemView, getSelectedItemPosition(), getSelectedItemId());
 | |
|                 }
 | |
|                 return true;
 | |
|             }
 | |
|             if (listMenuItemView != null && i == this.mRetreatKey) {
 | |
|                 setSelection(-1);
 | |
|                 ListAdapter adapter = getAdapter();
 | |
|                 if (adapter instanceof HeaderViewListAdapter) {
 | |
|                     menuAdapter = (MenuAdapter) ((HeaderViewListAdapter) adapter).getWrappedAdapter();
 | |
|                 } else {
 | |
|                     menuAdapter = (MenuAdapter) adapter;
 | |
|                 }
 | |
|                 menuAdapter.getAdapterMenu().close(false);
 | |
|                 return true;
 | |
|             }
 | |
|             return super.onKeyDown(i, keyEvent);
 | |
|         }
 | |
| 
 | |
|         @Override // androidx.appcompat.widget.DropDownListView, android.view.View
 | |
|         public boolean onHoverEvent(MotionEvent motionEvent) {
 | |
|             MenuAdapter menuAdapter;
 | |
|             int i;
 | |
|             int pointToPosition;
 | |
|             int i2;
 | |
|             if (this.mHoverListener != null) {
 | |
|                 ListAdapter adapter = getAdapter();
 | |
|                 if (adapter instanceof HeaderViewListAdapter) {
 | |
|                     HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter) adapter;
 | |
|                     i = headerViewListAdapter.getHeadersCount();
 | |
|                     menuAdapter = (MenuAdapter) headerViewListAdapter.getWrappedAdapter();
 | |
|                 } else {
 | |
|                     menuAdapter = (MenuAdapter) adapter;
 | |
|                     i = 0;
 | |
|                 }
 | |
|                 MenuItemImpl item = (motionEvent.getAction() == 10 || (pointToPosition = pointToPosition((int) motionEvent.getX(), (int) motionEvent.getY())) == -1 || (i2 = pointToPosition - i) < 0 || i2 >= menuAdapter.getCount()) ? null : menuAdapter.getItem(i2);
 | |
|                 MenuItem menuItem = this.mHoveredMenuItem;
 | |
|                 if (menuItem != item) {
 | |
|                     MenuBuilder adapterMenu = menuAdapter.getAdapterMenu();
 | |
|                     if (menuItem != null) {
 | |
|                         this.mHoverListener.onItemHoverExit(adapterMenu, menuItem);
 | |
|                     }
 | |
|                     this.mHoveredMenuItem = item;
 | |
|                     if (item != null) {
 | |
|                         this.mHoverListener.onItemHoverEnter(adapterMenu, item);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             return super.onHoverEvent(motionEvent);
 | |
|         }
 | |
| 
 | |
|         static class Api17Impl {
 | |
|             private Api17Impl() {
 | |
|             }
 | |
| 
 | |
|             static int getLayoutDirection(Configuration configuration) {
 | |
|                 return configuration.getLayoutDirection();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class Api23Impl {
 | |
|         private Api23Impl() {
 | |
|         }
 | |
| 
 | |
|         static void setEnterTransition(PopupWindow popupWindow, Transition transition) {
 | |
|             popupWindow.setEnterTransition(transition);
 | |
|         }
 | |
| 
 | |
|         static void setExitTransition(PopupWindow popupWindow, Transition transition) {
 | |
|             popupWindow.setExitTransition(transition);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class Api29Impl {
 | |
|         private Api29Impl() {
 | |
|         }
 | |
| 
 | |
|         static void setTouchModal(PopupWindow popupWindow, boolean z) {
 | |
|             popupWindow.setTouchModal(z);
 | |
|         }
 | |
|     }
 | |
| }
 |