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