discord-jadx/app/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java

607 lines
24 KiB
Java

package androidx.appcompat.view.menu;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.os.Parcelable;
import android.os.SystemClock;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.HeaderViewListAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
import androidx.appcompat.view.menu.MenuPresenter;
import androidx.appcompat.widget.MenuItemHoverListener;
import androidx.appcompat.widget.MenuPopupWindow;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
public final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, View.OnKeyListener, PopupWindow.OnDismissListener {
public static final int HORIZ_POSITION_LEFT = 0;
public static final int HORIZ_POSITION_RIGHT = 1;
private static final int ITEM_LAYOUT = R.layout.abc_cascading_menu_item_layout;
public static final int SUBMENU_TIMEOUT_MS = 200;
private View mAnchorView;
private final View.OnAttachStateChangeListener mAttachStateChangeListener = new AnonymousClass2();
private final Context mContext;
private int mDropDownGravity = 0;
private boolean mForceShowIcon;
public final ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new AnonymousClass1();
private boolean mHasXOffset;
private boolean mHasYOffset;
private int mLastPosition;
private final MenuItemHoverListener mMenuItemHoverListener = new AnonymousClass3();
private final int mMenuMaxWidth;
private PopupWindow.OnDismissListener mOnDismissListener;
private final boolean mOverflowOnly;
private final List<MenuBuilder> mPendingMenus = new ArrayList();
private final int mPopupStyleAttr;
private final int mPopupStyleRes;
private MenuPresenter.Callback mPresenterCallback;
private int mRawDropDownGravity = 0;
public boolean mShouldCloseImmediately;
private boolean mShowTitle;
public final List<CascadingMenuInfo> mShowingMenus = new ArrayList();
public View mShownAnchorView;
public final Handler mSubMenuHoverHandler;
public ViewTreeObserver mTreeObserver;
private int mXOffset;
private int mYOffset;
/* renamed from: androidx.appcompat.view.menu.CascadingMenuPopup$1 reason: invalid class name */
public class AnonymousClass1 implements ViewTreeObserver.OnGlobalLayoutListener {
public AnonymousClass1() {
}
@Override // android.view.ViewTreeObserver.OnGlobalLayoutListener
public void onGlobalLayout() {
if (CascadingMenuPopup.this.isShowing() && CascadingMenuPopup.this.mShowingMenus.size() > 0 && !CascadingMenuPopup.this.mShowingMenus.get(0).window.isModal()) {
View view = CascadingMenuPopup.this.mShownAnchorView;
if (view == null || !view.isShown()) {
CascadingMenuPopup.this.dismiss();
return;
}
for (CascadingMenuInfo cascadingMenuInfo : CascadingMenuPopup.this.mShowingMenus) {
cascadingMenuInfo.window.show();
}
}
}
}
/* renamed from: androidx.appcompat.view.menu.CascadingMenuPopup$2 reason: invalid class name */
public class AnonymousClass2 implements View.OnAttachStateChangeListener {
public AnonymousClass2() {
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewAttachedToWindow(View view) {
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewDetachedFromWindow(View view) {
ViewTreeObserver viewTreeObserver = CascadingMenuPopup.this.mTreeObserver;
if (viewTreeObserver != null) {
if (!viewTreeObserver.isAlive()) {
CascadingMenuPopup.this.mTreeObserver = view.getViewTreeObserver();
}
CascadingMenuPopup cascadingMenuPopup = CascadingMenuPopup.this;
cascadingMenuPopup.mTreeObserver.removeGlobalOnLayoutListener(cascadingMenuPopup.mGlobalLayoutListener);
}
view.removeOnAttachStateChangeListener(this);
}
}
/* renamed from: androidx.appcompat.view.menu.CascadingMenuPopup$3 reason: invalid class name */
public class AnonymousClass3 implements MenuItemHoverListener {
/* renamed from: androidx.appcompat.view.menu.CascadingMenuPopup$3$1 reason: invalid class name */
public class AnonymousClass1 implements Runnable {
public final /* synthetic */ MenuItem val$item;
public final /* synthetic */ MenuBuilder val$menu;
public final /* synthetic */ CascadingMenuInfo val$nextInfo;
public AnonymousClass1(CascadingMenuInfo cascadingMenuInfo, MenuItem menuItem, MenuBuilder menuBuilder) {
this.val$nextInfo = cascadingMenuInfo;
this.val$item = menuItem;
this.val$menu = menuBuilder;
}
@Override // java.lang.Runnable
public void run() {
CascadingMenuInfo cascadingMenuInfo = this.val$nextInfo;
if (cascadingMenuInfo != null) {
CascadingMenuPopup.this.mShouldCloseImmediately = true;
cascadingMenuInfo.menu.close(false);
CascadingMenuPopup.this.mShouldCloseImmediately = false;
}
if (this.val$item.isEnabled() && this.val$item.hasSubMenu()) {
this.val$menu.performItemAction(this.val$item, 4);
}
}
}
public AnonymousClass3() {
}
@Override // androidx.appcompat.widget.MenuItemHoverListener
public void onItemHoverEnter(@NonNull MenuBuilder menuBuilder, @NonNull MenuItem menuItem) {
CascadingMenuInfo cascadingMenuInfo = null;
CascadingMenuPopup.this.mSubMenuHoverHandler.removeCallbacksAndMessages(null);
int size = CascadingMenuPopup.this.mShowingMenus.size();
int i = 0;
while (true) {
if (i >= size) {
i = -1;
break;
} else if (menuBuilder == CascadingMenuPopup.this.mShowingMenus.get(i).menu) {
break;
} else {
i++;
}
}
if (i != -1) {
int i2 = i + 1;
if (i2 < CascadingMenuPopup.this.mShowingMenus.size()) {
cascadingMenuInfo = CascadingMenuPopup.this.mShowingMenus.get(i2);
}
CascadingMenuPopup.this.mSubMenuHoverHandler.postAtTime(new AnonymousClass1(cascadingMenuInfo, menuItem, menuBuilder), menuBuilder, SystemClock.uptimeMillis() + 200);
}
}
@Override // androidx.appcompat.widget.MenuItemHoverListener
public void onItemHoverExit(@NonNull MenuBuilder menuBuilder, @NonNull MenuItem menuItem) {
CascadingMenuPopup.this.mSubMenuHoverHandler.removeCallbacksAndMessages(menuBuilder);
}
}
public static class CascadingMenuInfo {
public final MenuBuilder menu;
public final int position;
public final MenuPopupWindow window;
public CascadingMenuInfo(@NonNull MenuPopupWindow menuPopupWindow, @NonNull MenuBuilder menuBuilder, int i) {
this.window = menuPopupWindow;
this.menu = menuBuilder;
this.position = i;
}
public ListView getListView() {
return this.window.getListView();
}
}
@Retention(RetentionPolicy.SOURCE)
public @interface HorizPosition {
}
public CascadingMenuPopup(@NonNull Context context, @NonNull View view, @AttrRes int i, @StyleRes int i2, boolean z2) {
this.mContext = context;
this.mAnchorView = view;
this.mPopupStyleAttr = i;
this.mPopupStyleRes = i2;
this.mOverflowOnly = z2;
this.mForceShowIcon = false;
this.mLastPosition = getInitialMenuPosition();
Resources resources = context.getResources();
this.mMenuMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2, resources.getDimensionPixelSize(R.dimen.abc_config_prefDialogWidth));
this.mSubMenuHoverHandler = new Handler();
}
private MenuPopupWindow createPopupWindow() {
MenuPopupWindow menuPopupWindow = new MenuPopupWindow(this.mContext, null, this.mPopupStyleAttr, this.mPopupStyleRes);
menuPopupWindow.setHoverListener(this.mMenuItemHoverListener);
menuPopupWindow.setOnItemClickListener(this);
menuPopupWindow.setOnDismissListener(this);
menuPopupWindow.setAnchorView(this.mAnchorView);
menuPopupWindow.setDropDownGravity(this.mDropDownGravity);
menuPopupWindow.setModal(true);
menuPopupWindow.setInputMethodMode(2);
return menuPopupWindow;
}
private int findIndexOfAddedMenu(@NonNull MenuBuilder menuBuilder) {
int size = this.mShowingMenus.size();
for (int i = 0; i < size; i++) {
if (menuBuilder == this.mShowingMenus.get(i).menu) {
return i;
}
}
return -1;
}
private MenuItem findMenuItemForSubmenu(@NonNull MenuBuilder menuBuilder, @NonNull MenuBuilder menuBuilder2) {
int size = menuBuilder.size();
for (int i = 0; i < size; i++) {
MenuItem item = menuBuilder.getItem(i);
if (item.hasSubMenu() && menuBuilder2 == item.getSubMenu()) {
return item;
}
}
return null;
}
@Nullable
private View findParentViewForSubmenu(@NonNull CascadingMenuInfo cascadingMenuInfo, @NonNull MenuBuilder menuBuilder) {
int i;
MenuAdapter menuAdapter;
int firstVisiblePosition;
MenuItem findMenuItemForSubmenu = findMenuItemForSubmenu(cascadingMenuInfo.menu, menuBuilder);
if (findMenuItemForSubmenu == null) {
return null;
}
ListView listView = cascadingMenuInfo.getListView();
ListAdapter adapter = listView.getAdapter();
int i2 = 0;
if (adapter instanceof HeaderViewListAdapter) {
HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter) adapter;
i = headerViewListAdapter.getHeadersCount();
menuAdapter = (MenuAdapter) headerViewListAdapter.getWrappedAdapter();
} else {
menuAdapter = (MenuAdapter) adapter;
i = 0;
}
int count = menuAdapter.getCount();
while (true) {
if (i2 >= count) {
i2 = -1;
break;
} else if (findMenuItemForSubmenu == menuAdapter.getItem(i2)) {
break;
} else {
i2++;
}
}
if (i2 != -1 && (firstVisiblePosition = (i2 + i) - listView.getFirstVisiblePosition()) >= 0 && firstVisiblePosition < listView.getChildCount()) {
return listView.getChildAt(firstVisiblePosition);
}
return null;
}
private int getInitialMenuPosition() {
return ViewCompat.getLayoutDirection(this.mAnchorView) == 1 ? 0 : 1;
}
private int getNextMenuPosition(int i) {
List<CascadingMenuInfo> list = this.mShowingMenus;
ListView listView = list.get(list.size() - 1).getListView();
int[] iArr = new int[2];
listView.getLocationOnScreen(iArr);
Rect rect = new Rect();
this.mShownAnchorView.getWindowVisibleDisplayFrame(rect);
if (this.mLastPosition != 1) {
return iArr[0] - i < 0 ? 1 : 0;
}
return (listView.getWidth() + iArr[0]) + i > rect.right ? 0 : 1;
}
private void showMenu(@NonNull MenuBuilder menuBuilder) {
View view;
CascadingMenuInfo cascadingMenuInfo;
int i;
int i2;
int i3;
LayoutInflater from = LayoutInflater.from(this.mContext);
MenuAdapter menuAdapter = new MenuAdapter(menuBuilder, from, this.mOverflowOnly, ITEM_LAYOUT);
if (!isShowing() && this.mForceShowIcon) {
menuAdapter.setForceShowIcon(true);
} else if (isShowing()) {
menuAdapter.setForceShowIcon(MenuPopup.shouldPreserveIconSpacing(menuBuilder));
}
int measureIndividualMenuWidth = MenuPopup.measureIndividualMenuWidth(menuAdapter, null, this.mContext, this.mMenuMaxWidth);
MenuPopupWindow createPopupWindow = createPopupWindow();
createPopupWindow.setAdapter(menuAdapter);
createPopupWindow.setContentWidth(measureIndividualMenuWidth);
createPopupWindow.setDropDownGravity(this.mDropDownGravity);
if (this.mShowingMenus.size() > 0) {
List<CascadingMenuInfo> list = this.mShowingMenus;
cascadingMenuInfo = list.get(list.size() - 1);
view = findParentViewForSubmenu(cascadingMenuInfo, menuBuilder);
} else {
cascadingMenuInfo = null;
view = null;
}
if (view != null) {
createPopupWindow.setTouchModal(false);
createPopupWindow.setEnterTransition(null);
int nextMenuPosition = getNextMenuPosition(measureIndividualMenuWidth);
boolean z2 = nextMenuPosition == 1;
this.mLastPosition = nextMenuPosition;
if (Build.VERSION.SDK_INT >= 26) {
createPopupWindow.setAnchorView(view);
i2 = 0;
i = 0;
} else {
int[] iArr = new int[2];
this.mAnchorView.getLocationOnScreen(iArr);
int[] iArr2 = new int[2];
view.getLocationOnScreen(iArr2);
if ((this.mDropDownGravity & 7) == 5) {
iArr[0] = this.mAnchorView.getWidth() + iArr[0];
iArr2[0] = view.getWidth() + iArr2[0];
}
i2 = iArr2[1] - iArr[1];
i = iArr2[0] - iArr[0];
}
if ((this.mDropDownGravity & 5) == 5) {
if (z2) {
i3 = i + measureIndividualMenuWidth;
createPopupWindow.setHorizontalOffset(i3);
createPopupWindow.setOverlapAnchor(true);
createPopupWindow.setVerticalOffset(i2);
} else {
measureIndividualMenuWidth = view.getWidth();
}
} else if (z2) {
i3 = i + view.getWidth();
createPopupWindow.setHorizontalOffset(i3);
createPopupWindow.setOverlapAnchor(true);
createPopupWindow.setVerticalOffset(i2);
}
i3 = i - measureIndividualMenuWidth;
createPopupWindow.setHorizontalOffset(i3);
createPopupWindow.setOverlapAnchor(true);
createPopupWindow.setVerticalOffset(i2);
} else {
if (this.mHasXOffset) {
createPopupWindow.setHorizontalOffset(this.mXOffset);
}
if (this.mHasYOffset) {
createPopupWindow.setVerticalOffset(this.mYOffset);
}
createPopupWindow.setEpicenterBounds(getEpicenterBounds());
}
this.mShowingMenus.add(new CascadingMenuInfo(createPopupWindow, menuBuilder, this.mLastPosition));
createPopupWindow.show();
ListView listView = createPopupWindow.getListView();
listView.setOnKeyListener(this);
if (cascadingMenuInfo == null && this.mShowTitle && menuBuilder.getHeaderTitle() != null) {
FrameLayout frameLayout = (FrameLayout) from.inflate(R.layout.abc_popup_menu_header_item_layout, (ViewGroup) listView, false);
frameLayout.setEnabled(false);
((TextView) frameLayout.findViewById(16908310)).setText(menuBuilder.getHeaderTitle());
listView.addHeaderView(frameLayout, null, false);
createPopupWindow.show();
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void addMenu(MenuBuilder menuBuilder) {
menuBuilder.addMenuPresenter(this, this.mContext);
if (isShowing()) {
showMenu(menuBuilder);
} else {
this.mPendingMenus.add(menuBuilder);
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public boolean closeMenuOnSubMenuOpened() {
return false;
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public void dismiss() {
int size = this.mShowingMenus.size();
if (size > 0) {
CascadingMenuInfo[] cascadingMenuInfoArr = (CascadingMenuInfo[]) this.mShowingMenus.toArray(new CascadingMenuInfo[size]);
for (int i = size - 1; i >= 0; i--) {
CascadingMenuInfo cascadingMenuInfo = cascadingMenuInfoArr[i];
if (cascadingMenuInfo.window.isShowing()) {
cascadingMenuInfo.window.dismiss();
}
}
}
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public boolean flagActionItems() {
return false;
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public ListView getListView() {
if (this.mShowingMenus.isEmpty()) {
return null;
}
List<CascadingMenuInfo> list = this.mShowingMenus;
return list.get(list.size() - 1).getListView();
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public boolean isShowing() {
return this.mShowingMenus.size() > 0 && this.mShowingMenus.get(0).window.isShowing();
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void onCloseMenu(MenuBuilder menuBuilder, boolean z2) {
int findIndexOfAddedMenu = findIndexOfAddedMenu(menuBuilder);
if (findIndexOfAddedMenu >= 0) {
int i = findIndexOfAddedMenu + 1;
if (i < this.mShowingMenus.size()) {
this.mShowingMenus.get(i).menu.close(false);
}
CascadingMenuInfo remove = this.mShowingMenus.remove(findIndexOfAddedMenu);
remove.menu.removeMenuPresenter(this);
if (this.mShouldCloseImmediately) {
remove.window.setExitTransition(null);
remove.window.setAnimationStyle(0);
}
remove.window.dismiss();
int size = this.mShowingMenus.size();
if (size > 0) {
this.mLastPosition = this.mShowingMenus.get(size - 1).position;
} else {
this.mLastPosition = getInitialMenuPosition();
}
if (size == 0) {
dismiss();
MenuPresenter.Callback callback = this.mPresenterCallback;
if (callback != null) {
callback.onCloseMenu(menuBuilder, true);
}
ViewTreeObserver viewTreeObserver = this.mTreeObserver;
if (viewTreeObserver != null) {
if (viewTreeObserver.isAlive()) {
this.mTreeObserver.removeGlobalOnLayoutListener(this.mGlobalLayoutListener);
}
this.mTreeObserver = null;
}
this.mShownAnchorView.removeOnAttachStateChangeListener(this.mAttachStateChangeListener);
this.mOnDismissListener.onDismiss();
} else if (z2) {
this.mShowingMenus.get(0).menu.close(false);
}
}
}
@Override // android.widget.PopupWindow.OnDismissListener
public void onDismiss() {
CascadingMenuInfo cascadingMenuInfo;
int size = this.mShowingMenus.size();
int i = 0;
while (true) {
if (i >= size) {
cascadingMenuInfo = null;
break;
}
cascadingMenuInfo = this.mShowingMenus.get(i);
if (!cascadingMenuInfo.window.isShowing()) {
break;
}
i++;
}
if (cascadingMenuInfo != null) {
cascadingMenuInfo.menu.close(false);
}
}
@Override // android.view.View.OnKeyListener
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() != 1 || i != 82) {
return false;
}
dismiss();
return true;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void onRestoreInstanceState(Parcelable parcelable) {
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public Parcelable onSaveInstanceState() {
return null;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public boolean onSubMenuSelected(SubMenuBuilder subMenuBuilder) {
for (CascadingMenuInfo cascadingMenuInfo : this.mShowingMenus) {
if (subMenuBuilder == cascadingMenuInfo.menu) {
cascadingMenuInfo.getListView().requestFocus();
return true;
}
}
if (!subMenuBuilder.hasVisibleItems()) {
return false;
}
addMenu(subMenuBuilder);
MenuPresenter.Callback callback = this.mPresenterCallback;
if (callback != null) {
callback.onOpenSubMenu(subMenuBuilder);
}
return true;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setAnchorView(@NonNull View view) {
if (this.mAnchorView != view) {
this.mAnchorView = view;
this.mDropDownGravity = GravityCompat.getAbsoluteGravity(this.mRawDropDownGravity, ViewCompat.getLayoutDirection(view));
}
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void setCallback(MenuPresenter.Callback callback) {
this.mPresenterCallback = callback;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setForceShowIcon(boolean z2) {
this.mForceShowIcon = z2;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setGravity(int i) {
if (this.mRawDropDownGravity != i) {
this.mRawDropDownGravity = i;
this.mDropDownGravity = GravityCompat.getAbsoluteGravity(i, ViewCompat.getLayoutDirection(this.mAnchorView));
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setHorizontalOffset(int i) {
this.mHasXOffset = true;
this.mXOffset = i;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) {
this.mOnDismissListener = onDismissListener;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setShowTitle(boolean z2) {
this.mShowTitle = z2;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void setVerticalOffset(int i) {
this.mHasYOffset = true;
this.mYOffset = i;
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public void show() {
if (!isShowing()) {
for (MenuBuilder menuBuilder : this.mPendingMenus) {
showMenu(menuBuilder);
}
this.mPendingMenus.clear();
View view = this.mAnchorView;
this.mShownAnchorView = view;
if (view != null) {
boolean z2 = this.mTreeObserver == null;
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
this.mTreeObserver = viewTreeObserver;
if (z2) {
viewTreeObserver.addOnGlobalLayoutListener(this.mGlobalLayoutListener);
}
this.mShownAnchorView.addOnAttachStateChangeListener(this.mAttachStateChangeListener);
}
}
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void updateMenuView(boolean z2) {
for (CascadingMenuInfo cascadingMenuInfo : this.mShowingMenus) {
MenuPopup.toMenuAdapter(cascadingMenuInfo.getListView().getAdapter()).notifyDataSetChanged();
}
}
}