package com.google.android.material.carousel; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.accessibility.AccessibilityEvent; import androidx.core.graphics.ColorUtils; import androidx.core.math.MathUtils; import androidx.core.util.Preconditions; import androidx.recyclerview.widget.LinearSmoothScroller; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.R; import com.google.android.material.animation.AnimationUtils; import com.google.android.material.carousel.KeylineState; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; /* loaded from: classes2.dex */ public class CarouselLayoutManager extends RecyclerView.LayoutManager implements Carousel, RecyclerView.SmoothScroller.ScrollVectorProvider { public static final int ALIGNMENT_CENTER = 1; public static final int ALIGNMENT_START = 0; public static final int HORIZONTAL = 0; private static final String TAG = "CarouselLayoutManager"; public static final int VERTICAL = 1; private int carouselAlignment; private CarouselStrategy carouselStrategy; private int currentEstimatedPosition; private int currentFillStartPosition; private KeylineState currentKeylineState; private final DebugItemDecoration debugItemDecoration; private boolean isDebuggingEnabled; private KeylineStateList keylineStateList; private Map keylineStatePositionMap; private int lastItemCount; int maxScroll; int minScroll; private CarouselOrientationHelper orientationHelper; private final View.OnLayoutChangeListener recyclerViewSizeChangeListener; int scrollOffset; private static int calculateShouldScrollBy(int i, int i2, int i3, int i4) { int i5 = i2 + i; return i5 < i3 ? i3 - i2 : i5 > i4 ? i4 - i2 : i; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeHorizontalScrollOffset(RecyclerView.State state) { return this.scrollOffset; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeHorizontalScrollRange(RecyclerView.State state) { return this.maxScroll - this.minScroll; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeVerticalScrollOffset(RecyclerView.State state) { return this.scrollOffset; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeVerticalScrollRange(RecyclerView.State state) { return this.maxScroll - this.minScroll; } @Override // com.google.android.material.carousel.Carousel public int getCarouselAlignment() { return this.carouselAlignment; } /* JADX INFO: Access modifiers changed from: package-private */ /* renamed from: lambda$new$0$com-google-android-material-carousel-CarouselLayoutManager, reason: not valid java name */ public /* synthetic */ void m5485x2ff337cb(View view, int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8) { if (i == i5 && i2 == i6 && i3 == i7 && i4 == i8) { return; } view.post(new Runnable() { // from class: com.google.android.material.carousel.CarouselLayoutManager$$ExternalSyntheticLambda0 @Override // java.lang.Runnable public final void run() { CarouselLayoutManager.this.refreshKeylineState(); } }); } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes2.dex */ public static final class ChildCalculations { final float center; final View child; final float offsetCenter; final KeylineRange range; ChildCalculations(View view, float f, float f2, KeylineRange keylineRange) { this.child = view; this.center = f; this.offsetCenter = f2; this.range = keylineRange; } } public CarouselLayoutManager() { this(new MultiBrowseCarouselStrategy()); } public CarouselLayoutManager(CarouselStrategy carouselStrategy) { this(carouselStrategy, 0); } public CarouselLayoutManager(CarouselStrategy carouselStrategy, int i) { this.isDebuggingEnabled = false; this.debugItemDecoration = new DebugItemDecoration(); this.currentFillStartPosition = 0; this.recyclerViewSizeChangeListener = new View.OnLayoutChangeListener() { // from class: com.google.android.material.carousel.CarouselLayoutManager$$ExternalSyntheticLambda1 @Override // android.view.View.OnLayoutChangeListener public final void onLayoutChange(View view, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) { CarouselLayoutManager.this.m5485x2ff337cb(view, i2, i3, i4, i5, i6, i7, i8, i9); } }; this.currentEstimatedPosition = -1; this.carouselAlignment = 0; setCarouselStrategy(carouselStrategy); setOrientation(i); } public CarouselLayoutManager(Context context, AttributeSet attributeSet, int i, int i2) { this.isDebuggingEnabled = false; this.debugItemDecoration = new DebugItemDecoration(); this.currentFillStartPosition = 0; this.recyclerViewSizeChangeListener = new View.OnLayoutChangeListener() { // from class: com.google.android.material.carousel.CarouselLayoutManager$$ExternalSyntheticLambda1 @Override // android.view.View.OnLayoutChangeListener public final void onLayoutChange(View view, int i22, int i3, int i4, int i5, int i6, int i7, int i8, int i9) { CarouselLayoutManager.this.m5485x2ff337cb(view, i22, i3, i4, i5, i6, i7, i8, i9); } }; this.currentEstimatedPosition = -1; this.carouselAlignment = 0; setCarouselStrategy(new MultiBrowseCarouselStrategy()); setCarouselAttributes(context, attributeSet); } private void setCarouselAttributes(Context context, AttributeSet attributeSet) { if (attributeSet != null) { TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.Carousel); setCarouselAlignment(obtainStyledAttributes.getInt(R.styleable.Carousel_carousel_alignment, 0)); setOrientation(obtainStyledAttributes.getInt(R.styleable.RecyclerView_android_orientation, 0)); obtainStyledAttributes.recycle(); } } public void setCarouselAlignment(int i) { this.carouselAlignment = i; refreshKeylineState(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public RecyclerView.LayoutParams generateDefaultLayoutParams() { return new RecyclerView.LayoutParams(-2, -2); } public void setCarouselStrategy(CarouselStrategy carouselStrategy) { this.carouselStrategy = carouselStrategy; refreshKeylineState(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onAttachedToWindow(RecyclerView recyclerView) { super.onAttachedToWindow(recyclerView); refreshKeylineState(); recyclerView.addOnLayoutChangeListener(this.recyclerViewSizeChangeListener); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onDetachedFromWindow(RecyclerView recyclerView, RecyclerView.Recycler recycler) { super.onDetachedFromWindow(recyclerView, recycler); recyclerView.removeOnLayoutChangeListener(this.recyclerViewSizeChangeListener); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { if (state.getItemCount() <= 0 || getContainerSize() <= 0.0f) { removeAndRecycleAllViews(recycler); this.currentFillStartPosition = 0; return; } boolean isLayoutRtl = isLayoutRtl(); boolean z = this.keylineStateList == null; if (z) { recalculateKeylineStateList(recycler); } int calculateStartScroll = calculateStartScroll(this.keylineStateList); int calculateEndScroll = calculateEndScroll(state, this.keylineStateList); this.minScroll = isLayoutRtl ? calculateEndScroll : calculateStartScroll; if (isLayoutRtl) { calculateEndScroll = calculateStartScroll; } this.maxScroll = calculateEndScroll; if (z) { this.scrollOffset = calculateStartScroll; this.keylineStatePositionMap = this.keylineStateList.getKeylineStateForPositionMap(getItemCount(), this.minScroll, this.maxScroll, isLayoutRtl()); int i = this.currentEstimatedPosition; if (i != -1) { this.scrollOffset = getScrollOffsetForPosition(i, getKeylineStateForPosition(i)); } } int i2 = this.scrollOffset; this.scrollOffset = i2 + calculateShouldScrollBy(0, i2, this.minScroll, this.maxScroll); this.currentFillStartPosition = MathUtils.clamp(this.currentFillStartPosition, 0, state.getItemCount()); updateCurrentKeylineStateForScrollOffset(this.keylineStateList); detachAndScrapAttachedViews(recycler); fill(recycler, state); this.lastItemCount = getItemCount(); } private void recalculateKeylineStateList(RecyclerView.Recycler recycler) { View viewForPosition = recycler.getViewForPosition(0); measureChildWithMargins(viewForPosition, 0, 0); KeylineState onFirstChildMeasuredWithMargins = this.carouselStrategy.onFirstChildMeasuredWithMargins(this, viewForPosition); if (isLayoutRtl()) { onFirstChildMeasuredWithMargins = KeylineState.reverse(onFirstChildMeasuredWithMargins, getContainerSize()); } this.keylineStateList = KeylineStateList.from(this, onFirstChildMeasuredWithMargins); } /* JADX INFO: Access modifiers changed from: private */ public void refreshKeylineState() { this.keylineStateList = null; requestLayout(); } private void fill(RecyclerView.Recycler recycler, RecyclerView.State state) { removeAndRecycleOutOfBoundsViews(recycler); if (getChildCount() == 0) { addViewsStart(recycler, this.currentFillStartPosition - 1); addViewsEnd(recycler, state, this.currentFillStartPosition); } else { int position = getPosition(getChildAt(0)); int position2 = getPosition(getChildAt(getChildCount() - 1)); addViewsStart(recycler, position - 1); addViewsEnd(recycler, state, position2 + 1); } validateChildOrderIfDebugging(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onLayoutCompleted(RecyclerView.State state) { super.onLayoutCompleted(state); if (getChildCount() == 0) { this.currentFillStartPosition = 0; } else { this.currentFillStartPosition = getPosition(getChildAt(0)); } validateChildOrderIfDebugging(); } private void addViewsStart(RecyclerView.Recycler recycler, int i) { float calculateChildStartForFill = calculateChildStartForFill(i); while (i >= 0) { ChildCalculations makeChildCalculations = makeChildCalculations(recycler, calculateChildStartForFill, i); if (isLocOffsetOutOfFillBoundsStart(makeChildCalculations.offsetCenter, makeChildCalculations.range)) { return; } calculateChildStartForFill = addStart(calculateChildStartForFill, this.currentKeylineState.getItemSize()); if (!isLocOffsetOutOfFillBoundsEnd(makeChildCalculations.offsetCenter, makeChildCalculations.range)) { addAndLayoutView(makeChildCalculations.child, 0, makeChildCalculations); } i--; } } private void addViewAtPosition(RecyclerView.Recycler recycler, int i, int i2) { if (i < 0 || i >= getItemCount()) { return; } ChildCalculations makeChildCalculations = makeChildCalculations(recycler, calculateChildStartForFill(i), i); addAndLayoutView(makeChildCalculations.child, i2, makeChildCalculations); } private void addViewsEnd(RecyclerView.Recycler recycler, RecyclerView.State state, int i) { float calculateChildStartForFill = calculateChildStartForFill(i); while (i < state.getItemCount()) { ChildCalculations makeChildCalculations = makeChildCalculations(recycler, calculateChildStartForFill, i); if (isLocOffsetOutOfFillBoundsEnd(makeChildCalculations.offsetCenter, makeChildCalculations.range)) { return; } calculateChildStartForFill = addEnd(calculateChildStartForFill, this.currentKeylineState.getItemSize()); if (!isLocOffsetOutOfFillBoundsStart(makeChildCalculations.offsetCenter, makeChildCalculations.range)) { addAndLayoutView(makeChildCalculations.child, -1, makeChildCalculations); } i++; } } private void logChildrenIfDebugging() { if (this.isDebuggingEnabled && Log.isLoggable(TAG, 3)) { Log.d(TAG, "internal representation of views on the screen"); for (int i = 0; i < getChildCount(); i++) { View childAt = getChildAt(i); Log.d(TAG, "item position " + getPosition(childAt) + ", center:" + getDecoratedCenterWithMargins(childAt) + ", child index:" + i); } Log.d(TAG, "=============="); } } private void validateChildOrderIfDebugging() { if (!this.isDebuggingEnabled || getChildCount() < 1) { return; } int i = 0; while (i < getChildCount() - 1) { int position = getPosition(getChildAt(i)); int i2 = i + 1; int position2 = getPosition(getChildAt(i2)); if (position > position2) { logChildrenIfDebugging(); throw new IllegalStateException("Detected invalid child order. Child at index [" + i + "] had adapter position [" + position + "] and child at index [" + i2 + "] had adapter position [" + position2 + "]."); } i = i2; } } private ChildCalculations makeChildCalculations(RecyclerView.Recycler recycler, float f, int i) { View viewForPosition = recycler.getViewForPosition(i); measureChildWithMargins(viewForPosition, 0, 0); float addEnd = addEnd(f, this.currentKeylineState.getItemSize() / 2.0f); KeylineRange surroundingKeylineRange = getSurroundingKeylineRange(this.currentKeylineState.getKeylines(), addEnd, false); return new ChildCalculations(viewForPosition, addEnd, calculateChildOffsetCenterForLocation(viewForPosition, addEnd, surroundingKeylineRange), surroundingKeylineRange); } private void addAndLayoutView(View view, int i, ChildCalculations childCalculations) { float itemSize = this.currentKeylineState.getItemSize() / 2.0f; addView(view, i); this.orientationHelper.layoutDecoratedWithMargins(view, (int) (childCalculations.offsetCenter - itemSize), (int) (childCalculations.offsetCenter + itemSize)); updateChildMaskForLocation(view, childCalculations.center, childCalculations.range); } private boolean isLocOffsetOutOfFillBoundsStart(float f, KeylineRange keylineRange) { float addEnd = addEnd(f, getMaskedItemSizeForLocOffset(f, keylineRange) / 2.0f); if (isLayoutRtl()) { if (addEnd > getContainerSize()) { return true; } } else if (addEnd < 0.0f) { return true; } return false; } @Override // com.google.android.material.carousel.Carousel public boolean isHorizontal() { return this.orientationHelper.orientation == 0; } private boolean isLocOffsetOutOfFillBoundsEnd(float f, KeylineRange keylineRange) { float addStart = addStart(f, getMaskedItemSizeForLocOffset(f, keylineRange) / 2.0f); if (isLayoutRtl()) { if (addStart < 0.0f) { return true; } } else if (addStart > getContainerSize()) { return true; } return false; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void getDecoratedBoundsWithMargins(View view, Rect rect) { super.getDecoratedBoundsWithMargins(view, rect); float centerY = rect.centerY(); if (isHorizontal()) { centerY = rect.centerX(); } float maskedItemSizeForLocOffset = getMaskedItemSizeForLocOffset(centerY, getSurroundingKeylineRange(this.currentKeylineState.getKeylines(), centerY, true)); float width = isHorizontal() ? (rect.width() - maskedItemSizeForLocOffset) / 2.0f : 0.0f; float height = isHorizontal() ? 0.0f : (rect.height() - maskedItemSizeForLocOffset) / 2.0f; rect.set((int) (rect.left + width), (int) (rect.top + height), (int) (rect.right - width), (int) (rect.bottom - height)); } private float getDecoratedCenterWithMargins(View view) { int centerY; Rect rect = new Rect(); super.getDecoratedBoundsWithMargins(view, rect); if (isHorizontal()) { centerY = rect.centerX(); } else { centerY = rect.centerY(); } return centerY; } private void removeAndRecycleOutOfBoundsViews(RecyclerView.Recycler recycler) { while (getChildCount() > 0) { View childAt = getChildAt(0); float decoratedCenterWithMargins = getDecoratedCenterWithMargins(childAt); if (!isLocOffsetOutOfFillBoundsStart(decoratedCenterWithMargins, getSurroundingKeylineRange(this.currentKeylineState.getKeylines(), decoratedCenterWithMargins, true))) { break; } else { removeAndRecycleView(childAt, recycler); } } while (getChildCount() - 1 >= 0) { View childAt2 = getChildAt(getChildCount() - 1); float decoratedCenterWithMargins2 = getDecoratedCenterWithMargins(childAt2); if (!isLocOffsetOutOfFillBoundsEnd(decoratedCenterWithMargins2, getSurroundingKeylineRange(this.currentKeylineState.getKeylines(), decoratedCenterWithMargins2, true))) { return; } else { removeAndRecycleView(childAt2, recycler); } } } private static KeylineRange getSurroundingKeylineRange(List list, float f, boolean z) { float f2 = Float.MAX_VALUE; int i = -1; int i2 = -1; int i3 = -1; int i4 = -1; float f3 = -3.4028235E38f; float f4 = Float.MAX_VALUE; float f5 = Float.MAX_VALUE; for (int i5 = 0; i5 < list.size(); i5++) { KeylineState.Keyline keyline = list.get(i5); float f6 = z ? keyline.locOffset : keyline.loc; float abs = Math.abs(f6 - f); if (f6 <= f && abs <= f2) { i = i5; f2 = abs; } if (f6 > f && abs <= f4) { i3 = i5; f4 = abs; } if (f6 <= f5) { i2 = i5; f5 = f6; } if (f6 > f3) { i4 = i5; f3 = f6; } } if (i == -1) { i = i2; } if (i3 == -1) { i3 = i4; } return new KeylineRange(list.get(i), list.get(i3)); } private void updateCurrentKeylineStateForScrollOffset(KeylineStateList keylineStateList) { int i = this.maxScroll; int i2 = this.minScroll; if (i <= i2) { this.currentKeylineState = isLayoutRtl() ? keylineStateList.getEndState() : keylineStateList.getStartState(); } else { this.currentKeylineState = keylineStateList.getShiftedState(this.scrollOffset, i2, i); } this.debugItemDecoration.setKeylines(this.currentKeylineState.getKeylines()); } private int calculateStartScroll(KeylineStateList keylineStateList) { boolean isLayoutRtl = isLayoutRtl(); KeylineState endState = isLayoutRtl ? keylineStateList.getEndState() : keylineStateList.getStartState(); return (int) (((getPaddingStart() * (isLayoutRtl ? 1 : -1)) + getParentStart()) - addStart((isLayoutRtl ? endState.getLastFocalKeyline() : endState.getFirstFocalKeyline()).loc, endState.getItemSize() / 2.0f)); } private int calculateEndScroll(RecyclerView.State state, KeylineStateList keylineStateList) { boolean isLayoutRtl = isLayoutRtl(); KeylineState startState = isLayoutRtl ? keylineStateList.getStartState() : keylineStateList.getEndState(); KeylineState.Keyline firstFocalKeyline = isLayoutRtl ? startState.getFirstFocalKeyline() : startState.getLastFocalKeyline(); int itemCount = (int) ((((((state.getItemCount() - 1) * startState.getItemSize()) + getPaddingEnd()) * (isLayoutRtl ? -1.0f : 1.0f)) - (firstFocalKeyline.loc - getParentStart())) + (getParentEnd() - firstFocalKeyline.loc)); return isLayoutRtl ? Math.min(0, itemCount) : Math.max(0, itemCount); } private float calculateChildStartForFill(int i) { return addEnd(getParentStart() - this.scrollOffset, this.currentKeylineState.getItemSize() * i); } private float calculateChildOffsetCenterForLocation(View view, float f, KeylineRange keylineRange) { float lerp = AnimationUtils.lerp(keylineRange.leftOrTop.locOffset, keylineRange.rightOrBottom.locOffset, keylineRange.leftOrTop.loc, keylineRange.rightOrBottom.loc, f); if (keylineRange.rightOrBottom != this.currentKeylineState.getFirstKeyline() && keylineRange.leftOrTop != this.currentKeylineState.getLastKeyline()) { return lerp; } return lerp + ((f - keylineRange.rightOrBottom.loc) * ((1.0f - keylineRange.rightOrBottom.mask) + (this.orientationHelper.getMaskMargins((RecyclerView.LayoutParams) view.getLayoutParams()) / this.currentKeylineState.getItemSize()))); } private float getMaskedItemSizeForLocOffset(float f, KeylineRange keylineRange) { return AnimationUtils.lerp(keylineRange.leftOrTop.maskedItemSize, keylineRange.rightOrBottom.maskedItemSize, keylineRange.leftOrTop.locOffset, keylineRange.rightOrBottom.locOffset, f); } /* JADX WARN: Multi-variable type inference failed */ private void updateChildMaskForLocation(View view, float f, KeylineRange keylineRange) { if (view instanceof Maskable) { float lerp = AnimationUtils.lerp(keylineRange.leftOrTop.mask, keylineRange.rightOrBottom.mask, keylineRange.leftOrTop.loc, keylineRange.rightOrBottom.loc, f); float height = view.getHeight(); float width = view.getWidth(); RectF maskRect = this.orientationHelper.getMaskRect(height, width, AnimationUtils.lerp(0.0f, height / 2.0f, 0.0f, 1.0f, lerp), AnimationUtils.lerp(0.0f, width / 2.0f, 0.0f, 1.0f, lerp)); float calculateChildOffsetCenterForLocation = calculateChildOffsetCenterForLocation(view, f, keylineRange); RectF rectF = new RectF(calculateChildOffsetCenterForLocation - (maskRect.width() / 2.0f), calculateChildOffsetCenterForLocation - (maskRect.height() / 2.0f), calculateChildOffsetCenterForLocation + (maskRect.width() / 2.0f), (maskRect.height() / 2.0f) + calculateChildOffsetCenterForLocation); RectF rectF2 = new RectF(getParentLeft(), getParentTop(), getParentRight(), getParentBottom()); if (this.carouselStrategy.isContained()) { this.orientationHelper.containMaskWithinBounds(maskRect, rectF, rectF2); } this.orientationHelper.moveMaskOnEdgeOutsideBounds(maskRect, rectF, rectF2); ((Maskable) view).setMaskRectF(maskRect); } } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void measureChildWithMargins(View view, int i, int i2) { float f; float f2; if (!(view instanceof Maskable)) { throw new IllegalStateException("All children of a RecyclerView using CarouselLayoutManager must use MaskableFrameLayout as their root ViewGroup."); } RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); Rect rect = new Rect(); calculateItemDecorationsForChild(view, rect); int i3 = i + rect.left + rect.right; int i4 = i2 + rect.top + rect.bottom; if (this.keylineStateList != null && this.orientationHelper.orientation == 0) { f = this.keylineStateList.getDefaultState().getItemSize(); } else { f = layoutParams.width; } if (this.keylineStateList != null && this.orientationHelper.orientation == 1) { f2 = this.keylineStateList.getDefaultState().getItemSize(); } else { f2 = layoutParams.height; } view.measure(getChildMeasureSpec(getWidth(), getWidthMode(), getPaddingLeft() + getPaddingRight() + layoutParams.leftMargin + layoutParams.rightMargin + i3, (int) f, canScrollHorizontally()), getChildMeasureSpec(getHeight(), getHeightMode(), getPaddingTop() + getPaddingBottom() + layoutParams.topMargin + layoutParams.bottomMargin + i4, (int) f2, canScrollVertically())); } /* JADX INFO: Access modifiers changed from: private */ public int getParentLeft() { return this.orientationHelper.getParentLeft(); } private int getParentStart() { return this.orientationHelper.getParentStart(); } /* JADX INFO: Access modifiers changed from: private */ public int getParentRight() { return this.orientationHelper.getParentRight(); } private int getParentEnd() { return this.orientationHelper.getParentEnd(); } /* JADX INFO: Access modifiers changed from: private */ public int getParentTop() { return this.orientationHelper.getParentTop(); } /* JADX INFO: Access modifiers changed from: private */ public int getParentBottom() { return this.orientationHelper.getParentBottom(); } @Override // com.google.android.material.carousel.Carousel public int getContainerWidth() { return getWidth(); } @Override // com.google.android.material.carousel.Carousel public int getContainerHeight() { return getHeight(); } private int getContainerSize() { if (isHorizontal()) { return getContainerWidth(); } return getContainerHeight(); } /* JADX INFO: Access modifiers changed from: package-private */ public boolean isLayoutRtl() { return isHorizontal() && getLayoutDirection() == 1; } private float addStart(float f, float f2) { return isLayoutRtl() ? f + f2 : f - f2; } private float addEnd(float f, float f2) { return isLayoutRtl() ? f - f2 : f + f2; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onInitializeAccessibilityEvent(AccessibilityEvent accessibilityEvent) { super.onInitializeAccessibilityEvent(accessibilityEvent); if (getChildCount() > 0) { accessibilityEvent.setFromIndex(getPosition(getChildAt(0))); accessibilityEvent.setToIndex(getPosition(getChildAt(getChildCount() - 1))); } } private int getScrollOffsetForPosition(int i, KeylineState keylineState) { float itemSize; if (isLayoutRtl()) { itemSize = ((getContainerSize() - keylineState.getLastFocalKeyline().loc) - (i * keylineState.getItemSize())) - (keylineState.getItemSize() / 2.0f); } else { itemSize = ((i * keylineState.getItemSize()) - keylineState.getFirstFocalKeyline().loc) + (keylineState.getItemSize() / 2.0f); } return (int) itemSize; } private int getSmallestScrollOffsetToFocalKeyline(int i, KeylineState keylineState) { int i2; int i3 = Integer.MAX_VALUE; for (KeylineState.Keyline keyline : keylineState.getFocalKeylines()) { float itemSize = (i * keylineState.getItemSize()) + (keylineState.getItemSize() / 2.0f); if (isLayoutRtl()) { i2 = (int) ((getContainerSize() - keyline.loc) - itemSize); } else { i2 = (int) (itemSize - keyline.loc); } int i4 = i2 - this.scrollOffset; if (Math.abs(i3) > Math.abs(i4)) { i3 = i4; } } return i3; } @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider public PointF computeScrollVectorForPosition(int i) { if (this.keylineStateList == null) { return null; } int offsetToScrollToPosition = getOffsetToScrollToPosition(i, getKeylineStateForPosition(i)); if (isHorizontal()) { return new PointF(offsetToScrollToPosition, 0.0f); } return new PointF(0.0f, offsetToScrollToPosition); } int getOffsetToScrollToPosition(int i, KeylineState keylineState) { return getScrollOffsetForPosition(i, keylineState) - this.scrollOffset; } /* JADX INFO: Access modifiers changed from: package-private */ public int getOffsetToScrollToPositionForSnap(int i, boolean z) { int offsetToScrollToPosition = getOffsetToScrollToPosition(i, this.keylineStateList.getShiftedState(this.scrollOffset, this.minScroll, this.maxScroll, true)); int offsetToScrollToPosition2 = this.keylineStatePositionMap != null ? getOffsetToScrollToPosition(i, getKeylineStateForPosition(i)) : offsetToScrollToPosition; return (!z || Math.abs(offsetToScrollToPosition2) >= Math.abs(offsetToScrollToPosition)) ? offsetToScrollToPosition : offsetToScrollToPosition2; } private KeylineState getKeylineStateForPosition(int i) { KeylineState keylineState; Map map = this.keylineStatePositionMap; return (map == null || (keylineState = map.get(Integer.valueOf(MathUtils.clamp(i, 0, Math.max(0, getItemCount() + (-1)))))) == null) ? this.keylineStateList.getDefaultState() : keylineState; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void scrollToPosition(int i) { this.currentEstimatedPosition = i; if (this.keylineStateList == null) { return; } this.scrollOffset = getScrollOffsetForPosition(i, getKeylineStateForPosition(i)); this.currentFillStartPosition = MathUtils.clamp(i, 0, Math.max(0, getItemCount() - 1)); updateCurrentKeylineStateForScrollOffset(this.keylineStateList); requestLayout(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int i) { LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) { // from class: com.google.android.material.carousel.CarouselLayoutManager.1 @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller public PointF computeScrollVectorForPosition(int i2) { return CarouselLayoutManager.this.computeScrollVectorForPosition(i2); } @Override // androidx.recyclerview.widget.LinearSmoothScroller public int calculateDxToMakeVisible(View view, int i2) { if (CarouselLayoutManager.this.keylineStateList == null || !CarouselLayoutManager.this.isHorizontal()) { return 0; } CarouselLayoutManager carouselLayoutManager = CarouselLayoutManager.this; return carouselLayoutManager.calculateScrollDeltaToMakePositionVisible(carouselLayoutManager.getPosition(view)); } @Override // androidx.recyclerview.widget.LinearSmoothScroller public int calculateDyToMakeVisible(View view, int i2) { if (CarouselLayoutManager.this.keylineStateList == null || CarouselLayoutManager.this.isHorizontal()) { return 0; } CarouselLayoutManager carouselLayoutManager = CarouselLayoutManager.this; return carouselLayoutManager.calculateScrollDeltaToMakePositionVisible(carouselLayoutManager.getPosition(view)); } }; linearSmoothScroller.setTargetPosition(i); startSmoothScroll(linearSmoothScroller); } int calculateScrollDeltaToMakePositionVisible(int i) { return (int) (this.scrollOffset - getScrollOffsetForPosition(i, getKeylineStateForPosition(i))); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public boolean canScrollHorizontally() { return isHorizontal(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int scrollHorizontallyBy(int i, RecyclerView.Recycler recycler, RecyclerView.State state) { if (canScrollHorizontally()) { return scrollBy(i, recycler, state); } return 0; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public boolean canScrollVertically() { return !isHorizontal(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int scrollVerticallyBy(int i, RecyclerView.Recycler recycler, RecyclerView.State state) { if (canScrollVertically()) { return scrollBy(i, recycler, state); } return 0; } /* loaded from: classes2.dex */ private static class LayoutDirection { private static final int INVALID_LAYOUT = Integer.MIN_VALUE; private static final int LAYOUT_END = 1; private static final int LAYOUT_START = -1; private LayoutDirection() { } } private int convertFocusDirectionToLayoutDirection(int i) { int orientation = getOrientation(); if (i == 1) { return -1; } if (i == 2) { return 1; } if (i == 17) { if (orientation == 0) { return isLayoutRtl() ? 1 : -1; } return Integer.MIN_VALUE; } if (i == 33) { return orientation == 1 ? -1 : Integer.MIN_VALUE; } if (i == 66) { if (orientation == 0) { return isLayoutRtl() ? -1 : 1; } return Integer.MIN_VALUE; } if (i == 130) { return orientation == 1 ? 1 : Integer.MIN_VALUE; } Log.d(TAG, "Unknown focus request:" + i); return Integer.MIN_VALUE; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public View onFocusSearchFailed(View view, int i, RecyclerView.Recycler recycler, RecyclerView.State state) { int convertFocusDirectionToLayoutDirection; if (getChildCount() == 0 || (convertFocusDirectionToLayoutDirection = convertFocusDirectionToLayoutDirection(i)) == Integer.MIN_VALUE) { return null; } if (convertFocusDirectionToLayoutDirection == -1) { if (getPosition(view) == 0) { return null; } addViewAtPosition(recycler, getPosition(getChildAt(0)) - 1, 0); return getChildClosestToStart(); } if (getPosition(view) == getItemCount() - 1) { return null; } addViewAtPosition(recycler, getPosition(getChildAt(getChildCount() - 1)) + 1, -1); return getChildClosestToEnd(); } private View getChildClosestToStart() { return getChildAt(isLayoutRtl() ? getChildCount() - 1 : 0); } private View getChildClosestToEnd() { return getChildAt(isLayoutRtl() ? 0 : getChildCount() - 1); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public boolean requestChildRectangleOnScreen(RecyclerView recyclerView, View view, Rect rect, boolean z, boolean z2) { int smallestScrollOffsetToFocalKeyline; if (this.keylineStateList == null || (smallestScrollOffsetToFocalKeyline = getSmallestScrollOffsetToFocalKeyline(getPosition(view), getKeylineStateForPosition(getPosition(view)))) == 0) { return false; } scrollBy(recyclerView, getSmallestScrollOffsetToFocalKeyline(getPosition(view), this.keylineStateList.getShiftedState(this.scrollOffset + calculateShouldScrollBy(smallestScrollOffsetToFocalKeyline, this.scrollOffset, this.minScroll, this.maxScroll), this.minScroll, this.maxScroll))); return true; } private void scrollBy(RecyclerView recyclerView, int i) { if (isHorizontal()) { recyclerView.scrollBy(i, 0); } else { recyclerView.scrollBy(0, i); } } private int scrollBy(int i, RecyclerView.Recycler recycler, RecyclerView.State state) { float f; if (getChildCount() == 0 || i == 0) { return 0; } if (this.keylineStateList == null) { recalculateKeylineStateList(recycler); } int calculateShouldScrollBy = calculateShouldScrollBy(i, this.scrollOffset, this.minScroll, this.maxScroll); this.scrollOffset += calculateShouldScrollBy; updateCurrentKeylineStateForScrollOffset(this.keylineStateList); float itemSize = this.currentKeylineState.getItemSize() / 2.0f; float calculateChildStartForFill = calculateChildStartForFill(getPosition(getChildAt(0))); Rect rect = new Rect(); if (isLayoutRtl()) { f = this.currentKeylineState.getLastFocalKeyline().locOffset; } else { f = this.currentKeylineState.getFirstFocalKeyline().locOffset; } float f2 = Float.MAX_VALUE; for (int i2 = 0; i2 < getChildCount(); i2++) { View childAt = getChildAt(i2); float abs = Math.abs(f - offsetChild(childAt, calculateChildStartForFill, itemSize, rect)); if (childAt != null && abs < f2) { this.currentEstimatedPosition = getPosition(childAt); f2 = abs; } calculateChildStartForFill = addEnd(calculateChildStartForFill, this.currentKeylineState.getItemSize()); } fill(recycler, state); return calculateShouldScrollBy; } private float offsetChild(View view, float f, float f2, Rect rect) { float addEnd = addEnd(f, f2); KeylineRange surroundingKeylineRange = getSurroundingKeylineRange(this.currentKeylineState.getKeylines(), addEnd, false); float calculateChildOffsetCenterForLocation = calculateChildOffsetCenterForLocation(view, addEnd, surroundingKeylineRange); super.getDecoratedBoundsWithMargins(view, rect); updateChildMaskForLocation(view, addEnd, surroundingKeylineRange); this.orientationHelper.offsetChild(view, rect, f2, calculateChildOffsetCenterForLocation); return calculateChildOffsetCenterForLocation; } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeHorizontalScrollExtent(RecyclerView.State state) { if (getChildCount() == 0 || this.keylineStateList == null || getItemCount() <= 1) { return 0; } return (int) (getWidth() * (this.keylineStateList.getDefaultState().getItemSize() / computeHorizontalScrollRange(state))); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public int computeVerticalScrollExtent(RecyclerView.State state) { if (getChildCount() == 0 || this.keylineStateList == null || getItemCount() <= 1) { return 0; } return (int) (getHeight() * (this.keylineStateList.getDefaultState().getItemSize() / computeVerticalScrollRange(state))); } public int getOrientation() { return this.orientationHelper.orientation; } public void setOrientation(int i) { if (i != 0 && i != 1) { throw new IllegalArgumentException("invalid orientation:" + i); } assertNotInLayoutOrScroll(null); CarouselOrientationHelper carouselOrientationHelper = this.orientationHelper; if (carouselOrientationHelper == null || i != carouselOrientationHelper.orientation) { this.orientationHelper = CarouselOrientationHelper.createOrientationHelper(this, i); refreshKeylineState(); } } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onItemsAdded(RecyclerView recyclerView, int i, int i2) { super.onItemsAdded(recyclerView, i, i2); updateItemCount(); } @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager public void onItemsRemoved(RecyclerView recyclerView, int i, int i2) { super.onItemsRemoved(recyclerView, i, i2); updateItemCount(); } private void updateItemCount() { int itemCount = getItemCount(); int i = this.lastItemCount; if (itemCount == i || this.keylineStateList == null) { return; } if (this.carouselStrategy.shouldRefreshKeylineState(this, i)) { refreshKeylineState(); } this.lastItemCount = itemCount; } public void setDebuggingEnabled(RecyclerView recyclerView, boolean z) { this.isDebuggingEnabled = z; recyclerView.removeItemDecoration(this.debugItemDecoration); if (z) { recyclerView.addItemDecoration(this.debugItemDecoration); } recyclerView.invalidateItemDecorations(); } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes2.dex */ public static class KeylineRange { final KeylineState.Keyline leftOrTop; final KeylineState.Keyline rightOrBottom; KeylineRange(KeylineState.Keyline keyline, KeylineState.Keyline keyline2) { Preconditions.checkArgument(keyline.loc <= keyline2.loc); this.leftOrTop = keyline; this.rightOrBottom = keyline2; } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes2.dex */ public static class DebugItemDecoration extends RecyclerView.ItemDecoration { private List keylines; private final Paint linePaint; DebugItemDecoration() { Paint paint = new Paint(); this.linePaint = paint; this.keylines = Collections.unmodifiableList(new ArrayList()); paint.setStrokeWidth(5.0f); paint.setColor(-65281); } void setKeylines(List list) { this.keylines = Collections.unmodifiableList(list); } @Override // androidx.recyclerview.widget.RecyclerView.ItemDecoration public void onDrawOver(Canvas canvas, RecyclerView recyclerView, RecyclerView.State state) { super.onDrawOver(canvas, recyclerView, state); this.linePaint.setStrokeWidth(recyclerView.getResources().getDimension(R.dimen.m3_carousel_debug_keyline_width)); for (KeylineState.Keyline keyline : this.keylines) { this.linePaint.setColor(ColorUtils.blendARGB(-65281, -16776961, keyline.mask)); if (((CarouselLayoutManager) recyclerView.getLayoutManager()).isHorizontal()) { canvas.drawLine(keyline.locOffset, ((CarouselLayoutManager) recyclerView.getLayoutManager()).getParentTop(), keyline.locOffset, ((CarouselLayoutManager) recyclerView.getLayoutManager()).getParentBottom(), this.linePaint); } else { canvas.drawLine(((CarouselLayoutManager) recyclerView.getLayoutManager()).getParentLeft(), keyline.locOffset, ((CarouselLayoutManager) recyclerView.getLayoutManager()).getParentRight(), keyline.locOffset, this.linePaint); } } } } }