745 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			745 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.animation.Animator;
 | |
| import android.animation.AnimatorListenerAdapter;
 | |
| import android.content.Context;
 | |
| import android.content.res.Configuration;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Canvas;
 | |
| import android.graphics.Rect;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.os.Parcelable;
 | |
| import android.util.AttributeSet;
 | |
| import android.util.SparseArray;
 | |
| import android.view.Menu;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.ViewPropertyAnimator;
 | |
| import android.view.Window;
 | |
| import android.widget.OverScroller;
 | |
| import androidx.appcompat.R;
 | |
| import androidx.appcompat.view.menu.MenuPresenter;
 | |
| import androidx.core.graphics.Insets;
 | |
| import androidx.core.view.NestedScrollingParent;
 | |
| import androidx.core.view.NestedScrollingParent2;
 | |
| import androidx.core.view.NestedScrollingParent3;
 | |
| import androidx.core.view.NestedScrollingParentHelper;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.WindowInsetsCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class ActionBarOverlayLayout extends ViewGroup implements DecorContentParent, NestedScrollingParent, NestedScrollingParent2, NestedScrollingParent3 {
 | |
|     private static final int ACTION_BAR_ANIMATE_DELAY = 600;
 | |
|     static final int[] ATTRS = {R.attr.actionBarSize, android.R.attr.windowContentOverlay};
 | |
|     private static final String TAG = "ActionBarOverlayLayout";
 | |
|     private int mActionBarHeight;
 | |
|     ActionBarContainer mActionBarTop;
 | |
|     private ActionBarVisibilityCallback mActionBarVisibilityCallback;
 | |
|     private final Runnable mAddActionBarHideOffset;
 | |
|     boolean mAnimatingForFling;
 | |
|     private final Rect mBaseContentInsets;
 | |
|     private WindowInsetsCompat mBaseInnerInsets;
 | |
|     private final Rect mBaseInnerInsetsRect;
 | |
|     private ContentFrameLayout mContent;
 | |
|     private final Rect mContentInsets;
 | |
|     ViewPropertyAnimator mCurrentActionBarTopAnimator;
 | |
|     private DecorToolbar mDecorToolbar;
 | |
|     private OverScroller mFlingEstimator;
 | |
|     private boolean mHasNonEmbeddedTabs;
 | |
|     private boolean mHideOnContentScroll;
 | |
|     private int mHideOnContentScrollReference;
 | |
|     private boolean mIgnoreWindowContentOverlay;
 | |
|     private WindowInsetsCompat mInnerInsets;
 | |
|     private final Rect mInnerInsetsRect;
 | |
|     private final Rect mLastBaseContentInsets;
 | |
|     private WindowInsetsCompat mLastBaseInnerInsets;
 | |
|     private final Rect mLastBaseInnerInsetsRect;
 | |
|     private WindowInsetsCompat mLastInnerInsets;
 | |
|     private final Rect mLastInnerInsetsRect;
 | |
|     private int mLastSystemUiVisibility;
 | |
|     private boolean mOverlayMode;
 | |
|     private final NestedScrollingParentHelper mParentHelper;
 | |
|     private final Runnable mRemoveActionBarHideOffset;
 | |
|     final AnimatorListenerAdapter mTopAnimatorListener;
 | |
|     private Drawable mWindowContentOverlay;
 | |
|     private int mWindowVisibility;
 | |
| 
 | |
|     public interface ActionBarVisibilityCallback {
 | |
|         void enableContentAnimations(boolean z);
 | |
| 
 | |
|         void hideForSystem();
 | |
| 
 | |
|         void onContentScrollStarted();
 | |
| 
 | |
|         void onContentScrollStopped();
 | |
| 
 | |
|         void onWindowVisibilityChanged(int i);
 | |
| 
 | |
|         void showForSystem();
 | |
|     }
 | |
| 
 | |
|     public boolean isHideOnContentScrollEnabled() {
 | |
|         return this.mHideOnContentScroll;
 | |
|     }
 | |
| 
 | |
|     public boolean isInOverlayMode() {
 | |
|         return this.mOverlayMode;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public boolean onNestedPreFling(View view, float f, float f2) {
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public void onNestedPreScroll(View view, int i, int i2, int[] iArr) {
 | |
|     }
 | |
| 
 | |
|     public void setHasNonEmbeddedTabs(boolean z) {
 | |
|         this.mHasNonEmbeddedTabs = z;
 | |
|     }
 | |
| 
 | |
|     public void setShowingForActionMode(boolean z) {
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setUiOptions(int i) {
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public boolean shouldDelayChildPressedState() {
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     public ActionBarOverlayLayout(Context context) {
 | |
|         this(context, null);
 | |
|     }
 | |
| 
 | |
|     public ActionBarOverlayLayout(Context context, AttributeSet attributeSet) {
 | |
|         super(context, attributeSet);
 | |
|         this.mWindowVisibility = 0;
 | |
|         this.mBaseContentInsets = new Rect();
 | |
|         this.mLastBaseContentInsets = new Rect();
 | |
|         this.mContentInsets = new Rect();
 | |
|         this.mBaseInnerInsetsRect = new Rect();
 | |
|         this.mLastBaseInnerInsetsRect = new Rect();
 | |
|         this.mInnerInsetsRect = new Rect();
 | |
|         this.mLastInnerInsetsRect = new Rect();
 | |
|         this.mBaseInnerInsets = WindowInsetsCompat.CONSUMED;
 | |
|         this.mLastBaseInnerInsets = WindowInsetsCompat.CONSUMED;
 | |
|         this.mInnerInsets = WindowInsetsCompat.CONSUMED;
 | |
|         this.mLastInnerInsets = WindowInsetsCompat.CONSUMED;
 | |
|         this.mTopAnimatorListener = new AnimatorListenerAdapter() { // from class: androidx.appcompat.widget.ActionBarOverlayLayout.1
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationEnd(Animator animator) {
 | |
|                 ActionBarOverlayLayout.this.mCurrentActionBarTopAnimator = null;
 | |
|                 ActionBarOverlayLayout.this.mAnimatingForFling = false;
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationCancel(Animator animator) {
 | |
|                 ActionBarOverlayLayout.this.mCurrentActionBarTopAnimator = null;
 | |
|                 ActionBarOverlayLayout.this.mAnimatingForFling = false;
 | |
|             }
 | |
|         };
 | |
|         this.mRemoveActionBarHideOffset = new Runnable() { // from class: androidx.appcompat.widget.ActionBarOverlayLayout.2
 | |
|             @Override // java.lang.Runnable
 | |
|             public void run() {
 | |
|                 ActionBarOverlayLayout.this.haltActionBarHideOffsetAnimations();
 | |
|                 ActionBarOverlayLayout actionBarOverlayLayout = ActionBarOverlayLayout.this;
 | |
|                 actionBarOverlayLayout.mCurrentActionBarTopAnimator = actionBarOverlayLayout.mActionBarTop.animate().translationY(0.0f).setListener(ActionBarOverlayLayout.this.mTopAnimatorListener);
 | |
|             }
 | |
|         };
 | |
|         this.mAddActionBarHideOffset = new Runnable() { // from class: androidx.appcompat.widget.ActionBarOverlayLayout.3
 | |
|             @Override // java.lang.Runnable
 | |
|             public void run() {
 | |
|                 ActionBarOverlayLayout.this.haltActionBarHideOffsetAnimations();
 | |
|                 ActionBarOverlayLayout actionBarOverlayLayout = ActionBarOverlayLayout.this;
 | |
|                 actionBarOverlayLayout.mCurrentActionBarTopAnimator = actionBarOverlayLayout.mActionBarTop.animate().translationY(-ActionBarOverlayLayout.this.mActionBarTop.getHeight()).setListener(ActionBarOverlayLayout.this.mTopAnimatorListener);
 | |
|             }
 | |
|         };
 | |
|         init(context);
 | |
|         this.mParentHelper = new NestedScrollingParentHelper(this);
 | |
|     }
 | |
| 
 | |
|     private void init(Context context) {
 | |
|         TypedArray obtainStyledAttributes = getContext().getTheme().obtainStyledAttributes(ATTRS);
 | |
|         this.mActionBarHeight = obtainStyledAttributes.getDimensionPixelSize(0, 0);
 | |
|         Drawable drawable = obtainStyledAttributes.getDrawable(1);
 | |
|         this.mWindowContentOverlay = drawable;
 | |
|         setWillNotDraw(drawable == null);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         this.mIgnoreWindowContentOverlay = context.getApplicationInfo().targetSdkVersion < 19;
 | |
|         this.mFlingEstimator = new OverScroller(context);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|     }
 | |
| 
 | |
|     public void setActionBarVisibilityCallback(ActionBarVisibilityCallback actionBarVisibilityCallback) {
 | |
|         this.mActionBarVisibilityCallback = actionBarVisibilityCallback;
 | |
|         if (getWindowToken() != null) {
 | |
|             this.mActionBarVisibilityCallback.onWindowVisibilityChanged(this.mWindowVisibility);
 | |
|             int i = this.mLastSystemUiVisibility;
 | |
|             if (i != 0) {
 | |
|                 onWindowSystemUiVisibilityChanged(i);
 | |
|                 ViewCompat.requestApplyInsets(this);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setOverlayMode(boolean z) {
 | |
|         this.mOverlayMode = z;
 | |
|         this.mIgnoreWindowContentOverlay = z && getContext().getApplicationInfo().targetSdkVersion < 19;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onConfigurationChanged(Configuration configuration) {
 | |
|         super.onConfigurationChanged(configuration);
 | |
|         init(getContext());
 | |
|         ViewCompat.requestApplyInsets(this);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     @Deprecated
 | |
|     public void onWindowSystemUiVisibilityChanged(int i) {
 | |
|         super.onWindowSystemUiVisibilityChanged(i);
 | |
|         pullChildren();
 | |
|         int i2 = this.mLastSystemUiVisibility ^ i;
 | |
|         this.mLastSystemUiVisibility = i;
 | |
|         boolean z = (i & 4) == 0;
 | |
|         boolean z2 = (i & 256) != 0;
 | |
|         ActionBarVisibilityCallback actionBarVisibilityCallback = this.mActionBarVisibilityCallback;
 | |
|         if (actionBarVisibilityCallback != null) {
 | |
|             actionBarVisibilityCallback.enableContentAnimations(!z2);
 | |
|             if (z || !z2) {
 | |
|                 this.mActionBarVisibilityCallback.showForSystem();
 | |
|             } else {
 | |
|                 this.mActionBarVisibilityCallback.hideForSystem();
 | |
|             }
 | |
|         }
 | |
|         if ((i2 & 256) == 0 || this.mActionBarVisibilityCallback == null) {
 | |
|             return;
 | |
|         }
 | |
|         ViewCompat.requestApplyInsets(this);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onWindowVisibilityChanged(int i) {
 | |
|         super.onWindowVisibilityChanged(i);
 | |
|         this.mWindowVisibility = i;
 | |
|         ActionBarVisibilityCallback actionBarVisibilityCallback = this.mActionBarVisibilityCallback;
 | |
|         if (actionBarVisibilityCallback != null) {
 | |
|             actionBarVisibilityCallback.onWindowVisibilityChanged(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private boolean applyInsets(View view, Rect rect, boolean z, boolean z2, boolean z3, boolean z4) {
 | |
|         boolean z5;
 | |
|         LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
 | |
|         if (!z || layoutParams.leftMargin == rect.left) {
 | |
|             z5 = false;
 | |
|         } else {
 | |
|             layoutParams.leftMargin = rect.left;
 | |
|             z5 = true;
 | |
|         }
 | |
|         if (z2 && layoutParams.topMargin != rect.top) {
 | |
|             layoutParams.topMargin = rect.top;
 | |
|             z5 = true;
 | |
|         }
 | |
|         if (z4 && layoutParams.rightMargin != rect.right) {
 | |
|             layoutParams.rightMargin = rect.right;
 | |
|             z5 = true;
 | |
|         }
 | |
|         if (!z3 || layoutParams.bottomMargin == rect.bottom) {
 | |
|             return z5;
 | |
|         }
 | |
|         layoutParams.bottomMargin = rect.bottom;
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected boolean fitSystemWindows(Rect rect) {
 | |
|         return super.fitSystemWindows(rect);
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:11:0x0061, code lost:
 | |
|     
 | |
|         if (r0 != false) goto L9;
 | |
|      */
 | |
|     @Override // android.view.View
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     public android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets r8) {
 | |
|         /*
 | |
|             r7 = this;
 | |
|             r7.pullChildren()
 | |
|             androidx.core.view.WindowInsetsCompat r8 = androidx.core.view.WindowInsetsCompat.toWindowInsetsCompat(r8, r7)
 | |
|             android.graphics.Rect r2 = new android.graphics.Rect
 | |
|             int r0 = r8.getSystemWindowInsetLeft()
 | |
|             int r1 = r8.getSystemWindowInsetTop()
 | |
|             int r3 = r8.getSystemWindowInsetRight()
 | |
|             int r4 = r8.getSystemWindowInsetBottom()
 | |
|             r2.<init>(r0, r1, r3, r4)
 | |
|             androidx.appcompat.widget.ActionBarContainer r1 = r7.mActionBarTop
 | |
|             r3 = 1
 | |
|             r4 = 1
 | |
|             r5 = 0
 | |
|             r6 = 1
 | |
|             r0 = r7
 | |
|             boolean r0 = r0.applyInsets(r1, r2, r3, r4, r5, r6)
 | |
|             android.graphics.Rect r1 = r7.mBaseContentInsets
 | |
|             androidx.core.view.ViewCompat.computeSystemWindowInsets(r7, r8, r1)
 | |
|             android.graphics.Rect r1 = r7.mBaseContentInsets
 | |
|             int r1 = r1.left
 | |
|             android.graphics.Rect r2 = r7.mBaseContentInsets
 | |
|             int r2 = r2.top
 | |
|             android.graphics.Rect r3 = r7.mBaseContentInsets
 | |
|             int r3 = r3.right
 | |
|             android.graphics.Rect r4 = r7.mBaseContentInsets
 | |
|             int r4 = r4.bottom
 | |
|             androidx.core.view.WindowInsetsCompat r1 = r8.inset(r1, r2, r3, r4)
 | |
|             r7.mBaseInnerInsets = r1
 | |
|             androidx.core.view.WindowInsetsCompat r2 = r7.mLastBaseInnerInsets
 | |
|             boolean r1 = r2.equals(r1)
 | |
|             if (r1 != 0) goto L4f
 | |
|             androidx.core.view.WindowInsetsCompat r0 = r7.mBaseInnerInsets
 | |
|             r7.mLastBaseInnerInsets = r0
 | |
|             r0 = 1
 | |
|         L4f:
 | |
|             android.graphics.Rect r1 = r7.mLastBaseContentInsets
 | |
|             android.graphics.Rect r2 = r7.mBaseContentInsets
 | |
|             boolean r1 = r1.equals(r2)
 | |
|             if (r1 != 0) goto L61
 | |
|             android.graphics.Rect r0 = r7.mLastBaseContentInsets
 | |
|             android.graphics.Rect r1 = r7.mBaseContentInsets
 | |
|             r0.set(r1)
 | |
|             goto L63
 | |
|         L61:
 | |
|             if (r0 == 0) goto L66
 | |
|         L63:
 | |
|             r7.requestLayout()
 | |
|         L66:
 | |
|             androidx.core.view.WindowInsetsCompat r8 = r8.consumeDisplayCutout()
 | |
|             androidx.core.view.WindowInsetsCompat r8 = r8.consumeSystemWindowInsets()
 | |
|             androidx.core.view.WindowInsetsCompat r8 = r8.consumeStableInsets()
 | |
|             android.view.WindowInsets r8 = r8.toWindowInsets()
 | |
|             return r8
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.appcompat.widget.ActionBarOverlayLayout.onApplyWindowInsets(android.view.WindowInsets):android.view.WindowInsets");
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: protected */
 | |
|     @Override // android.view.ViewGroup
 | |
|     public LayoutParams generateDefaultLayoutParams() {
 | |
|         return new LayoutParams(-1, -1);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public LayoutParams generateLayoutParams(AttributeSet attributeSet) {
 | |
|         return new LayoutParams(getContext(), attributeSet);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams layoutParams) {
 | |
|         return new LayoutParams(layoutParams);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected boolean checkLayoutParams(ViewGroup.LayoutParams layoutParams) {
 | |
|         return layoutParams instanceof LayoutParams;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onMeasure(int i, int i2) {
 | |
|         int measuredHeight;
 | |
|         pullChildren();
 | |
|         measureChildWithMargins(this.mActionBarTop, i, 0, i2, 0);
 | |
|         LayoutParams layoutParams = (LayoutParams) this.mActionBarTop.getLayoutParams();
 | |
|         int max = Math.max(0, this.mActionBarTop.getMeasuredWidth() + layoutParams.leftMargin + layoutParams.rightMargin);
 | |
|         int max2 = Math.max(0, this.mActionBarTop.getMeasuredHeight() + layoutParams.topMargin + layoutParams.bottomMargin);
 | |
|         int combineMeasuredStates = View.combineMeasuredStates(0, this.mActionBarTop.getMeasuredState());
 | |
|         boolean z = (ViewCompat.getWindowSystemUiVisibility(this) & 256) != 0;
 | |
|         if (z) {
 | |
|             measuredHeight = this.mActionBarHeight;
 | |
|             if (this.mHasNonEmbeddedTabs && this.mActionBarTop.getTabContainer() != null) {
 | |
|                 measuredHeight += this.mActionBarHeight;
 | |
|             }
 | |
|         } else {
 | |
|             measuredHeight = this.mActionBarTop.getVisibility() != 8 ? this.mActionBarTop.getMeasuredHeight() : 0;
 | |
|         }
 | |
|         this.mContentInsets.set(this.mBaseContentInsets);
 | |
|         this.mInnerInsets = this.mBaseInnerInsets;
 | |
|         if (!this.mOverlayMode && !z) {
 | |
|             this.mContentInsets.top += measuredHeight;
 | |
|             Rect rect = this.mContentInsets;
 | |
|             rect.bottom = rect.bottom;
 | |
|             this.mInnerInsets = this.mInnerInsets.inset(0, measuredHeight, 0, 0);
 | |
|         } else {
 | |
|             this.mInnerInsets = new WindowInsetsCompat.Builder(this.mInnerInsets).setSystemWindowInsets(Insets.of(this.mInnerInsets.getSystemWindowInsetLeft(), this.mInnerInsets.getSystemWindowInsetTop() + measuredHeight, this.mInnerInsets.getSystemWindowInsetRight(), this.mInnerInsets.getSystemWindowInsetBottom())).build();
 | |
|         }
 | |
|         applyInsets(this.mContent, this.mContentInsets, true, true, true, true);
 | |
|         if (!this.mLastInnerInsets.equals(this.mInnerInsets)) {
 | |
|             WindowInsetsCompat windowInsetsCompat = this.mInnerInsets;
 | |
|             this.mLastInnerInsets = windowInsetsCompat;
 | |
|             ViewCompat.dispatchApplyWindowInsets(this.mContent, windowInsetsCompat);
 | |
|         }
 | |
|         measureChildWithMargins(this.mContent, i, 0, i2, 0);
 | |
|         LayoutParams layoutParams2 = (LayoutParams) this.mContent.getLayoutParams();
 | |
|         int max3 = Math.max(max, this.mContent.getMeasuredWidth() + layoutParams2.leftMargin + layoutParams2.rightMargin);
 | |
|         int max4 = Math.max(max2, this.mContent.getMeasuredHeight() + layoutParams2.topMargin + layoutParams2.bottomMargin);
 | |
|         int combineMeasuredStates2 = View.combineMeasuredStates(combineMeasuredStates, this.mContent.getMeasuredState());
 | |
|         setMeasuredDimension(View.resolveSizeAndState(Math.max(max3 + getPaddingLeft() + getPaddingRight(), getSuggestedMinimumWidth()), i, combineMeasuredStates2), View.resolveSizeAndState(Math.max(max4 + getPaddingTop() + getPaddingBottom(), getSuggestedMinimumHeight()), i2, combineMeasuredStates2 << 16));
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
 | |
|         int childCount = getChildCount();
 | |
|         int paddingLeft = getPaddingLeft();
 | |
|         int paddingTop = getPaddingTop();
 | |
|         for (int i5 = 0; i5 < childCount; i5++) {
 | |
|             View childAt = getChildAt(i5);
 | |
|             if (childAt.getVisibility() != 8) {
 | |
|                 LayoutParams layoutParams = (LayoutParams) childAt.getLayoutParams();
 | |
|                 int measuredWidth = childAt.getMeasuredWidth();
 | |
|                 int measuredHeight = childAt.getMeasuredHeight();
 | |
|                 int i6 = layoutParams.leftMargin + paddingLeft;
 | |
|                 int i7 = layoutParams.topMargin + paddingTop;
 | |
|                 childAt.layout(i6, i7, measuredWidth + i6, measuredHeight + i7);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void draw(Canvas canvas) {
 | |
|         super.draw(canvas);
 | |
|         if (this.mWindowContentOverlay == null || this.mIgnoreWindowContentOverlay) {
 | |
|             return;
 | |
|         }
 | |
|         int bottom = this.mActionBarTop.getVisibility() == 0 ? (int) (this.mActionBarTop.getBottom() + this.mActionBarTop.getTranslationY() + 0.5f) : 0;
 | |
|         this.mWindowContentOverlay.setBounds(0, bottom, getWidth(), this.mWindowContentOverlay.getIntrinsicHeight() + bottom);
 | |
|         this.mWindowContentOverlay.draw(canvas);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent3
 | |
|     public void onNestedScroll(View view, int i, int i2, int i3, int i4, int i5, int[] iArr) {
 | |
|         onNestedScroll(view, i, i2, i3, i4, i5);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent2
 | |
|     public boolean onStartNestedScroll(View view, View view2, int i, int i2) {
 | |
|         return i2 == 0 && onStartNestedScroll(view, view2, i);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent2
 | |
|     public void onNestedScrollAccepted(View view, View view2, int i, int i2) {
 | |
|         if (i2 == 0) {
 | |
|             onNestedScrollAccepted(view, view2, i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent2
 | |
|     public void onStopNestedScroll(View view, int i) {
 | |
|         if (i == 0) {
 | |
|             onStopNestedScroll(view);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent2
 | |
|     public void onNestedScroll(View view, int i, int i2, int i3, int i4, int i5) {
 | |
|         if (i5 == 0) {
 | |
|             onNestedScroll(view, i, i2, i3, i4);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.core.view.NestedScrollingParent2
 | |
|     public void onNestedPreScroll(View view, int i, int i2, int[] iArr, int i3) {
 | |
|         if (i3 == 0) {
 | |
|             onNestedPreScroll(view, i, i2, iArr);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public boolean onStartNestedScroll(View view, View view2, int i) {
 | |
|         if ((i & 2) == 0 || this.mActionBarTop.getVisibility() != 0) {
 | |
|             return false;
 | |
|         }
 | |
|         return this.mHideOnContentScroll;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public void onNestedScrollAccepted(View view, View view2, int i) {
 | |
|         this.mParentHelper.onNestedScrollAccepted(view, view2, i);
 | |
|         this.mHideOnContentScrollReference = getActionBarHideOffset();
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         ActionBarVisibilityCallback actionBarVisibilityCallback = this.mActionBarVisibilityCallback;
 | |
|         if (actionBarVisibilityCallback != null) {
 | |
|             actionBarVisibilityCallback.onContentScrollStarted();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public void onNestedScroll(View view, int i, int i2, int i3, int i4) {
 | |
|         int i5 = this.mHideOnContentScrollReference + i2;
 | |
|         this.mHideOnContentScrollReference = i5;
 | |
|         setActionBarHideOffset(i5);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public void onStopNestedScroll(View view) {
 | |
|         if (this.mHideOnContentScroll && !this.mAnimatingForFling) {
 | |
|             if (this.mHideOnContentScrollReference <= this.mActionBarTop.getHeight()) {
 | |
|                 postRemoveActionBarHideOffset();
 | |
|             } else {
 | |
|                 postAddActionBarHideOffset();
 | |
|             }
 | |
|         }
 | |
|         ActionBarVisibilityCallback actionBarVisibilityCallback = this.mActionBarVisibilityCallback;
 | |
|         if (actionBarVisibilityCallback != null) {
 | |
|             actionBarVisibilityCallback.onContentScrollStopped();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewParent, androidx.core.view.NestedScrollingParent
 | |
|     public boolean onNestedFling(View view, float f, float f2, boolean z) {
 | |
|         if (!this.mHideOnContentScroll || !z) {
 | |
|             return false;
 | |
|         }
 | |
|         if (shouldHideActionBarOnFling(f2)) {
 | |
|             addActionBarHideOffset();
 | |
|         } else {
 | |
|             removeActionBarHideOffset();
 | |
|         }
 | |
|         this.mAnimatingForFling = true;
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, androidx.core.view.NestedScrollingParent
 | |
|     public int getNestedScrollAxes() {
 | |
|         return this.mParentHelper.getNestedScrollAxes();
 | |
|     }
 | |
| 
 | |
|     void pullChildren() {
 | |
|         if (this.mContent == null) {
 | |
|             this.mContent = (ContentFrameLayout) findViewById(R.id.action_bar_activity_content);
 | |
|             this.mActionBarTop = (ActionBarContainer) findViewById(R.id.action_bar_container);
 | |
|             this.mDecorToolbar = getDecorToolbar(findViewById(R.id.action_bar));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Multi-variable type inference failed */
 | |
|     private DecorToolbar getDecorToolbar(View view) {
 | |
|         if (view instanceof DecorToolbar) {
 | |
|             return (DecorToolbar) view;
 | |
|         }
 | |
|         if (view instanceof Toolbar) {
 | |
|             return ((Toolbar) view).getWrapper();
 | |
|         }
 | |
|         throw new IllegalStateException("Can't make a decor toolbar out of " + view.getClass().getSimpleName());
 | |
|     }
 | |
| 
 | |
|     public void setHideOnContentScrollEnabled(boolean z) {
 | |
|         if (z != this.mHideOnContentScroll) {
 | |
|             this.mHideOnContentScroll = z;
 | |
|             if (z) {
 | |
|                 return;
 | |
|             }
 | |
|             haltActionBarHideOffsetAnimations();
 | |
|             setActionBarHideOffset(0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public int getActionBarHideOffset() {
 | |
|         ActionBarContainer actionBarContainer = this.mActionBarTop;
 | |
|         if (actionBarContainer != null) {
 | |
|             return -((int) actionBarContainer.getTranslationY());
 | |
|         }
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     public void setActionBarHideOffset(int i) {
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         this.mActionBarTop.setTranslationY(-Math.max(0, Math.min(i, this.mActionBarTop.getHeight())));
 | |
|     }
 | |
| 
 | |
|     void haltActionBarHideOffsetAnimations() {
 | |
|         removeCallbacks(this.mRemoveActionBarHideOffset);
 | |
|         removeCallbacks(this.mAddActionBarHideOffset);
 | |
|         ViewPropertyAnimator viewPropertyAnimator = this.mCurrentActionBarTopAnimator;
 | |
|         if (viewPropertyAnimator != null) {
 | |
|             viewPropertyAnimator.cancel();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void postRemoveActionBarHideOffset() {
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         postDelayed(this.mRemoveActionBarHideOffset, 600L);
 | |
|     }
 | |
| 
 | |
|     private void postAddActionBarHideOffset() {
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         postDelayed(this.mAddActionBarHideOffset, 600L);
 | |
|     }
 | |
| 
 | |
|     private void removeActionBarHideOffset() {
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         this.mRemoveActionBarHideOffset.run();
 | |
|     }
 | |
| 
 | |
|     private void addActionBarHideOffset() {
 | |
|         haltActionBarHideOffsetAnimations();
 | |
|         this.mAddActionBarHideOffset.run();
 | |
|     }
 | |
| 
 | |
|     private boolean shouldHideActionBarOnFling(float f) {
 | |
|         this.mFlingEstimator.fling(0, 0, 0, (int) f, 0, 0, Integer.MIN_VALUE, Integer.MAX_VALUE);
 | |
|         return this.mFlingEstimator.getFinalY() > this.mActionBarTop.getHeight();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setWindowCallback(Window.Callback callback) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setWindowCallback(callback);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setWindowTitle(CharSequence charSequence) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setWindowTitle(charSequence);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public CharSequence getTitle() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.getTitle();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void initFeature(int i) {
 | |
|         pullChildren();
 | |
|         if (i == 2) {
 | |
|             this.mDecorToolbar.initProgress();
 | |
|         } else if (i == 5) {
 | |
|             this.mDecorToolbar.initIndeterminateProgress();
 | |
|         } else {
 | |
|             if (i != 109) {
 | |
|                 return;
 | |
|             }
 | |
|             setOverlayMode(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean hasIcon() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.hasIcon();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean hasLogo() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.hasLogo();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setIcon(int i) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setIcon(i);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setIcon(Drawable drawable) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setIcon(drawable);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setLogo(int i) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setLogo(i);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean canShowOverflowMenu() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.canShowOverflowMenu();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean isOverflowMenuShowing() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.isOverflowMenuShowing();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean isOverflowMenuShowPending() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.isOverflowMenuShowPending();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean showOverflowMenu() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.showOverflowMenu();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public boolean hideOverflowMenu() {
 | |
|         pullChildren();
 | |
|         return this.mDecorToolbar.hideOverflowMenu();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setMenuPrepared() {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setMenuPrepared();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void setMenu(Menu menu, MenuPresenter.Callback callback) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.setMenu(menu, callback);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void saveToolbarHierarchyState(SparseArray<Parcelable> sparseArray) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.saveHierarchyState(sparseArray);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void restoreToolbarHierarchyState(SparseArray<Parcelable> sparseArray) {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.restoreHierarchyState(sparseArray);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.DecorContentParent
 | |
|     public void dismissPopups() {
 | |
|         pullChildren();
 | |
|         this.mDecorToolbar.dismissPopupMenus();
 | |
|     }
 | |
| 
 | |
|     public static class LayoutParams extends ViewGroup.MarginLayoutParams {
 | |
|         public LayoutParams(Context context, AttributeSet attributeSet) {
 | |
|             super(context, attributeSet);
 | |
|         }
 | |
| 
 | |
|         public LayoutParams(int i, int i2) {
 | |
|             super(i, i2);
 | |
|         }
 | |
| 
 | |
|         public LayoutParams(ViewGroup.LayoutParams layoutParams) {
 | |
|             super(layoutParams);
 | |
|         }
 | |
| 
 | |
|         public LayoutParams(ViewGroup.MarginLayoutParams marginLayoutParams) {
 | |
|             super(marginLayoutParams);
 | |
|         }
 | |
|     }
 | |
| }
 |