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