package com.google.android.material.carousel; import com.google.android.material.animation.AnimationUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* loaded from: classes.dex */ final class KeylineState { private final int firstFocalKeylineIndex; private final float itemSize; private final List keylines; private final int lastFocalKeylineIndex; int getFirstFocalKeylineIndex() { return this.firstFocalKeylineIndex; } float getItemSize() { return this.itemSize; } List getKeylines() { return this.keylines; } int getLastFocalKeylineIndex() { return this.lastFocalKeylineIndex; } private KeylineState(float f, List list, int i, int i2) { this.itemSize = f; this.keylines = Collections.unmodifiableList(list); this.firstFocalKeylineIndex = i; this.lastFocalKeylineIndex = i2; } Keyline getFirstFocalKeyline() { return this.keylines.get(this.firstFocalKeylineIndex); } Keyline getLastFocalKeyline() { return this.keylines.get(this.lastFocalKeylineIndex); } List getFocalKeylines() { return this.keylines.subList(this.firstFocalKeylineIndex, this.lastFocalKeylineIndex + 1); } Keyline getFirstKeyline() { return this.keylines.get(0); } Keyline getLastKeyline() { return this.keylines.get(r0.size() - 1); } Keyline getFirstNonAnchorKeyline() { for (int i = 0; i < this.keylines.size(); i++) { Keyline keyline = this.keylines.get(i); if (!keyline.isAnchor) { return keyline; } } return null; } Keyline getLastNonAnchorKeyline() { for (int size = this.keylines.size() - 1; size >= 0; size--) { Keyline keyline = this.keylines.get(size); if (!keyline.isAnchor) { return keyline; } } return null; } static KeylineState lerp(KeylineState keylineState, KeylineState keylineState2, float f) { if (keylineState.getItemSize() != keylineState2.getItemSize()) { throw new IllegalArgumentException("Keylines being linearly interpolated must have the same item size."); } List keylines = keylineState.getKeylines(); List keylines2 = keylineState2.getKeylines(); if (keylines.size() != keylines2.size()) { throw new IllegalArgumentException("Keylines being linearly interpolated must have the same number of keylines."); } ArrayList arrayList = new ArrayList(); for (int i = 0; i < keylineState.getKeylines().size(); i++) { arrayList.add(Keyline.lerp(keylines.get(i), keylines2.get(i), f)); } return new KeylineState(keylineState.getItemSize(), arrayList, AnimationUtils.lerp(keylineState.getFirstFocalKeylineIndex(), keylineState2.getFirstFocalKeylineIndex(), f), AnimationUtils.lerp(keylineState.getLastFocalKeylineIndex(), keylineState2.getLastFocalKeylineIndex(), f)); } static KeylineState reverse(KeylineState keylineState, float f) { Builder builder = new Builder(keylineState.getItemSize(), f); float f2 = (f - keylineState.getLastKeyline().locOffset) - (keylineState.getLastKeyline().maskedItemSize / 2.0f); int size = keylineState.getKeylines().size() - 1; while (size >= 0) { Keyline keyline = keylineState.getKeylines().get(size); builder.addKeyline(f2 + (keyline.maskedItemSize / 2.0f), keyline.mask, keyline.maskedItemSize, size >= keylineState.getFirstFocalKeylineIndex() && size <= keylineState.getLastFocalKeylineIndex(), keyline.isAnchor); f2 += keyline.maskedItemSize; size--; } return builder.build(); } static final class Builder { private static final int NO_INDEX = -1; private static final float UNKNOWN_LOC = Float.MIN_VALUE; private final float availableSpace; private final float itemSize; private Keyline tmpFirstFocalKeyline; private Keyline tmpLastFocalKeyline; private final List tmpKeylines = new ArrayList(); private int firstFocalKeylineIndex = -1; private int lastFocalKeylineIndex = -1; private float lastKeylineMaskedSize = 0.0f; private int latestAnchorKeylineIndex = -1; private static float calculateKeylineLocationForItemPosition(float f, float f2, int i, int i2) { return (f - (i * f2)) + (i2 * f2); } Builder(float f, float f2) { this.itemSize = f; this.availableSpace = f2; } Builder addKeyline(float f, float f2, float f3, boolean z) { return addKeyline(f, f2, f3, z, false); } Builder addKeyline(float f, float f2, float f3) { return addKeyline(f, f2, f3, false); } Builder addKeyline(float f, float f2, float f3, boolean z, boolean z2, float f4) { if (f3 <= 0.0f) { return this; } if (z2) { if (z) { throw new IllegalArgumentException("Anchor keylines cannot be focal."); } int i = this.latestAnchorKeylineIndex; if (i != -1 && i != 0) { throw new IllegalArgumentException("Anchor keylines must be either the first or last keyline."); } this.latestAnchorKeylineIndex = this.tmpKeylines.size(); } Keyline keyline = new Keyline(Float.MIN_VALUE, f, f2, f3, z2, f4); if (z) { if (this.tmpFirstFocalKeyline == null) { this.tmpFirstFocalKeyline = keyline; this.firstFocalKeylineIndex = this.tmpKeylines.size(); } if (this.lastFocalKeylineIndex != -1 && this.tmpKeylines.size() - this.lastFocalKeylineIndex > 1) { throw new IllegalArgumentException("Keylines marked as focal must be placed next to each other. There cannot be non-focal keylines between focal keylines."); } if (f3 != this.tmpFirstFocalKeyline.maskedItemSize) { throw new IllegalArgumentException("Keylines that are marked as focal must all have the same masked item size."); } this.tmpLastFocalKeyline = keyline; this.lastFocalKeylineIndex = this.tmpKeylines.size(); } else { if (this.tmpFirstFocalKeyline == null && keyline.maskedItemSize < this.lastKeylineMaskedSize) { throw new IllegalArgumentException("Keylines before the first focal keyline must be ordered by incrementing masked item size."); } if (this.tmpLastFocalKeyline != null && keyline.maskedItemSize > this.lastKeylineMaskedSize) { throw new IllegalArgumentException("Keylines after the last focal keyline must be ordered by decreasing masked item size."); } } this.lastKeylineMaskedSize = keyline.maskedItemSize; this.tmpKeylines.add(keyline); return this; } Builder addKeyline(float f, float f2, float f3, boolean z, boolean z2) { float f4; float abs; float f5 = f3 / 2.0f; float f6 = f - f5; float f7 = f5 + f; float f8 = this.availableSpace; if (f7 > f8) { abs = Math.abs(f7 - Math.max(f7 - f3, f8)); } else if (f6 < 0.0f) { abs = Math.abs(f6 - Math.min(f6 + f3, 0.0f)); } else { f4 = 0.0f; return addKeyline(f, f2, f3, z, z2, f4); } f4 = abs; return addKeyline(f, f2, f3, z, z2, f4); } Builder addAnchorKeyline(float f, float f2, float f3) { return addKeyline(f, f2, f3, false, true); } Builder addKeylineRange(float f, float f2, float f3, int i) { return addKeylineRange(f, f2, f3, i, false); } Builder addKeylineRange(float f, float f2, float f3, int i, boolean z) { if (i > 0 && f3 > 0.0f) { for (int i2 = 0; i2 < i; i2++) { addKeyline((i2 * f3) + f, f2, f3, z); } } return this; } KeylineState build() { if (this.tmpFirstFocalKeyline == null) { throw new IllegalStateException("There must be a keyline marked as focal."); } ArrayList arrayList = new ArrayList(); for (int i = 0; i < this.tmpKeylines.size(); i++) { Keyline keyline = this.tmpKeylines.get(i); arrayList.add(new Keyline(calculateKeylineLocationForItemPosition(this.tmpFirstFocalKeyline.locOffset, this.itemSize, this.firstFocalKeylineIndex, i), keyline.locOffset, keyline.mask, keyline.maskedItemSize, keyline.isAnchor, keyline.cutoff)); } return new KeylineState(this.itemSize, arrayList, this.firstFocalKeylineIndex, this.lastFocalKeylineIndex); } } static final class Keyline { final float cutoff; final boolean isAnchor; final float loc; final float locOffset; final float mask; final float maskedItemSize; Keyline(float f, float f2, float f3, float f4) { this(f, f2, f3, f4, false, 0.0f); } Keyline(float f, float f2, float f3, float f4, boolean z, float f5) { this.loc = f; this.locOffset = f2; this.mask = f3; this.maskedItemSize = f4; this.isAnchor = z; this.cutoff = f5; } static Keyline lerp(Keyline keyline, Keyline keyline2, float f) { return new Keyline(AnimationUtils.lerp(keyline.loc, keyline2.loc, f), AnimationUtils.lerp(keyline.locOffset, keyline2.locOffset, f), AnimationUtils.lerp(keyline.mask, keyline2.mask, f), AnimationUtils.lerp(keyline.maskedItemSize, keyline2.maskedItemSize, f)); } } }