Rabbit-R1/android (non root)/java/sources/com/google/android/material/navigation/NavigationView.java
2024-05-21 17:08:36 -04:00

553 lines
24 KiB
Java

package com.google.android.material.navigation;
import android.R;
import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Pair;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
import androidx.activity.BackEventCompat;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.view.SupportMenuInflater;
import androidx.appcompat.view.menu.MenuItemImpl;
import androidx.appcompat.widget.TintTypedArray;
import androidx.core.content.ContextCompat;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.customview.view.AbsSavedState;
import androidx.drawerlayout.widget.DrawerLayout;
import com.google.android.material.canvas.CanvasCompat;
import com.google.android.material.internal.ContextUtils;
import com.google.android.material.internal.NavigationMenu;
import com.google.android.material.internal.NavigationMenuPresenter;
import com.google.android.material.internal.ScrimInsetsFrameLayout;
import com.google.android.material.internal.WindowUtils;
import com.google.android.material.motion.MaterialBackHandler;
import com.google.android.material.motion.MaterialBackOrchestrator;
import com.google.android.material.motion.MaterialSideContainerBackHelper;
import com.google.android.material.resources.MaterialResources;
import com.google.android.material.shape.MaterialShapeDrawable;
import com.google.android.material.shape.MaterialShapeUtils;
import com.google.android.material.shape.ShapeAppearanceModel;
import com.google.android.material.shape.ShapeableDelegate;
/* loaded from: classes2.dex */
public class NavigationView extends ScrimInsetsFrameLayout implements MaterialBackHandler {
private static final int PRESENTER_NAVIGATION_VIEW_ID = 1;
private final DrawerLayout.DrawerListener backDrawerListener;
private final MaterialBackOrchestrator backOrchestrator;
private boolean bottomInsetScrimEnabled;
private int drawerLayoutCornerSize;
OnNavigationItemSelectedListener listener;
private final int maxWidth;
private final NavigationMenu menu;
private MenuInflater menuInflater;
private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener;
private final NavigationMenuPresenter presenter;
private final ShapeableDelegate shapeableDelegate;
private final MaterialSideContainerBackHelper sideContainerBackHelper;
private final int[] tmpLocation;
private boolean topInsetScrimEnabled;
private static final int[] CHECKED_STATE_SET = {R.attr.state_checked};
private static final int[] DISABLED_STATE_SET = {-16842910};
private static final int DEF_STYLE_RES = com.google.android.material.R.style.Widget_Design_NavigationView;
/* loaded from: classes2.dex */
public interface OnNavigationItemSelectedListener {
boolean onNavigationItemSelected(MenuItem menuItem);
}
MaterialSideContainerBackHelper getBackHelper() {
return this.sideContainerBackHelper;
}
public Menu getMenu() {
return this.menu;
}
public boolean isBottomInsetScrimEnabled() {
return this.bottomInsetScrimEnabled;
}
public boolean isTopInsetScrimEnabled() {
return this.topInsetScrimEnabled;
}
public void setBottomInsetScrimEnabled(boolean z) {
this.bottomInsetScrimEnabled = z;
}
public void setNavigationItemSelectedListener(OnNavigationItemSelectedListener onNavigationItemSelectedListener) {
this.listener = onNavigationItemSelectedListener;
}
public void setTopInsetScrimEnabled(boolean z) {
this.topInsetScrimEnabled = z;
}
public NavigationView(Context context) {
this(context, null);
}
public NavigationView(Context context, AttributeSet attributeSet) {
this(context, attributeSet, com.google.android.material.R.attr.navigationViewStyle);
}
/* JADX WARN: Illegal instructions before constructor call */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public NavigationView(android.content.Context r17, android.util.AttributeSet r18, int r19) {
/*
Method dump skipped, instructions count: 572
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.android.material.navigation.NavigationView.<init>(android.content.Context, android.util.AttributeSet, int):void");
}
@Override // android.view.View
public void setOverScrollMode(int i) {
super.setOverScrollMode(i);
NavigationMenuPresenter navigationMenuPresenter = this.presenter;
if (navigationMenuPresenter != null) {
navigationMenuPresenter.setOverScrollMode(i);
}
}
public void setForceCompatClippingEnabled(boolean z) {
this.shapeableDelegate.setForceCompatClippingEnabled(this, z);
}
private void maybeUpdateCornerSizeForDrawerLayout(int i, int i2) {
if ((getParent() instanceof DrawerLayout) && (getLayoutParams() instanceof DrawerLayout.LayoutParams) && this.drawerLayoutCornerSize > 0 && (getBackground() instanceof MaterialShapeDrawable)) {
boolean z = GravityCompat.getAbsoluteGravity(((DrawerLayout.LayoutParams) getLayoutParams()).gravity, ViewCompat.getLayoutDirection(this)) == 3;
MaterialShapeDrawable materialShapeDrawable = (MaterialShapeDrawable) getBackground();
ShapeAppearanceModel.Builder allCornerSizes = materialShapeDrawable.getShapeAppearanceModel().toBuilder().setAllCornerSizes(this.drawerLayoutCornerSize);
if (z) {
allCornerSizes.setTopLeftCornerSize(0.0f);
allCornerSizes.setBottomLeftCornerSize(0.0f);
} else {
allCornerSizes.setTopRightCornerSize(0.0f);
allCornerSizes.setBottomRightCornerSize(0.0f);
}
ShapeAppearanceModel build = allCornerSizes.build();
materialShapeDrawable.setShapeAppearanceModel(build);
this.shapeableDelegate.onShapeAppearanceChanged(this, build);
this.shapeableDelegate.onMaskChanged(this, new RectF(0.0f, 0.0f, i, i2));
this.shapeableDelegate.setOffsetZeroCornerEdgeBoundsEnabled(this, true);
}
}
private boolean hasShapeAppearance(TintTypedArray tintTypedArray) {
return tintTypedArray.hasValue(com.google.android.material.R.styleable.NavigationView_itemShapeAppearance) || tintTypedArray.hasValue(com.google.android.material.R.styleable.NavigationView_itemShapeAppearanceOverlay);
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.android.material.internal.ScrimInsetsFrameLayout, android.view.ViewGroup, android.view.View
public void onAttachedToWindow() {
super.onAttachedToWindow();
MaterialShapeUtils.setParentAbsoluteElevation(this);
ViewParent parent = getParent();
if ((parent instanceof DrawerLayout) && this.backOrchestrator.shouldListenForBackCallbacks()) {
DrawerLayout drawerLayout = (DrawerLayout) parent;
drawerLayout.removeDrawerListener(this.backDrawerListener);
drawerLayout.addDrawerListener(this.backDrawerListener);
if (drawerLayout.isDrawerOpen(this)) {
this.backOrchestrator.startListeningForBackCallbacksWithPriorityOverlay();
}
}
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.android.material.internal.ScrimInsetsFrameLayout, android.view.ViewGroup, android.view.View
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
getViewTreeObserver().removeOnGlobalLayoutListener(this.onGlobalLayoutListener);
ViewParent parent = getParent();
if (parent instanceof DrawerLayout) {
((DrawerLayout) parent).removeDrawerListener(this.backDrawerListener);
}
}
@Override // android.view.View
protected void onSizeChanged(int i, int i2, int i3, int i4) {
super.onSizeChanged(i, i2, i3, i4);
maybeUpdateCornerSizeForDrawerLayout(i, i2);
}
@Override // android.view.View
public void setElevation(float f) {
super.setElevation(f);
MaterialShapeUtils.setElevation(this, f);
}
private Drawable createDefaultItemBackground(TintTypedArray tintTypedArray) {
return createDefaultItemDrawable(tintTypedArray, MaterialResources.getColorStateList(getContext(), tintTypedArray, com.google.android.material.R.styleable.NavigationView_itemShapeFillColor));
}
private Drawable createDefaultItemDrawable(TintTypedArray tintTypedArray, ColorStateList colorStateList) {
MaterialShapeDrawable materialShapeDrawable = new MaterialShapeDrawable(ShapeAppearanceModel.builder(getContext(), tintTypedArray.getResourceId(com.google.android.material.R.styleable.NavigationView_itemShapeAppearance, 0), tintTypedArray.getResourceId(com.google.android.material.R.styleable.NavigationView_itemShapeAppearanceOverlay, 0)).build());
materialShapeDrawable.setFillColor(colorStateList);
return new InsetDrawable((Drawable) materialShapeDrawable, tintTypedArray.getDimensionPixelSize(com.google.android.material.R.styleable.NavigationView_itemShapeInsetStart, 0), tintTypedArray.getDimensionPixelSize(com.google.android.material.R.styleable.NavigationView_itemShapeInsetTop, 0), tintTypedArray.getDimensionPixelSize(com.google.android.material.R.styleable.NavigationView_itemShapeInsetEnd, 0), tintTypedArray.getDimensionPixelSize(com.google.android.material.R.styleable.NavigationView_itemShapeInsetBottom, 0));
}
@Override // android.view.View
protected Parcelable onSaveInstanceState() {
SavedState savedState = new SavedState(super.onSaveInstanceState());
savedState.menuState = new Bundle();
this.menu.savePresenterStates(savedState.menuState);
return savedState;
}
@Override // android.view.View
protected void onRestoreInstanceState(Parcelable parcelable) {
if (!(parcelable instanceof SavedState)) {
super.onRestoreInstanceState(parcelable);
return;
}
SavedState savedState = (SavedState) parcelable;
super.onRestoreInstanceState(savedState.getSuperState());
this.menu.restorePresenterStates(savedState.menuState);
}
@Override // android.widget.FrameLayout, android.view.View
protected void onMeasure(int i, int i2) {
int mode = View.MeasureSpec.getMode(i);
if (mode == Integer.MIN_VALUE) {
i = View.MeasureSpec.makeMeasureSpec(Math.min(View.MeasureSpec.getSize(i), this.maxWidth), 1073741824);
} else if (mode == 0) {
i = View.MeasureSpec.makeMeasureSpec(this.maxWidth, 1073741824);
}
super.onMeasure(i, i2);
}
@Override // android.view.ViewGroup, android.view.View
protected void dispatchDraw(Canvas canvas) {
this.shapeableDelegate.maybeClip(canvas, new CanvasCompat.CanvasOperation() { // from class: com.google.android.material.navigation.NavigationView$$ExternalSyntheticLambda0
@Override // com.google.android.material.canvas.CanvasCompat.CanvasOperation
public final void run(Canvas canvas2) {
NavigationView.this.m5535xb790515(canvas2);
}
});
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: lambda$dispatchDraw$0$com-google-android-material-navigation-NavigationView, reason: not valid java name */
public /* synthetic */ void m5535xb790515(Canvas canvas) {
super.dispatchDraw(canvas);
}
@Override // com.google.android.material.internal.ScrimInsetsFrameLayout
protected void onInsetsChanged(WindowInsetsCompat windowInsetsCompat) {
this.presenter.dispatchApplyWindowInsets(windowInsetsCompat);
}
public void inflateMenu(int i) {
this.presenter.setUpdateSuspended(true);
getMenuInflater().inflate(i, this.menu);
this.presenter.setUpdateSuspended(false);
this.presenter.updateMenuView(false);
}
public View inflateHeaderView(int i) {
return this.presenter.inflateHeaderView(i);
}
public void addHeaderView(View view) {
this.presenter.addHeaderView(view);
}
public void removeHeaderView(View view) {
this.presenter.removeHeaderView(view);
}
public int getHeaderCount() {
return this.presenter.getHeaderCount();
}
public View getHeaderView(int i) {
return this.presenter.getHeaderView(i);
}
public ColorStateList getItemIconTintList() {
return this.presenter.getItemTintList();
}
public void setItemIconTintList(ColorStateList colorStateList) {
this.presenter.setItemIconTintList(colorStateList);
}
public ColorStateList getItemTextColor() {
return this.presenter.getItemTextColor();
}
public void setItemTextColor(ColorStateList colorStateList) {
this.presenter.setItemTextColor(colorStateList);
}
public Drawable getItemBackground() {
return this.presenter.getItemBackground();
}
public void setItemBackgroundResource(int i) {
setItemBackground(ContextCompat.getDrawable(getContext(), i));
}
public void setItemBackground(Drawable drawable) {
this.presenter.setItemBackground(drawable);
}
public int getItemHorizontalPadding() {
return this.presenter.getItemHorizontalPadding();
}
public void setItemHorizontalPadding(int i) {
this.presenter.setItemHorizontalPadding(i);
}
public void setItemHorizontalPaddingResource(int i) {
this.presenter.setItemHorizontalPadding(getResources().getDimensionPixelSize(i));
}
public int getItemVerticalPadding() {
return this.presenter.getItemVerticalPadding();
}
public void setItemVerticalPadding(int i) {
this.presenter.setItemVerticalPadding(i);
}
public void setItemVerticalPaddingResource(int i) {
this.presenter.setItemVerticalPadding(getResources().getDimensionPixelSize(i));
}
public int getItemIconPadding() {
return this.presenter.getItemIconPadding();
}
public void setItemIconPadding(int i) {
this.presenter.setItemIconPadding(i);
}
public void setItemIconPaddingResource(int i) {
this.presenter.setItemIconPadding(getResources().getDimensionPixelSize(i));
}
public void setCheckedItem(int i) {
MenuItem findItem = this.menu.findItem(i);
if (findItem != null) {
this.presenter.setCheckedItem((MenuItemImpl) findItem);
}
}
public void setCheckedItem(MenuItem menuItem) {
MenuItem findItem = this.menu.findItem(menuItem.getItemId());
if (findItem != null) {
this.presenter.setCheckedItem((MenuItemImpl) findItem);
return;
}
throw new IllegalArgumentException("Called setCheckedItem(MenuItem) with an item that is not in the current menu.");
}
public MenuItem getCheckedItem() {
return this.presenter.getCheckedItem();
}
public void setItemTextAppearance(int i) {
this.presenter.setItemTextAppearance(i);
}
public void setItemTextAppearanceActiveBoldEnabled(boolean z) {
this.presenter.setItemTextAppearanceActiveBoldEnabled(z);
}
public void setItemIconSize(int i) {
this.presenter.setItemIconSize(i);
}
public void setItemMaxLines(int i) {
this.presenter.setItemMaxLines(i);
}
public int getItemMaxLines() {
return this.presenter.getItemMaxLines();
}
public int getDividerInsetStart() {
return this.presenter.getDividerInsetStart();
}
public void setDividerInsetStart(int i) {
this.presenter.setDividerInsetStart(i);
}
public int getDividerInsetEnd() {
return this.presenter.getDividerInsetEnd();
}
public void setDividerInsetEnd(int i) {
this.presenter.setDividerInsetEnd(i);
}
public int getSubheaderInsetStart() {
return this.presenter.getSubheaderInsetStart();
}
public void setSubheaderInsetStart(int i) {
this.presenter.setSubheaderInsetStart(i);
}
public int getSubheaderInsetEnd() {
return this.presenter.getSubheaderInsetEnd();
}
public void setSubheaderInsetEnd(int i) {
this.presenter.setSubheaderInsetEnd(i);
}
@Override // com.google.android.material.motion.MaterialBackHandler
public void startBackProgress(BackEventCompat backEventCompat) {
requireDrawerLayoutParent();
this.sideContainerBackHelper.startBackProgress(backEventCompat);
}
@Override // com.google.android.material.motion.MaterialBackHandler
public void updateBackProgress(BackEventCompat backEventCompat) {
this.sideContainerBackHelper.updateBackProgress(backEventCompat, ((DrawerLayout.LayoutParams) requireDrawerLayoutParent().second).gravity);
}
@Override // com.google.android.material.motion.MaterialBackHandler
public void handleBackInvoked() {
Pair<DrawerLayout, DrawerLayout.LayoutParams> requireDrawerLayoutParent = requireDrawerLayoutParent();
DrawerLayout drawerLayout = (DrawerLayout) requireDrawerLayoutParent.first;
BackEventCompat onHandleBackInvoked = this.sideContainerBackHelper.onHandleBackInvoked();
if (onHandleBackInvoked == null || Build.VERSION.SDK_INT < 34) {
drawerLayout.closeDrawer(this);
return;
}
this.sideContainerBackHelper.finishBackProgress(onHandleBackInvoked, ((DrawerLayout.LayoutParams) requireDrawerLayoutParent.second).gravity, DrawerLayoutUtils.getScrimCloseAnimatorListener(drawerLayout, this), DrawerLayoutUtils.getScrimCloseAnimatorUpdateListener(drawerLayout));
}
@Override // com.google.android.material.motion.MaterialBackHandler
public void cancelBackProgress() {
requireDrawerLayoutParent();
this.sideContainerBackHelper.cancelBackProgress();
}
private Pair<DrawerLayout, DrawerLayout.LayoutParams> requireDrawerLayoutParent() {
ViewParent parent = getParent();
ViewGroup.LayoutParams layoutParams = getLayoutParams();
if ((parent instanceof DrawerLayout) && (layoutParams instanceof DrawerLayout.LayoutParams)) {
return new Pair<>((DrawerLayout) parent, (DrawerLayout.LayoutParams) layoutParams);
}
throw new IllegalStateException("NavigationView back progress requires the direct parent view to be a DrawerLayout.");
}
private MenuInflater getMenuInflater() {
if (this.menuInflater == null) {
this.menuInflater = new SupportMenuInflater(getContext());
}
return this.menuInflater;
}
private ColorStateList createDefaultColorStateList(int i) {
TypedValue typedValue = new TypedValue();
if (!getContext().getTheme().resolveAttribute(i, typedValue, true)) {
return null;
}
ColorStateList colorStateList = AppCompatResources.getColorStateList(getContext(), typedValue.resourceId);
if (!getContext().getTheme().resolveAttribute(androidx.appcompat.R.attr.colorPrimary, typedValue, true)) {
return null;
}
int i2 = typedValue.data;
int defaultColor = colorStateList.getDefaultColor();
int[] iArr = DISABLED_STATE_SET;
return new ColorStateList(new int[][]{iArr, CHECKED_STATE_SET, EMPTY_STATE_SET}, new int[]{colorStateList.getColorForState(iArr, defaultColor), i2, defaultColor});
}
private void setupInsetScrimsListener() {
this.onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { // from class: com.google.android.material.navigation.NavigationView.3
@Override // android.view.ViewTreeObserver.OnGlobalLayoutListener
public void onGlobalLayout() {
NavigationView navigationView = NavigationView.this;
navigationView.getLocationOnScreen(navigationView.tmpLocation);
boolean z = true;
boolean z2 = NavigationView.this.tmpLocation[1] == 0;
NavigationView.this.presenter.setBehindStatusBar(z2);
NavigationView navigationView2 = NavigationView.this;
navigationView2.setDrawTopInsetForeground(z2 && navigationView2.isTopInsetScrimEnabled());
NavigationView.this.setDrawLeftInsetForeground(NavigationView.this.tmpLocation[0] == 0 || NavigationView.this.tmpLocation[0] + NavigationView.this.getWidth() == 0);
Activity activity = ContextUtils.getActivity(NavigationView.this.getContext());
if (activity != null) {
Rect currentWindowBounds = WindowUtils.getCurrentWindowBounds(activity);
boolean z3 = currentWindowBounds.height() - NavigationView.this.getHeight() == NavigationView.this.tmpLocation[1];
boolean z4 = Color.alpha(activity.getWindow().getNavigationBarColor()) != 0;
NavigationView navigationView3 = NavigationView.this;
navigationView3.setDrawBottomInsetForeground(z3 && z4 && navigationView3.isBottomInsetScrimEnabled());
if (currentWindowBounds.width() != NavigationView.this.tmpLocation[0] && currentWindowBounds.width() - NavigationView.this.getWidth() != NavigationView.this.tmpLocation[0]) {
z = false;
}
NavigationView.this.setDrawRightInsetForeground(z);
}
}
};
getViewTreeObserver().addOnGlobalLayoutListener(this.onGlobalLayoutListener);
}
/* loaded from: classes2.dex */
public static class SavedState extends AbsSavedState {
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.ClassLoaderCreator<SavedState>() { // from class: com.google.android.material.navigation.NavigationView.SavedState.1
/* JADX WARN: Can't rename method to resolve collision */
@Override // android.os.Parcelable.ClassLoaderCreator
public SavedState createFromParcel(Parcel parcel, ClassLoader classLoader) {
return new SavedState(parcel, classLoader);
}
@Override // android.os.Parcelable.Creator
public SavedState createFromParcel(Parcel parcel) {
return new SavedState(parcel, null);
}
@Override // android.os.Parcelable.Creator
public SavedState[] newArray(int i) {
return new SavedState[i];
}
};
public Bundle menuState;
public SavedState(Parcel parcel, ClassLoader classLoader) {
super(parcel, classLoader);
this.menuState = parcel.readBundle(classLoader);
}
public SavedState(Parcelable parcelable) {
super(parcelable);
}
@Override // androidx.customview.view.AbsSavedState, android.os.Parcelable
public void writeToParcel(Parcel parcel, int i) {
super.writeToParcel(parcel, i);
parcel.writeBundle(this.menuState);
}
}
}