jimu-decompiled/sources/androidx/appcompat/view/menu/CascadingMenuPopup.java
2025-05-13 19:24:51 +02:00

555 lines
18 KiB
Java

package androidx.appcompat.view.menu;
import android.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
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.AdapterView;
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.appcompat.R$dimen;
import androidx.appcompat.R$layout;
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.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/* loaded from: classes.dex */
final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, View.OnKeyListener, PopupWindow.OnDismissListener {
private static final int C = R$layout.abc_cascading_menu_item_layout;
private PopupWindow.OnDismissListener A;
boolean B;
private final Context b;
private final int c;
private final int d;
private final int e;
private final boolean f;
final Handler g;
private View o;
View p;
private boolean r;
private boolean s;
private int t;
private int u;
private boolean x;
private MenuPresenter.Callback y;
ViewTreeObserver z;
private final List<MenuBuilder> h = new ArrayList();
final List<CascadingMenuInfo> i = new ArrayList();
final ViewTreeObserver.OnGlobalLayoutListener j = new ViewTreeObserver.OnGlobalLayoutListener() { // from class: androidx.appcompat.view.menu.CascadingMenuPopup.1
@Override // android.view.ViewTreeObserver.OnGlobalLayoutListener
public void onGlobalLayout() {
if (!CascadingMenuPopup.this.c() || CascadingMenuPopup.this.i.size() <= 0 || CascadingMenuPopup.this.i.get(0).a.k()) {
return;
}
View view = CascadingMenuPopup.this.p;
if (view == null || !view.isShown()) {
CascadingMenuPopup.this.dismiss();
return;
}
Iterator<CascadingMenuInfo> it = CascadingMenuPopup.this.i.iterator();
while (it.hasNext()) {
it.next().a.a();
}
}
};
private final View.OnAttachStateChangeListener k = new View.OnAttachStateChangeListener() { // from class: androidx.appcompat.view.menu.CascadingMenuPopup.2
@Override // android.view.View.OnAttachStateChangeListener
public void onViewAttachedToWindow(View view) {
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewDetachedFromWindow(View view) {
ViewTreeObserver viewTreeObserver = CascadingMenuPopup.this.z;
if (viewTreeObserver != null) {
if (!viewTreeObserver.isAlive()) {
CascadingMenuPopup.this.z = view.getViewTreeObserver();
}
CascadingMenuPopup cascadingMenuPopup = CascadingMenuPopup.this;
cascadingMenuPopup.z.removeGlobalOnLayoutListener(cascadingMenuPopup.j);
}
view.removeOnAttachStateChangeListener(this);
}
};
private final MenuItemHoverListener l = new MenuItemHoverListener() { // from class: androidx.appcompat.view.menu.CascadingMenuPopup.3
@Override // androidx.appcompat.widget.MenuItemHoverListener
public void a(final MenuBuilder menuBuilder, final MenuItem menuItem) {
CascadingMenuPopup.this.g.removeCallbacksAndMessages(null);
int size = CascadingMenuPopup.this.i.size();
int i = 0;
while (true) {
if (i >= size) {
i = -1;
break;
} else if (menuBuilder == CascadingMenuPopup.this.i.get(i).b) {
break;
} else {
i++;
}
}
if (i == -1) {
return;
}
int i2 = i + 1;
final CascadingMenuInfo cascadingMenuInfo = i2 < CascadingMenuPopup.this.i.size() ? CascadingMenuPopup.this.i.get(i2) : null;
CascadingMenuPopup.this.g.postAtTime(new Runnable() { // from class: androidx.appcompat.view.menu.CascadingMenuPopup.3.1
@Override // java.lang.Runnable
public void run() {
CascadingMenuInfo cascadingMenuInfo2 = cascadingMenuInfo;
if (cascadingMenuInfo2 != null) {
CascadingMenuPopup.this.B = true;
cascadingMenuInfo2.b.a(false);
CascadingMenuPopup.this.B = false;
}
if (menuItem.isEnabled() && menuItem.hasSubMenu()) {
menuBuilder.a(menuItem, 4);
}
}
}, menuBuilder, SystemClock.uptimeMillis() + 200);
}
@Override // androidx.appcompat.widget.MenuItemHoverListener
public void b(MenuBuilder menuBuilder, MenuItem menuItem) {
CascadingMenuPopup.this.g.removeCallbacksAndMessages(menuBuilder);
}
};
private int m = 0;
private int n = 0;
private boolean v = false;
private int q = h();
private static class CascadingMenuInfo {
public final MenuPopupWindow a;
public final MenuBuilder b;
public final int c;
public CascadingMenuInfo(MenuPopupWindow menuPopupWindow, MenuBuilder menuBuilder, int i) {
this.a = menuPopupWindow;
this.b = menuBuilder;
this.c = i;
}
public ListView a() {
return this.a.d();
}
}
public CascadingMenuPopup(Context context, View view, int i, int i2, boolean z) {
this.b = context;
this.o = view;
this.d = i;
this.e = i2;
this.f = z;
Resources resources = context.getResources();
this.c = Math.max(resources.getDisplayMetrics().widthPixels / 2, resources.getDimensionPixelSize(R$dimen.abc_config_prefDialogWidth));
this.g = new Handler();
}
private int d(int i) {
List<CascadingMenuInfo> list = this.i;
ListView a = list.get(list.size() - 1).a();
int[] iArr = new int[2];
a.getLocationOnScreen(iArr);
Rect rect = new Rect();
this.p.getWindowVisibleDisplayFrame(rect);
return this.q == 1 ? (iArr[0] + a.getWidth()) + i > rect.right ? 0 : 1 : iArr[0] - i < 0 ? 1 : 0;
}
private MenuPopupWindow g() {
MenuPopupWindow menuPopupWindow = new MenuPopupWindow(this.b, null, this.d, this.e);
menuPopupWindow.a(this.l);
menuPopupWindow.a((AdapterView.OnItemClickListener) this);
menuPopupWindow.a((PopupWindow.OnDismissListener) this);
menuPopupWindow.a(this.o);
menuPopupWindow.c(this.n);
menuPopupWindow.a(true);
menuPopupWindow.e(2);
return menuPopupWindow;
}
private int h() {
return ViewCompat.k(this.o) == 1 ? 0 : 1;
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public void a() {
if (c()) {
return;
}
Iterator<MenuBuilder> it = this.h.iterator();
while (it.hasNext()) {
d(it.next());
}
this.h.clear();
this.p = this.o;
if (this.p != null) {
boolean z = this.z == null;
this.z = this.p.getViewTreeObserver();
if (z) {
this.z.addOnGlobalLayoutListener(this.j);
}
this.p.addOnAttachStateChangeListener(this.k);
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void b(boolean z) {
this.v = z;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public boolean b() {
return false;
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public boolean c() {
return this.i.size() > 0 && this.i.get(0).a.c();
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public void dismiss() {
int size = this.i.size();
if (size > 0) {
CascadingMenuInfo[] cascadingMenuInfoArr = (CascadingMenuInfo[]) this.i.toArray(new CascadingMenuInfo[size]);
for (int i = size - 1; i >= 0; i--) {
CascadingMenuInfo cascadingMenuInfo = cascadingMenuInfoArr[i];
if (cascadingMenuInfo.a.c()) {
cascadingMenuInfo.a.dismiss();
}
}
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
protected boolean e() {
return false;
}
@Override // android.widget.PopupWindow.OnDismissListener
public void onDismiss() {
CascadingMenuInfo cascadingMenuInfo;
int size = this.i.size();
int i = 0;
while (true) {
if (i >= size) {
cascadingMenuInfo = null;
break;
}
cascadingMenuInfo = this.i.get(i);
if (!cascadingMenuInfo.a.c()) {
break;
} else {
i++;
}
}
if (cascadingMenuInfo != null) {
cascadingMenuInfo.b.a(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;
}
private int c(MenuBuilder menuBuilder) {
int size = this.i.size();
for (int i = 0; i < size; i++) {
if (menuBuilder == this.i.get(i).b) {
return i;
}
}
return -1;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void b(int i) {
this.r = true;
this.t = i;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void c(int i) {
this.s = true;
this.u = i;
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void c(boolean z) {
this.x = z;
}
private void d(MenuBuilder menuBuilder) {
CascadingMenuInfo cascadingMenuInfo;
View view;
int i;
int i2;
int i3;
LayoutInflater from = LayoutInflater.from(this.b);
MenuAdapter menuAdapter = new MenuAdapter(menuBuilder, from, this.f, C);
if (!c() && this.v) {
menuAdapter.a(true);
} else if (c()) {
menuAdapter.a(MenuPopup.b(menuBuilder));
}
int a = MenuPopup.a(menuAdapter, null, this.b, this.c);
MenuPopupWindow g = g();
g.a((ListAdapter) menuAdapter);
g.b(a);
g.c(this.n);
if (this.i.size() > 0) {
List<CascadingMenuInfo> list = this.i;
cascadingMenuInfo = list.get(list.size() - 1);
view = a(cascadingMenuInfo, menuBuilder);
} else {
cascadingMenuInfo = null;
view = null;
}
if (view != null) {
g.c(false);
g.a((Object) null);
int d = d(a);
boolean z = d == 1;
this.q = d;
if (Build.VERSION.SDK_INT >= 26) {
g.a(view);
i2 = 0;
i = 0;
} else {
int[] iArr = new int[2];
this.o.getLocationOnScreen(iArr);
int[] iArr2 = new int[2];
view.getLocationOnScreen(iArr2);
if ((this.n & 7) == 5) {
iArr[0] = iArr[0] + this.o.getWidth();
iArr2[0] = iArr2[0] + view.getWidth();
}
i = iArr2[0] - iArr[0];
i2 = iArr2[1] - iArr[1];
}
if ((this.n & 5) == 5) {
if (!z) {
a = view.getWidth();
i3 = i - a;
}
i3 = i + a;
} else {
if (z) {
a = view.getWidth();
i3 = i + a;
}
i3 = i - a;
}
g.d(i3);
g.b(true);
g.h(i2);
} else {
if (this.r) {
g.d(this.t);
}
if (this.s) {
g.h(this.u);
}
g.a(f());
}
this.i.add(new CascadingMenuInfo(g, menuBuilder, this.q));
g.a();
ListView d2 = g.d();
d2.setOnKeyListener(this);
if (cascadingMenuInfo == null && this.x && menuBuilder.h() != null) {
FrameLayout frameLayout = (FrameLayout) from.inflate(R$layout.abc_popup_menu_header_item_layout, (ViewGroup) d2, false);
TextView textView = (TextView) frameLayout.findViewById(R.id.title);
frameLayout.setEnabled(false);
textView.setText(menuBuilder.h());
d2.addHeaderView(frameLayout, null, false);
g.a();
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void a(MenuBuilder menuBuilder) {
menuBuilder.a(this, this.b);
if (c()) {
d(menuBuilder);
} else {
this.h.add(menuBuilder);
}
}
private MenuItem a(MenuBuilder menuBuilder, 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;
}
private View a(CascadingMenuInfo cascadingMenuInfo, MenuBuilder menuBuilder) {
MenuAdapter menuAdapter;
int i;
int firstVisiblePosition;
MenuItem a = a(cascadingMenuInfo.b, menuBuilder);
if (a == null) {
return null;
}
ListView a2 = cascadingMenuInfo.a();
ListAdapter adapter = a2.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;
}
if (a == menuAdapter.getItem(i2)) {
break;
}
i2++;
}
if (i2 != -1 && (firstVisiblePosition = (i2 + i) - a2.getFirstVisiblePosition()) >= 0 && firstVisiblePosition < a2.getChildCount()) {
return a2.getChildAt(firstVisiblePosition);
}
return null;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void a(boolean z) {
Iterator<CascadingMenuInfo> it = this.i.iterator();
while (it.hasNext()) {
MenuPopup.a(it.next().a().getAdapter()).notifyDataSetChanged();
}
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void a(MenuPresenter.Callback callback) {
this.y = callback;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public boolean a(SubMenuBuilder subMenuBuilder) {
for (CascadingMenuInfo cascadingMenuInfo : this.i) {
if (subMenuBuilder == cascadingMenuInfo.b) {
cascadingMenuInfo.a().requestFocus();
return true;
}
}
if (!subMenuBuilder.hasVisibleItems()) {
return false;
}
a((MenuBuilder) subMenuBuilder);
MenuPresenter.Callback callback = this.y;
if (callback != null) {
callback.a(subMenuBuilder);
}
return true;
}
@Override // androidx.appcompat.view.menu.MenuPresenter
public void a(MenuBuilder menuBuilder, boolean z) {
int c = c(menuBuilder);
if (c < 0) {
return;
}
int i = c + 1;
if (i < this.i.size()) {
this.i.get(i).b.a(false);
}
CascadingMenuInfo remove = this.i.remove(c);
remove.b.b(this);
if (this.B) {
remove.a.b((Object) null);
remove.a.a(0);
}
remove.a.dismiss();
int size = this.i.size();
if (size > 0) {
this.q = this.i.get(size - 1).c;
} else {
this.q = h();
}
if (size != 0) {
if (z) {
this.i.get(0).b.a(false);
return;
}
return;
}
dismiss();
MenuPresenter.Callback callback = this.y;
if (callback != null) {
callback.a(menuBuilder, true);
}
ViewTreeObserver viewTreeObserver = this.z;
if (viewTreeObserver != null) {
if (viewTreeObserver.isAlive()) {
this.z.removeGlobalOnLayoutListener(this.j);
}
this.z = null;
}
this.p.removeOnAttachStateChangeListener(this.k);
this.A.onDismiss();
}
@Override // androidx.appcompat.view.menu.ShowableListMenu
public ListView d() {
if (this.i.isEmpty()) {
return null;
}
return this.i.get(r0.size() - 1).a();
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void a(int i) {
if (this.m != i) {
this.m = i;
this.n = GravityCompat.a(i, ViewCompat.k(this.o));
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void a(View view) {
if (this.o != view) {
this.o = view;
this.n = GravityCompat.a(this.m, ViewCompat.k(this.o));
}
}
@Override // androidx.appcompat.view.menu.MenuPopup
public void a(PopupWindow.OnDismissListener onDismissListener) {
this.A = onDismissListener;
}
}