ADD week 5
This commit is contained in:
@ -0,0 +1,31 @@
|
||||
package com.google.android.material.navigationrail;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import com.google.android.material.R;
|
||||
import com.google.android.material.navigation.NavigationBarItemView;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
final class NavigationRailItemView extends NavigationBarItemView {
|
||||
public NavigationRailItemView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override // android.widget.FrameLayout, android.view.View
|
||||
protected void onMeasure(int i, int i2) {
|
||||
super.onMeasure(i, i2);
|
||||
if (View.MeasureSpec.getMode(i2) == 0) {
|
||||
setMeasuredDimension(getMeasuredWidthAndState(), Math.max(getMeasuredHeight(), View.MeasureSpec.getSize(i2)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.android.material.navigation.NavigationBarItemView
|
||||
protected int getItemLayoutResId() {
|
||||
return R.layout.mtrl_navigation_rail_item;
|
||||
}
|
||||
|
||||
@Override // com.google.android.material.navigation.NavigationBarItemView
|
||||
protected int getItemDefaultMarginResId() {
|
||||
return R.dimen.mtrl_navigation_rail_icon_margin;
|
||||
}
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
package com.google.android.material.navigationrail;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import com.google.android.material.navigation.NavigationBarItemView;
|
||||
import com.google.android.material.navigation.NavigationBarMenuView;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class NavigationRailMenuView extends NavigationBarMenuView {
|
||||
private int itemMinimumHeight;
|
||||
private final FrameLayout.LayoutParams layoutParams;
|
||||
|
||||
public int getItemMinimumHeight() {
|
||||
return this.itemMinimumHeight;
|
||||
}
|
||||
|
||||
public NavigationRailMenuView(Context context) {
|
||||
super(context);
|
||||
this.itemMinimumHeight = -1;
|
||||
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(-1, -2);
|
||||
this.layoutParams = layoutParams;
|
||||
layoutParams.gravity = 49;
|
||||
setLayoutParams(layoutParams);
|
||||
setItemActiveIndicatorResizeable(true);
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
protected void onMeasure(int i, int i2) {
|
||||
int measureSharedChildHeights;
|
||||
int size = View.MeasureSpec.getSize(i2);
|
||||
int size2 = getMenu().getVisibleItems().size();
|
||||
if (size2 > 1 && isShifting(getLabelVisibilityMode(), size2)) {
|
||||
measureSharedChildHeights = measureShiftingChildHeights(i, size, size2);
|
||||
} else {
|
||||
measureSharedChildHeights = measureSharedChildHeights(i, size, size2, null);
|
||||
}
|
||||
setMeasuredDimension(View.MeasureSpec.getSize(i), View.resolveSizeAndState(measureSharedChildHeights, i2, 0));
|
||||
}
|
||||
|
||||
@Override // android.view.ViewGroup, android.view.View
|
||||
protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
|
||||
int childCount = getChildCount();
|
||||
int i5 = i3 - i;
|
||||
int i6 = 0;
|
||||
for (int i7 = 0; i7 < childCount; i7++) {
|
||||
View childAt = getChildAt(i7);
|
||||
if (childAt.getVisibility() != 8) {
|
||||
int measuredHeight = childAt.getMeasuredHeight() + i6;
|
||||
childAt.layout(0, i6, i5, measuredHeight);
|
||||
i6 = measuredHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.android.material.navigation.NavigationBarMenuView
|
||||
protected NavigationBarItemView createNavigationBarItemView(Context context) {
|
||||
return new NavigationRailItemView(context);
|
||||
}
|
||||
|
||||
private int makeSharedHeightSpec(int i, int i2, int i3) {
|
||||
int max = i2 / Math.max(1, i3);
|
||||
int i4 = this.itemMinimumHeight;
|
||||
if (i4 == -1) {
|
||||
i4 = View.MeasureSpec.getSize(i);
|
||||
}
|
||||
return View.MeasureSpec.makeMeasureSpec(Math.min(i4, max), 0);
|
||||
}
|
||||
|
||||
private int measureShiftingChildHeights(int i, int i2, int i3) {
|
||||
int i4;
|
||||
View childAt = getChildAt(getSelectedItemPosition());
|
||||
if (childAt != null) {
|
||||
i4 = measureChildHeight(childAt, i, makeSharedHeightSpec(i, i2, i3));
|
||||
i2 -= i4;
|
||||
i3--;
|
||||
} else {
|
||||
i4 = 0;
|
||||
}
|
||||
return i4 + measureSharedChildHeights(i, i2, i3, childAt);
|
||||
}
|
||||
|
||||
private int measureSharedChildHeights(int i, int i2, int i3, View view) {
|
||||
int makeMeasureSpec;
|
||||
if (view == null) {
|
||||
makeMeasureSpec = makeSharedHeightSpec(i, i2, i3);
|
||||
} else {
|
||||
makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(view.getMeasuredHeight(), 0);
|
||||
}
|
||||
int childCount = getChildCount();
|
||||
int i4 = 0;
|
||||
for (int i5 = 0; i5 < childCount; i5++) {
|
||||
View childAt = getChildAt(i5);
|
||||
if (childAt != view) {
|
||||
i4 += measureChildHeight(childAt, i, makeMeasureSpec);
|
||||
}
|
||||
}
|
||||
return i4;
|
||||
}
|
||||
|
||||
private int measureChildHeight(View view, int i, int i2) {
|
||||
if (view.getVisibility() == 8) {
|
||||
return 0;
|
||||
}
|
||||
view.measure(i, i2);
|
||||
return view.getMeasuredHeight();
|
||||
}
|
||||
|
||||
void setMenuGravity(int i) {
|
||||
if (this.layoutParams.gravity != i) {
|
||||
this.layoutParams.gravity = i;
|
||||
setLayoutParams(this.layoutParams);
|
||||
}
|
||||
}
|
||||
|
||||
int getMenuGravity() {
|
||||
return this.layoutParams.gravity;
|
||||
}
|
||||
|
||||
public void setItemMinimumHeight(int i) {
|
||||
if (this.itemMinimumHeight != i) {
|
||||
this.itemMinimumHeight = i;
|
||||
requestLayout();
|
||||
}
|
||||
}
|
||||
|
||||
boolean isTopGravity() {
|
||||
return (this.layoutParams.gravity & 112) == 48;
|
||||
}
|
||||
}
|
@ -0,0 +1,205 @@
|
||||
package com.google.android.material.navigationrail;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import androidx.appcompat.widget.TintTypedArray;
|
||||
import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import com.google.android.material.R;
|
||||
import com.google.android.material.animation.AnimationUtils;
|
||||
import com.google.android.material.internal.ThemeEnforcement;
|
||||
import com.google.android.material.internal.ViewUtils;
|
||||
import com.google.android.material.navigation.NavigationBarView;
|
||||
import com.google.android.material.resources.MaterialResources;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class NavigationRailView extends NavigationBarView {
|
||||
private static final int DEFAULT_HEADER_GRAVITY = 49;
|
||||
static final int DEFAULT_MENU_GRAVITY = 49;
|
||||
static final int MAX_ITEM_COUNT = 7;
|
||||
static final int NO_ITEM_MINIMUM_HEIGHT = -1;
|
||||
private View headerView;
|
||||
private Boolean paddingBottomSystemWindowInsets;
|
||||
private Boolean paddingStartSystemWindowInsets;
|
||||
private Boolean paddingTopSystemWindowInsets;
|
||||
private final int topMargin;
|
||||
|
||||
public View getHeaderView() {
|
||||
return this.headerView;
|
||||
}
|
||||
|
||||
@Override // com.google.android.material.navigation.NavigationBarView
|
||||
public int getMaxItemCount() {
|
||||
return 7;
|
||||
}
|
||||
|
||||
public NavigationRailView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public NavigationRailView(Context context, AttributeSet attributeSet) {
|
||||
this(context, attributeSet, R.attr.navigationRailStyle);
|
||||
}
|
||||
|
||||
public NavigationRailView(Context context, AttributeSet attributeSet, int i) {
|
||||
this(context, attributeSet, i, R.style.Widget_MaterialComponents_NavigationRailView);
|
||||
}
|
||||
|
||||
public NavigationRailView(Context context, AttributeSet attributeSet, int i, int i2) {
|
||||
super(context, attributeSet, i, i2);
|
||||
this.paddingTopSystemWindowInsets = null;
|
||||
this.paddingBottomSystemWindowInsets = null;
|
||||
this.paddingStartSystemWindowInsets = null;
|
||||
this.topMargin = getResources().getDimensionPixelSize(R.dimen.mtrl_navigation_rail_margin);
|
||||
Context context2 = getContext();
|
||||
TintTypedArray obtainTintedStyledAttributes = ThemeEnforcement.obtainTintedStyledAttributes(context2, attributeSet, R.styleable.NavigationRailView, i, i2, new int[0]);
|
||||
int resourceId = obtainTintedStyledAttributes.getResourceId(R.styleable.NavigationRailView_headerLayout, 0);
|
||||
if (resourceId != 0) {
|
||||
addHeaderView(resourceId);
|
||||
}
|
||||
setMenuGravity(obtainTintedStyledAttributes.getInt(R.styleable.NavigationRailView_menuGravity, 49));
|
||||
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationRailView_itemMinHeight)) {
|
||||
setItemMinimumHeight(obtainTintedStyledAttributes.getDimensionPixelSize(R.styleable.NavigationRailView_itemMinHeight, -1));
|
||||
}
|
||||
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationRailView_paddingTopSystemWindowInsets)) {
|
||||
this.paddingTopSystemWindowInsets = Boolean.valueOf(obtainTintedStyledAttributes.getBoolean(R.styleable.NavigationRailView_paddingTopSystemWindowInsets, false));
|
||||
}
|
||||
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationRailView_paddingBottomSystemWindowInsets)) {
|
||||
this.paddingBottomSystemWindowInsets = Boolean.valueOf(obtainTintedStyledAttributes.getBoolean(R.styleable.NavigationRailView_paddingBottomSystemWindowInsets, false));
|
||||
}
|
||||
if (obtainTintedStyledAttributes.hasValue(R.styleable.NavigationRailView_paddingStartSystemWindowInsets)) {
|
||||
this.paddingStartSystemWindowInsets = Boolean.valueOf(obtainTintedStyledAttributes.getBoolean(R.styleable.NavigationRailView_paddingStartSystemWindowInsets, false));
|
||||
}
|
||||
int dimensionPixelOffset = getResources().getDimensionPixelOffset(R.dimen.m3_navigation_rail_item_padding_top_with_large_font);
|
||||
int dimensionPixelOffset2 = getResources().getDimensionPixelOffset(R.dimen.m3_navigation_rail_item_padding_bottom_with_large_font);
|
||||
float lerp = AnimationUtils.lerp(0.0f, 1.0f, 0.3f, 1.0f, MaterialResources.getFontScale(context2) - 1.0f);
|
||||
float lerp2 = AnimationUtils.lerp(getItemPaddingTop(), dimensionPixelOffset, lerp);
|
||||
float lerp3 = AnimationUtils.lerp(getItemPaddingBottom(), dimensionPixelOffset2, lerp);
|
||||
setItemPaddingTop(Math.round(lerp2));
|
||||
setItemPaddingBottom(Math.round(lerp3));
|
||||
obtainTintedStyledAttributes.recycle();
|
||||
applyWindowInsets();
|
||||
}
|
||||
|
||||
private void applyWindowInsets() {
|
||||
ViewUtils.doOnApplyWindowInsets(this, new ViewUtils.OnApplyWindowInsetsListener() { // from class: com.google.android.material.navigationrail.NavigationRailView.1
|
||||
@Override // com.google.android.material.internal.ViewUtils.OnApplyWindowInsetsListener
|
||||
public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat windowInsetsCompat, ViewUtils.RelativePadding relativePadding) {
|
||||
Insets insets = windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
NavigationRailView navigationRailView = NavigationRailView.this;
|
||||
if (navigationRailView.shouldApplyWindowInsetPadding(navigationRailView.paddingTopSystemWindowInsets)) {
|
||||
relativePadding.top += insets.top;
|
||||
}
|
||||
NavigationRailView navigationRailView2 = NavigationRailView.this;
|
||||
if (navigationRailView2.shouldApplyWindowInsetPadding(navigationRailView2.paddingBottomSystemWindowInsets)) {
|
||||
relativePadding.bottom += insets.bottom;
|
||||
}
|
||||
NavigationRailView navigationRailView3 = NavigationRailView.this;
|
||||
if (navigationRailView3.shouldApplyWindowInsetPadding(navigationRailView3.paddingStartSystemWindowInsets)) {
|
||||
relativePadding.start += ViewUtils.isLayoutRtl(view) ? insets.right : insets.left;
|
||||
}
|
||||
relativePadding.applyToView(view);
|
||||
return windowInsetsCompat;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public boolean shouldApplyWindowInsetPadding(Boolean bool) {
|
||||
return bool != null ? bool.booleanValue() : ViewCompat.getFitsSystemWindows(this);
|
||||
}
|
||||
|
||||
@Override // android.widget.FrameLayout, android.view.View
|
||||
protected void onMeasure(int i, int i2) {
|
||||
int makeMinWidthSpec = makeMinWidthSpec(i);
|
||||
super.onMeasure(makeMinWidthSpec, i2);
|
||||
if (isHeaderViewVisible()) {
|
||||
measureChild(getNavigationRailMenuView(), makeMinWidthSpec, View.MeasureSpec.makeMeasureSpec((getMeasuredHeight() - this.headerView.getMeasuredHeight()) - this.topMargin, Integer.MIN_VALUE));
|
||||
}
|
||||
}
|
||||
|
||||
@Override // android.widget.FrameLayout, android.view.ViewGroup, android.view.View
|
||||
protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
|
||||
super.onLayout(z, i, i2, i3, i4);
|
||||
NavigationRailMenuView navigationRailMenuView = getNavigationRailMenuView();
|
||||
int i5 = 0;
|
||||
if (isHeaderViewVisible()) {
|
||||
int bottom = this.headerView.getBottom() + this.topMargin;
|
||||
int top = navigationRailMenuView.getTop();
|
||||
if (top < bottom) {
|
||||
i5 = bottom - top;
|
||||
}
|
||||
} else if (navigationRailMenuView.isTopGravity()) {
|
||||
i5 = this.topMargin;
|
||||
}
|
||||
if (i5 > 0) {
|
||||
navigationRailMenuView.layout(navigationRailMenuView.getLeft(), navigationRailMenuView.getTop() + i5, navigationRailMenuView.getRight(), navigationRailMenuView.getBottom() + i5);
|
||||
}
|
||||
}
|
||||
|
||||
public void addHeaderView(int i) {
|
||||
addHeaderView(LayoutInflater.from(getContext()).inflate(i, (ViewGroup) this, false));
|
||||
}
|
||||
|
||||
public void addHeaderView(View view) {
|
||||
removeHeaderView();
|
||||
this.headerView = view;
|
||||
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(-2, -2);
|
||||
layoutParams.gravity = 49;
|
||||
layoutParams.topMargin = this.topMargin;
|
||||
addView(view, 0, layoutParams);
|
||||
}
|
||||
|
||||
public void removeHeaderView() {
|
||||
View view = this.headerView;
|
||||
if (view != null) {
|
||||
removeView(view);
|
||||
this.headerView = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setMenuGravity(int i) {
|
||||
getNavigationRailMenuView().setMenuGravity(i);
|
||||
}
|
||||
|
||||
public int getMenuGravity() {
|
||||
return getNavigationRailMenuView().getMenuGravity();
|
||||
}
|
||||
|
||||
public int getItemMinimumHeight() {
|
||||
return ((NavigationRailMenuView) getMenuView()).getItemMinimumHeight();
|
||||
}
|
||||
|
||||
public void setItemMinimumHeight(int i) {
|
||||
((NavigationRailMenuView) getMenuView()).setItemMinimumHeight(i);
|
||||
}
|
||||
|
||||
private NavigationRailMenuView getNavigationRailMenuView() {
|
||||
return (NavigationRailMenuView) getMenuView();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
@Override // com.google.android.material.navigation.NavigationBarView
|
||||
public NavigationRailMenuView createNavigationBarMenuView(Context context) {
|
||||
return new NavigationRailMenuView(context);
|
||||
}
|
||||
|
||||
private int makeMinWidthSpec(int i) {
|
||||
int suggestedMinimumWidth = getSuggestedMinimumWidth();
|
||||
if (View.MeasureSpec.getMode(i) == 1073741824 || suggestedMinimumWidth <= 0) {
|
||||
return i;
|
||||
}
|
||||
return View.MeasureSpec.makeMeasureSpec(Math.min(View.MeasureSpec.getSize(i), suggestedMinimumWidth + getPaddingLeft() + getPaddingRight()), BasicMeasure.EXACTLY);
|
||||
}
|
||||
|
||||
private boolean isHeaderViewVisible() {
|
||||
View view = this.headerView;
|
||||
return (view == null || view.getVisibility() == 8) ? false : true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user