discord-jadx/app/src/main/java/androidx/viewpager/widget/PagerTitleStrip.java

401 lines
17 KiB
Java

package androidx.viewpager.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.text.method.SingleLineTransformationMethod;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.widget.TextViewCompat;
import androidx.viewpager.widget.ViewPager;
import java.lang.ref.WeakReference;
import java.util.Locale;
@ViewPager.DecorView
public class PagerTitleStrip extends ViewGroup {
private static final int[] ATTRS = {16842804, 16842901, 16842904, 16842927};
private static final float SIDE_ALPHA = 0.6f;
private static final int[] TEXT_ATTRS = {16843660};
private static final int TEXT_SPACING = 16;
public TextView mCurrText;
private int mGravity;
private int mLastKnownCurrentPage;
public float mLastKnownPositionOffset;
public TextView mNextText;
private int mNonPrimaryAlpha;
private final PageListener mPageListener;
public ViewPager mPager;
public TextView mPrevText;
private int mScaledTextSpacing;
public int mTextColor;
private boolean mUpdatingPositions;
private boolean mUpdatingText;
private WeakReference<PagerAdapter> mWatchingAdapter;
public class PageListener extends DataSetObserver implements ViewPager.OnPageChangeListener, ViewPager.OnAdapterChangeListener {
private int mScrollState;
public PageListener() {
}
@Override // androidx.viewpager.widget.ViewPager.OnAdapterChangeListener
public void onAdapterChanged(ViewPager viewPager, PagerAdapter pagerAdapter, PagerAdapter pagerAdapter2) {
PagerTitleStrip.this.updateAdapter(pagerAdapter, pagerAdapter2);
}
@Override // android.database.DataSetObserver
public void onChanged() {
PagerTitleStrip pagerTitleStrip = PagerTitleStrip.this;
pagerTitleStrip.updateText(pagerTitleStrip.mPager.getCurrentItem(), PagerTitleStrip.this.mPager.getAdapter());
PagerTitleStrip pagerTitleStrip2 = PagerTitleStrip.this;
float f = pagerTitleStrip2.mLastKnownPositionOffset;
if (f < 0.0f) {
f = 0.0f;
}
pagerTitleStrip2.updateTextPositions(pagerTitleStrip2.mPager.getCurrentItem(), f, true);
}
@Override // androidx.viewpager.widget.ViewPager.OnPageChangeListener
public void onPageScrollStateChanged(int i) {
this.mScrollState = i;
}
@Override // androidx.viewpager.widget.ViewPager.OnPageChangeListener
public void onPageScrolled(int i, float f, int i2) {
if (f > 0.5f) {
i++;
}
PagerTitleStrip.this.updateTextPositions(i, f, false);
}
@Override // androidx.viewpager.widget.ViewPager.OnPageChangeListener
public void onPageSelected(int i) {
if (this.mScrollState == 0) {
PagerTitleStrip pagerTitleStrip = PagerTitleStrip.this;
pagerTitleStrip.updateText(pagerTitleStrip.mPager.getCurrentItem(), PagerTitleStrip.this.mPager.getAdapter());
PagerTitleStrip pagerTitleStrip2 = PagerTitleStrip.this;
float f = pagerTitleStrip2.mLastKnownPositionOffset;
if (f < 0.0f) {
f = 0.0f;
}
pagerTitleStrip2.updateTextPositions(pagerTitleStrip2.mPager.getCurrentItem(), f, true);
}
}
}
public static class SingleLineAllCapsTransform extends SingleLineTransformationMethod {
private Locale mLocale;
public SingleLineAllCapsTransform(Context context) {
this.mLocale = context.getResources().getConfiguration().locale;
}
@Override // android.text.method.ReplacementTransformationMethod, android.text.method.TransformationMethod
public CharSequence getTransformation(CharSequence charSequence, View view) {
CharSequence transformation = super.getTransformation(charSequence, view);
if (transformation != null) {
return transformation.toString().toUpperCase(this.mLocale);
}
return null;
}
}
public PagerTitleStrip(@NonNull Context context) {
this(context, null);
}
public PagerTitleStrip(@NonNull Context context, @Nullable AttributeSet attributeSet) {
super(context, attributeSet);
this.mLastKnownCurrentPage = -1;
this.mLastKnownPositionOffset = -1.0f;
this.mPageListener = new PageListener();
TextView textView = new TextView(context);
this.mPrevText = textView;
addView(textView);
TextView textView2 = new TextView(context);
this.mCurrText = textView2;
addView(textView2);
TextView textView3 = new TextView(context);
this.mNextText = textView3;
addView(textView3);
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, ATTRS);
boolean z2 = false;
int resourceId = obtainStyledAttributes.getResourceId(0, 0);
if (resourceId != 0) {
TextViewCompat.setTextAppearance(this.mPrevText, resourceId);
TextViewCompat.setTextAppearance(this.mCurrText, resourceId);
TextViewCompat.setTextAppearance(this.mNextText, resourceId);
}
int dimensionPixelSize = obtainStyledAttributes.getDimensionPixelSize(1, 0);
if (dimensionPixelSize != 0) {
setTextSize(0, (float) dimensionPixelSize);
}
if (obtainStyledAttributes.hasValue(2)) {
int color = obtainStyledAttributes.getColor(2, 0);
this.mPrevText.setTextColor(color);
this.mCurrText.setTextColor(color);
this.mNextText.setTextColor(color);
}
this.mGravity = obtainStyledAttributes.getInteger(3, 80);
obtainStyledAttributes.recycle();
this.mTextColor = this.mCurrText.getTextColors().getDefaultColor();
setNonPrimaryAlpha(0.6f);
this.mPrevText.setEllipsize(TextUtils.TruncateAt.END);
this.mCurrText.setEllipsize(TextUtils.TruncateAt.END);
this.mNextText.setEllipsize(TextUtils.TruncateAt.END);
if (resourceId != 0) {
TypedArray obtainStyledAttributes2 = context.obtainStyledAttributes(resourceId, TEXT_ATTRS);
z2 = obtainStyledAttributes2.getBoolean(0, false);
obtainStyledAttributes2.recycle();
}
if (z2) {
setSingleLineAllCaps(this.mPrevText);
setSingleLineAllCaps(this.mCurrText);
setSingleLineAllCaps(this.mNextText);
} else {
this.mPrevText.setSingleLine();
this.mCurrText.setSingleLine();
this.mNextText.setSingleLine();
}
this.mScaledTextSpacing = (int) (context.getResources().getDisplayMetrics().density * 16.0f);
}
private static void setSingleLineAllCaps(TextView textView) {
textView.setTransformationMethod(new SingleLineAllCapsTransform(textView.getContext()));
}
public int getMinHeight() {
Drawable background = getBackground();
if (background != null) {
return background.getIntrinsicHeight();
}
return 0;
}
public int getTextSpacing() {
return this.mScaledTextSpacing;
}
@Override // android.view.ViewGroup, android.view.View
public void onAttachedToWindow() {
super.onAttachedToWindow();
ViewParent parent = getParent();
if (parent instanceof ViewPager) {
ViewPager viewPager = (ViewPager) parent;
PagerAdapter adapter = viewPager.getAdapter();
viewPager.setInternalPageChangeListener(this.mPageListener);
viewPager.addOnAdapterChangeListener(this.mPageListener);
this.mPager = viewPager;
WeakReference<PagerAdapter> weakReference = this.mWatchingAdapter;
updateAdapter(weakReference != null ? weakReference.get() : null, adapter);
return;
}
throw new IllegalStateException("PagerTitleStrip must be a direct child of a ViewPager.");
}
@Override // android.view.ViewGroup, android.view.View
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
ViewPager viewPager = this.mPager;
if (viewPager != null) {
updateAdapter(viewPager.getAdapter(), null);
this.mPager.setInternalPageChangeListener(null);
this.mPager.removeOnAdapterChangeListener(this.mPageListener);
this.mPager = null;
}
}
@Override // android.view.ViewGroup, android.view.View
public void onLayout(boolean z2, int i, int i2, int i3, int i4) {
if (this.mPager != null) {
float f = this.mLastKnownPositionOffset;
if (f < 0.0f) {
f = 0.0f;
}
updateTextPositions(this.mLastKnownCurrentPage, f, true);
}
}
@Override // android.view.View
public void onMeasure(int i, int i2) {
int i3;
if (View.MeasureSpec.getMode(i) == 1073741824) {
int paddingBottom = getPaddingBottom() + getPaddingTop();
int childMeasureSpec = ViewGroup.getChildMeasureSpec(i2, paddingBottom, -2);
int size = View.MeasureSpec.getSize(i);
int childMeasureSpec2 = ViewGroup.getChildMeasureSpec(i, (int) (((float) size) * 0.2f), -2);
this.mPrevText.measure(childMeasureSpec2, childMeasureSpec);
this.mCurrText.measure(childMeasureSpec2, childMeasureSpec);
this.mNextText.measure(childMeasureSpec2, childMeasureSpec);
if (View.MeasureSpec.getMode(i2) == 1073741824) {
i3 = View.MeasureSpec.getSize(i2);
} else {
i3 = Math.max(getMinHeight(), this.mCurrText.getMeasuredHeight() + paddingBottom);
}
setMeasuredDimension(size, View.resolveSizeAndState(i3, i2, this.mCurrText.getMeasuredState() << 16));
return;
}
throw new IllegalStateException("Must measure with an exact width");
}
@Override // android.view.ViewParent, android.view.View
public void requestLayout() {
if (!this.mUpdatingText) {
super.requestLayout();
}
}
public void setGravity(int i) {
this.mGravity = i;
requestLayout();
}
public void setNonPrimaryAlpha(@FloatRange(from = 0.0d, to = 1.0d) float f) {
int i = ((int) (f * 255.0f)) & 255;
this.mNonPrimaryAlpha = i;
int i2 = (i << 24) | (this.mTextColor & 16777215);
this.mPrevText.setTextColor(i2);
this.mNextText.setTextColor(i2);
}
public void setTextColor(@ColorInt int i) {
this.mTextColor = i;
this.mCurrText.setTextColor(i);
int i2 = (this.mNonPrimaryAlpha << 24) | (this.mTextColor & 16777215);
this.mPrevText.setTextColor(i2);
this.mNextText.setTextColor(i2);
}
public void setTextSize(int i, float f) {
this.mPrevText.setTextSize(i, f);
this.mCurrText.setTextSize(i, f);
this.mNextText.setTextSize(i, f);
}
public void setTextSpacing(int i) {
this.mScaledTextSpacing = i;
requestLayout();
}
public void updateAdapter(PagerAdapter pagerAdapter, PagerAdapter pagerAdapter2) {
if (pagerAdapter != null) {
pagerAdapter.unregisterDataSetObserver(this.mPageListener);
this.mWatchingAdapter = null;
}
if (pagerAdapter2 != null) {
pagerAdapter2.registerDataSetObserver(this.mPageListener);
this.mWatchingAdapter = new WeakReference<>(pagerAdapter2);
}
ViewPager viewPager = this.mPager;
if (viewPager != null) {
this.mLastKnownCurrentPage = -1;
this.mLastKnownPositionOffset = -1.0f;
updateText(viewPager.getCurrentItem(), pagerAdapter2);
requestLayout();
}
}
public void updateText(int i, PagerAdapter pagerAdapter) {
int count = pagerAdapter != null ? pagerAdapter.getCount() : 0;
this.mUpdatingText = true;
CharSequence charSequence = null;
this.mPrevText.setText((i < 1 || pagerAdapter == null) ? null : pagerAdapter.getPageTitle(i - 1));
this.mCurrText.setText((pagerAdapter == null || i >= count) ? null : pagerAdapter.getPageTitle(i));
int i2 = i + 1;
if (i2 < count && pagerAdapter != null) {
charSequence = pagerAdapter.getPageTitle(i2);
}
this.mNextText.setText(charSequence);
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(Math.max(0, (int) (((float) ((getWidth() - getPaddingLeft()) - getPaddingRight())) * 0.8f)), Integer.MIN_VALUE);
int makeMeasureSpec2 = View.MeasureSpec.makeMeasureSpec(Math.max(0, (getHeight() - getPaddingTop()) - getPaddingBottom()), Integer.MIN_VALUE);
this.mPrevText.measure(makeMeasureSpec, makeMeasureSpec2);
this.mCurrText.measure(makeMeasureSpec, makeMeasureSpec2);
this.mNextText.measure(makeMeasureSpec, makeMeasureSpec2);
this.mLastKnownCurrentPage = i;
if (!this.mUpdatingPositions) {
updateTextPositions(i, this.mLastKnownPositionOffset, false);
}
this.mUpdatingText = false;
}
public void updateTextPositions(int i, float f, boolean z2) {
int i2;
int i3;
int i4;
int i5;
if (i != this.mLastKnownCurrentPage) {
updateText(i, this.mPager.getAdapter());
} else if (!z2 && f == this.mLastKnownPositionOffset) {
return;
}
this.mUpdatingPositions = true;
int measuredWidth = this.mPrevText.getMeasuredWidth();
int measuredWidth2 = this.mCurrText.getMeasuredWidth();
int measuredWidth3 = this.mNextText.getMeasuredWidth();
int i6 = measuredWidth2 / 2;
int width = getWidth();
int height = getHeight();
int paddingLeft = getPaddingLeft();
int paddingRight = getPaddingRight();
int paddingTop = getPaddingTop();
int paddingBottom = getPaddingBottom();
int i7 = paddingRight + i6;
int i8 = (width - (paddingLeft + i6)) - i7;
float f2 = 0.5f + f;
if (f2 > 1.0f) {
f2 -= 1.0f;
}
int i9 = ((width - i7) - ((int) (((float) i8) * f2))) - i6;
int i10 = measuredWidth2 + i9;
int baseline = this.mPrevText.getBaseline();
int baseline2 = this.mCurrText.getBaseline();
int baseline3 = this.mNextText.getBaseline();
int max = Math.max(Math.max(baseline, baseline2), baseline3);
int i11 = max - baseline;
int i12 = max - baseline2;
int i13 = max - baseline3;
int max2 = Math.max(Math.max(this.mPrevText.getMeasuredHeight() + i11, this.mCurrText.getMeasuredHeight() + i12), this.mNextText.getMeasuredHeight() + i13);
int i14 = this.mGravity & 112;
if (i14 == 16) {
i5 = (((height - paddingTop) - paddingBottom) - max2) / 2;
} else if (i14 != 80) {
i4 = i11 + paddingTop;
i2 = i12 + paddingTop;
i3 = paddingTop + i13;
TextView textView = this.mCurrText;
textView.layout(i9, i2, i10, textView.getMeasuredHeight() + i2);
int min = Math.min(paddingLeft, (i9 - this.mScaledTextSpacing) - measuredWidth);
TextView textView2 = this.mPrevText;
textView2.layout(min, i4, measuredWidth + min, textView2.getMeasuredHeight() + i4);
int max3 = Math.max((width - paddingRight) - measuredWidth3, i10 + this.mScaledTextSpacing);
TextView textView3 = this.mNextText;
textView3.layout(max3, i3, max3 + measuredWidth3, textView3.getMeasuredHeight() + i3);
this.mLastKnownPositionOffset = f;
this.mUpdatingPositions = false;
} else {
i5 = (height - paddingBottom) - max2;
}
i4 = i11 + i5;
i2 = i12 + i5;
i3 = i5 + i13;
TextView textView = this.mCurrText;
textView.layout(i9, i2, i10, textView.getMeasuredHeight() + i2);
int min = Math.min(paddingLeft, (i9 - this.mScaledTextSpacing) - measuredWidth);
TextView textView2 = this.mPrevText;
textView2.layout(min, i4, measuredWidth + min, textView2.getMeasuredHeight() + i4);
int max3 = Math.max((width - paddingRight) - measuredWidth3, i10 + this.mScaledTextSpacing);
TextView textView3 = this.mNextText;
textView3.layout(max3, i3, max3 + measuredWidth3, textView3.getMeasuredHeight() + i3);
this.mLastKnownPositionOffset = f;
this.mUpdatingPositions = false;
}
}