ADD week 5
This commit is contained in:
		| @@ -0,0 +1,253 @@ | ||||
| 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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user