447 lines
19 KiB
Java
447 lines
19 KiB
Java
package com.google.android.material.navigation;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Bundle;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.util.AttributeSet;
|
|
import android.view.Menu;
|
|
import android.view.MenuInflater;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.widget.FrameLayout;
|
|
import androidx.appcompat.view.SupportMenuInflater;
|
|
import androidx.appcompat.view.menu.MenuBuilder;
|
|
import androidx.appcompat.view.menu.MenuView;
|
|
import androidx.appcompat.widget.TintTypedArray;
|
|
import androidx.core.graphics.drawable.DrawableCompat;
|
|
import androidx.core.view.ViewCompat;
|
|
import androidx.customview.view.AbsSavedState;
|
|
import com.google.android.material.R;
|
|
import com.google.android.material.badge.BadgeDrawable;
|
|
import com.google.android.material.drawable.DrawableUtils;
|
|
import com.google.android.material.internal.ThemeEnforcement;
|
|
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.theme.overlay.MaterialThemeOverlay;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
|
|
/* loaded from: classes.dex */
|
|
public abstract class NavigationBarView extends FrameLayout {
|
|
public static final int LABEL_VISIBILITY_AUTO = -1;
|
|
public static final int LABEL_VISIBILITY_LABELED = 1;
|
|
public static final int LABEL_VISIBILITY_SELECTED = 0;
|
|
public static final int LABEL_VISIBILITY_UNLABELED = 2;
|
|
private static final int MENU_PRESENTER_ID = 1;
|
|
private final NavigationBarMenu menu;
|
|
private MenuInflater menuInflater;
|
|
private final NavigationBarMenuView menuView;
|
|
private final NavigationBarPresenter presenter;
|
|
private OnItemReselectedListener reselectedListener;
|
|
private OnItemSelectedListener selectedListener;
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface LabelVisibility {
|
|
}
|
|
|
|
public interface OnItemReselectedListener {
|
|
void onNavigationItemReselected(MenuItem menuItem);
|
|
}
|
|
|
|
public interface OnItemSelectedListener {
|
|
boolean onNavigationItemSelected(MenuItem menuItem);
|
|
}
|
|
|
|
protected abstract NavigationBarMenuView createNavigationBarMenuView(Context context);
|
|
|
|
public abstract int getMaxItemCount();
|
|
|
|
public Menu getMenu() {
|
|
return this.menu;
|
|
}
|
|
|
|
public MenuView getMenuView() {
|
|
return this.menuView;
|
|
}
|
|
|
|
public NavigationBarPresenter getPresenter() {
|
|
return this.presenter;
|
|
}
|
|
|
|
public void setOnItemReselectedListener(OnItemReselectedListener onItemReselectedListener) {
|
|
this.reselectedListener = onItemReselectedListener;
|
|
}
|
|
|
|
public void setOnItemSelectedListener(OnItemSelectedListener onItemSelectedListener) {
|
|
this.selectedListener = onItemSelectedListener;
|
|
}
|
|
|
|
public NavigationBarView(Context context, AttributeSet attributeSet, int i, int i2) {
|
|
super(MaterialThemeOverlay.wrap(context, attributeSet, i, i2), attributeSet, i);
|
|
NavigationBarPresenter navigationBarPresenter = new NavigationBarPresenter();
|
|
this.presenter = navigationBarPresenter;
|
|
Context context2 = getContext();
|
|
TintTypedArray obtainTintedStyledAttributes = ThemeEnforcement.obtainTintedStyledAttributes(context2, attributeSet, R.styleable.NavigationBarView, i, i2, R.styleable.NavigationBarView_itemTextAppearanceInactive, R.styleable.NavigationBarView_itemTextAppearanceActive);
|
|
NavigationBarMenu navigationBarMenu = new NavigationBarMenu(context2, getClass(), getMaxItemCount());
|
|
this.menu = navigationBarMenu;
|
|
NavigationBarMenuView createNavigationBarMenuView = createNavigationBarMenuView(context2);
|
|
this.menuView = createNavigationBarMenuView;
|
|
navigationBarPresenter.setMenuView(createNavigationBarMenuView);
|
|
navigationBarPresenter.setId(1);
|
|
createNavigationBarMenuView.setPresenter(navigationBarPresenter);
|
|
navigationBarMenu.addMenuPresenter(navigationBarPresenter);
|
|
navigationBarPresenter.initForMenu(getContext(), navigationBarMenu);
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemIconTint)) {
|
|
createNavigationBarMenuView.setIconTintList(obtainTintedStyledAttributes.getColorStateList(R.styleable.NavigationBarView_itemIconTint));
|
|
} else {
|
|
createNavigationBarMenuView.setIconTintList(createNavigationBarMenuView.createDefaultColorStateList(android.R.attr.textColorSecondary));
|
|
}
|
|
setItemIconSize(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarView_itemIconSize, getResources().getDimensionPixelSize(R.dimen.mtrl_navigation_bar_item_default_icon_size)));
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemTextAppearanceInactive)) {
|
|
setItemTextAppearanceInactive(obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationBarView_itemTextAppearanceInactive, 0));
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemTextAppearanceActive)) {
|
|
setItemTextAppearanceActive(obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationBarView_itemTextAppearanceActive, 0));
|
|
}
|
|
setItemTextAppearanceActiveBoldEnabled(obtainTintedStyledAttributes.getBoolean(R.styleable.NavigationBarView_itemTextAppearanceActiveBoldEnabled, true));
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemTextColor)) {
|
|
setItemTextColor(obtainTintedStyledAttributes.getColorStateList(R.styleable.NavigationBarView_itemTextColor));
|
|
}
|
|
Drawable background = getBackground();
|
|
ColorStateList colorStateListOrNull = DrawableUtils.getColorStateListOrNull(background);
|
|
if (background == null || colorStateListOrNull != null) {
|
|
MaterialShapeDrawable materialShapeDrawable = new MaterialShapeDrawable(ShapeAppearanceModel.builder(context2, attributeSet, i, i2).build());
|
|
if (colorStateListOrNull != null) {
|
|
materialShapeDrawable.setFillColor(colorStateListOrNull);
|
|
}
|
|
materialShapeDrawable.initializeElevationOverlay(context2);
|
|
ViewCompat.setBackground(this, materialShapeDrawable);
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemPaddingTop)) {
|
|
setItemPaddingTop(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarView_itemPaddingTop, 0));
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_itemPaddingBottom)) {
|
|
setItemPaddingBottom(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarView_itemPaddingBottom, 0));
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_activeIndicatorLabelPadding)) {
|
|
setActiveIndicatorLabelPadding(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarView_activeIndicatorLabelPadding, 0));
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_elevation)) {
|
|
setElevation(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarView_elevation, 0));
|
|
}
|
|
DrawableCompat.setTintList(getBackground().mutate(), MaterialResources.getColorStateList(context2, obtainTintedStyledAttributes, R.styleable.NavigationBarView_backgroundTint));
|
|
setLabelVisibilityMode(obtainTintedStyledAttributes.getInteger(R.styleable.NavigationBarView_labelVisibilityMode, -1));
|
|
int resourceId = obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationBarView_itemBackground, 0);
|
|
if (resourceId != 0) {
|
|
createNavigationBarMenuView.setItemBackgroundRes(resourceId);
|
|
} else {
|
|
setItemRippleColor(MaterialResources.getColorStateList(context2, obtainTintedStyledAttributes, R.styleable.NavigationBarView_itemRippleColor));
|
|
}
|
|
int resourceId2 = obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationBarView_itemActiveIndicatorStyle, 0);
|
|
if (resourceId2 != 0) {
|
|
setItemActiveIndicatorEnabled(true);
|
|
TypedArray obtainStyledAttributes = context2.obtainStyledAttributes(resourceId2, R.styleable.NavigationBarActiveIndicator);
|
|
setItemActiveIndicatorWidth(obtainStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarActiveIndicator_android_width, 0));
|
|
setItemActiveIndicatorHeight(obtainStyledAttributes.getDimensionPixelSize(R.styleable.NavigationBarActiveIndicator_android_height, 0));
|
|
setItemActiveIndicatorMarginHorizontal(obtainStyledAttributes.getDimensionPixelOffset(R.styleable.NavigationBarActiveIndicator_marginHorizontal, 0));
|
|
setItemActiveIndicatorColor(MaterialResources.getColorStateList(context2, obtainStyledAttributes, R.styleable.NavigationBarActiveIndicator_android_color));
|
|
setItemActiveIndicatorShapeAppearance(ShapeAppearanceModel.builder(context2, obtainStyledAttributes.getResourceId(R.styleable.NavigationBarActiveIndicator_shapeAppearance, 0), 0).build());
|
|
obtainStyledAttributes.recycle();
|
|
}
|
|
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationBarView_menu)) {
|
|
inflateMenu(obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationBarView_menu, 0));
|
|
}
|
|
obtainTintedStyledAttributes.recycle();
|
|
addView(createNavigationBarMenuView);
|
|
navigationBarMenu.setCallback(new MenuBuilder.Callback() { // from class: com.google.android.material.navigation.NavigationBarView.1
|
|
@Override // androidx.appcompat.view.menu.MenuBuilder.Callback
|
|
public void onMenuModeChange(MenuBuilder menuBuilder) {
|
|
}
|
|
|
|
@Override // androidx.appcompat.view.menu.MenuBuilder.Callback
|
|
public boolean onMenuItemSelected(MenuBuilder menuBuilder, MenuItem menuItem) {
|
|
if (NavigationBarView.this.reselectedListener == null || menuItem.getItemId() != NavigationBarView.this.getSelectedItemId()) {
|
|
return (NavigationBarView.this.selectedListener == null || NavigationBarView.this.selectedListener.onNavigationItemSelected(menuItem)) ? false : true;
|
|
}
|
|
NavigationBarView.this.reselectedListener.onNavigationItemReselected(menuItem);
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
protected void onAttachedToWindow() {
|
|
super.onAttachedToWindow();
|
|
MaterialShapeUtils.setParentAbsoluteElevation(this);
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setElevation(float f) {
|
|
super.setElevation(f);
|
|
MaterialShapeUtils.setElevation(this, f);
|
|
}
|
|
|
|
public void inflateMenu(int i) {
|
|
this.presenter.setUpdateSuspended(true);
|
|
getMenuInflater().inflate(i, this.menu);
|
|
this.presenter.setUpdateSuspended(false);
|
|
this.presenter.updateMenuView(true);
|
|
}
|
|
|
|
public ColorStateList getItemIconTintList() {
|
|
return this.menuView.getIconTintList();
|
|
}
|
|
|
|
public void setItemIconTintList(ColorStateList colorStateList) {
|
|
this.menuView.setIconTintList(colorStateList);
|
|
}
|
|
|
|
public void setItemIconSize(int i) {
|
|
this.menuView.setItemIconSize(i);
|
|
}
|
|
|
|
public void setItemIconSizeRes(int i) {
|
|
setItemIconSize(getResources().getDimensionPixelSize(i));
|
|
}
|
|
|
|
public int getItemIconSize() {
|
|
return this.menuView.getItemIconSize();
|
|
}
|
|
|
|
public ColorStateList getItemTextColor() {
|
|
return this.menuView.getItemTextColor();
|
|
}
|
|
|
|
public void setItemTextColor(ColorStateList colorStateList) {
|
|
this.menuView.setItemTextColor(colorStateList);
|
|
}
|
|
|
|
@Deprecated
|
|
public int getItemBackgroundResource() {
|
|
return this.menuView.getItemBackgroundRes();
|
|
}
|
|
|
|
public void setItemBackgroundResource(int i) {
|
|
this.menuView.setItemBackgroundRes(i);
|
|
}
|
|
|
|
public Drawable getItemBackground() {
|
|
return this.menuView.getItemBackground();
|
|
}
|
|
|
|
public void setItemBackground(Drawable drawable) {
|
|
this.menuView.setItemBackground(drawable);
|
|
}
|
|
|
|
public ColorStateList getItemRippleColor() {
|
|
return this.menuView.getItemRippleColor();
|
|
}
|
|
|
|
public void setItemRippleColor(ColorStateList colorStateList) {
|
|
this.menuView.setItemRippleColor(colorStateList);
|
|
}
|
|
|
|
public int getItemPaddingTop() {
|
|
return this.menuView.getItemPaddingTop();
|
|
}
|
|
|
|
public void setItemPaddingTop(int i) {
|
|
this.menuView.setItemPaddingTop(i);
|
|
}
|
|
|
|
public int getItemPaddingBottom() {
|
|
return this.menuView.getItemPaddingBottom();
|
|
}
|
|
|
|
public void setItemPaddingBottom(int i) {
|
|
this.menuView.setItemPaddingBottom(i);
|
|
}
|
|
|
|
public void setActiveIndicatorLabelPadding(int i) {
|
|
this.menuView.setActiveIndicatorLabelPadding(i);
|
|
}
|
|
|
|
public int getActiveIndicatorLabelPadding() {
|
|
return this.menuView.getActiveIndicatorLabelPadding();
|
|
}
|
|
|
|
public boolean isItemActiveIndicatorEnabled() {
|
|
return this.menuView.getItemActiveIndicatorEnabled();
|
|
}
|
|
|
|
public void setItemActiveIndicatorEnabled(boolean z) {
|
|
this.menuView.setItemActiveIndicatorEnabled(z);
|
|
}
|
|
|
|
public int getItemActiveIndicatorWidth() {
|
|
return this.menuView.getItemActiveIndicatorWidth();
|
|
}
|
|
|
|
public void setItemActiveIndicatorWidth(int i) {
|
|
this.menuView.setItemActiveIndicatorWidth(i);
|
|
}
|
|
|
|
public int getItemActiveIndicatorHeight() {
|
|
return this.menuView.getItemActiveIndicatorHeight();
|
|
}
|
|
|
|
public void setItemActiveIndicatorHeight(int i) {
|
|
this.menuView.setItemActiveIndicatorHeight(i);
|
|
}
|
|
|
|
public int getItemActiveIndicatorMarginHorizontal() {
|
|
return this.menuView.getItemActiveIndicatorMarginHorizontal();
|
|
}
|
|
|
|
public void setItemActiveIndicatorMarginHorizontal(int i) {
|
|
this.menuView.setItemActiveIndicatorMarginHorizontal(i);
|
|
}
|
|
|
|
public ShapeAppearanceModel getItemActiveIndicatorShapeAppearance() {
|
|
return this.menuView.getItemActiveIndicatorShapeAppearance();
|
|
}
|
|
|
|
public void setItemActiveIndicatorShapeAppearance(ShapeAppearanceModel shapeAppearanceModel) {
|
|
this.menuView.setItemActiveIndicatorShapeAppearance(shapeAppearanceModel);
|
|
}
|
|
|
|
public ColorStateList getItemActiveIndicatorColor() {
|
|
return this.menuView.getItemActiveIndicatorColor();
|
|
}
|
|
|
|
public void setItemActiveIndicatorColor(ColorStateList colorStateList) {
|
|
this.menuView.setItemActiveIndicatorColor(colorStateList);
|
|
}
|
|
|
|
public int getSelectedItemId() {
|
|
return this.menuView.getSelectedItemId();
|
|
}
|
|
|
|
public void setSelectedItemId(int i) {
|
|
MenuItem findItem = this.menu.findItem(i);
|
|
if (findItem == null || this.menu.performItemAction(findItem, this.presenter, 0)) {
|
|
return;
|
|
}
|
|
findItem.setChecked(true);
|
|
}
|
|
|
|
public void setLabelVisibilityMode(int i) {
|
|
if (this.menuView.getLabelVisibilityMode() != i) {
|
|
this.menuView.setLabelVisibilityMode(i);
|
|
this.presenter.updateMenuView(false);
|
|
}
|
|
}
|
|
|
|
public int getLabelVisibilityMode() {
|
|
return this.menuView.getLabelVisibilityMode();
|
|
}
|
|
|
|
public void setItemTextAppearanceInactive(int i) {
|
|
this.menuView.setItemTextAppearanceInactive(i);
|
|
}
|
|
|
|
public int getItemTextAppearanceInactive() {
|
|
return this.menuView.getItemTextAppearanceInactive();
|
|
}
|
|
|
|
public void setItemTextAppearanceActive(int i) {
|
|
this.menuView.setItemTextAppearanceActive(i);
|
|
}
|
|
|
|
public void setItemTextAppearanceActiveBoldEnabled(boolean z) {
|
|
this.menuView.setItemTextAppearanceActiveBoldEnabled(z);
|
|
}
|
|
|
|
public int getItemTextAppearanceActive() {
|
|
return this.menuView.getItemTextAppearanceActive();
|
|
}
|
|
|
|
public void setItemOnTouchListener(int i, View.OnTouchListener onTouchListener) {
|
|
this.menuView.setItemOnTouchListener(i, onTouchListener);
|
|
}
|
|
|
|
public BadgeDrawable getBadge(int i) {
|
|
return this.menuView.getBadge(i);
|
|
}
|
|
|
|
public BadgeDrawable getOrCreateBadge(int i) {
|
|
return this.menuView.getOrCreateBadge(i);
|
|
}
|
|
|
|
public void removeBadge(int i) {
|
|
this.menuView.removeBadge(i);
|
|
}
|
|
|
|
private MenuInflater getMenuInflater() {
|
|
if (this.menuInflater == null) {
|
|
this.menuInflater = new SupportMenuInflater(getContext());
|
|
}
|
|
return this.menuInflater;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
protected Parcelable onSaveInstanceState() {
|
|
SavedState savedState = new SavedState(super.onSaveInstanceState());
|
|
savedState.menuPresenterState = new Bundle();
|
|
this.menu.savePresenterStates(savedState.menuPresenterState);
|
|
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.menuPresenterState);
|
|
}
|
|
|
|
static class SavedState extends AbsSavedState {
|
|
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.ClassLoaderCreator<SavedState>() { // from class: com.google.android.material.navigation.NavigationBarView.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];
|
|
}
|
|
};
|
|
Bundle menuPresenterState;
|
|
|
|
public SavedState(Parcelable parcelable) {
|
|
super(parcelable);
|
|
}
|
|
|
|
public SavedState(Parcel parcel, ClassLoader classLoader) {
|
|
super(parcel, classLoader);
|
|
readFromParcel(parcel, classLoader == null ? getClass().getClassLoader() : classLoader);
|
|
}
|
|
|
|
@Override // androidx.customview.view.AbsSavedState, android.os.Parcelable
|
|
public void writeToParcel(Parcel parcel, int i) {
|
|
super.writeToParcel(parcel, i);
|
|
parcel.writeBundle(this.menuPresenterState);
|
|
}
|
|
|
|
private void readFromParcel(Parcel parcel, ClassLoader classLoader) {
|
|
this.menuPresenterState = parcel.readBundle(classLoader);
|
|
}
|
|
}
|
|
}
|