mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
552 lines
21 KiB
Java
552 lines
21 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.graphics.drawable.Drawable;
|
|
import android.text.TextUtils;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.ViewParent;
|
|
import android.view.ViewPropertyAnimator;
|
|
import android.view.accessibility.AccessibilityEvent;
|
|
import android.view.accessibility.AccessibilityNodeInfo;
|
|
import android.view.animation.DecelerateInterpolator;
|
|
import android.view.animation.Interpolator;
|
|
import android.widget.AbsListView;
|
|
import android.widget.AdapterView;
|
|
import android.widget.BaseAdapter;
|
|
import android.widget.HorizontalScrollView;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.Spinner;
|
|
import android.widget.SpinnerAdapter;
|
|
import android.widget.TextView;
|
|
import androidx.appcompat.R;
|
|
import androidx.appcompat.app.ActionBar;
|
|
import androidx.appcompat.view.ActionBarPolicy;
|
|
import androidx.appcompat.widget.LinearLayoutCompat;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class ScrollingTabContainerView extends HorizontalScrollView implements AdapterView.OnItemSelectedListener {
|
|
private static final int FADE_DURATION = 200;
|
|
private static final String TAG = "ScrollingTabContainerView";
|
|
private static final Interpolator sAlphaInterpolator = new DecelerateInterpolator();
|
|
private boolean mAllowCollapse;
|
|
private int mContentHeight;
|
|
int mMaxTabWidth;
|
|
private int mSelectedTabIndex;
|
|
int mStackedTabMaxWidth;
|
|
private TabClickListener mTabClickListener;
|
|
LinearLayoutCompat mTabLayout;
|
|
Runnable mTabSelector;
|
|
private Spinner mTabSpinner;
|
|
protected final VisibilityAnimListener mVisAnimListener;
|
|
protected ViewPropertyAnimator mVisibilityAnim;
|
|
|
|
@Override // android.widget.AdapterView.OnItemSelectedListener
|
|
public void onNothingSelected(AdapterView<?> adapterView) {
|
|
}
|
|
|
|
public void setAllowCollapse(boolean z) {
|
|
this.mAllowCollapse = z;
|
|
}
|
|
|
|
public ScrollingTabContainerView(Context context) {
|
|
super(context);
|
|
this.mVisAnimListener = new VisibilityAnimListener();
|
|
setHorizontalScrollBarEnabled(false);
|
|
ActionBarPolicy actionBarPolicy = ActionBarPolicy.get(context);
|
|
setContentHeight(actionBarPolicy.getTabContainerHeight());
|
|
this.mStackedTabMaxWidth = actionBarPolicy.getStackedTabMaxWidth();
|
|
LinearLayoutCompat createTabLayout = createTabLayout();
|
|
this.mTabLayout = createTabLayout;
|
|
addView(createTabLayout, new ViewGroup.LayoutParams(-2, -1));
|
|
}
|
|
|
|
@Override // android.widget.HorizontalScrollView, android.widget.FrameLayout, android.view.View
|
|
public void onMeasure(int i, int i2) {
|
|
int mode = View.MeasureSpec.getMode(i);
|
|
boolean z = mode == 1073741824;
|
|
setFillViewport(z);
|
|
int childCount = this.mTabLayout.getChildCount();
|
|
if (childCount <= 1 || !(mode == 1073741824 || mode == Integer.MIN_VALUE)) {
|
|
this.mMaxTabWidth = -1;
|
|
} else {
|
|
if (childCount > 2) {
|
|
this.mMaxTabWidth = (int) (View.MeasureSpec.getSize(i) * 0.4f);
|
|
} else {
|
|
this.mMaxTabWidth = View.MeasureSpec.getSize(i) / 2;
|
|
}
|
|
this.mMaxTabWidth = Math.min(this.mMaxTabWidth, this.mStackedTabMaxWidth);
|
|
}
|
|
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(this.mContentHeight, 1073741824);
|
|
if (!z && this.mAllowCollapse) {
|
|
this.mTabLayout.measure(0, makeMeasureSpec);
|
|
if (this.mTabLayout.getMeasuredWidth() > View.MeasureSpec.getSize(i)) {
|
|
performCollapse();
|
|
} else {
|
|
performExpand();
|
|
}
|
|
} else {
|
|
performExpand();
|
|
}
|
|
int measuredWidth = getMeasuredWidth();
|
|
super.onMeasure(i, makeMeasureSpec);
|
|
int measuredWidth2 = getMeasuredWidth();
|
|
if (!z || measuredWidth == measuredWidth2) {
|
|
return;
|
|
}
|
|
setTabSelected(this.mSelectedTabIndex);
|
|
}
|
|
|
|
private boolean isCollapsed() {
|
|
Spinner spinner = this.mTabSpinner;
|
|
return spinner != null && spinner.getParent() == this;
|
|
}
|
|
|
|
private void performCollapse() {
|
|
if (isCollapsed()) {
|
|
return;
|
|
}
|
|
if (this.mTabSpinner == null) {
|
|
this.mTabSpinner = createSpinner();
|
|
}
|
|
removeView(this.mTabLayout);
|
|
addView(this.mTabSpinner, new ViewGroup.LayoutParams(-2, -1));
|
|
if (this.mTabSpinner.getAdapter() == null) {
|
|
this.mTabSpinner.setAdapter((SpinnerAdapter) new TabAdapter());
|
|
}
|
|
Runnable runnable = this.mTabSelector;
|
|
if (runnable != null) {
|
|
removeCallbacks(runnable);
|
|
this.mTabSelector = null;
|
|
}
|
|
this.mTabSpinner.setSelection(this.mSelectedTabIndex);
|
|
}
|
|
|
|
private boolean performExpand() {
|
|
if (!isCollapsed()) {
|
|
return false;
|
|
}
|
|
removeView(this.mTabSpinner);
|
|
addView(this.mTabLayout, new ViewGroup.LayoutParams(-2, -1));
|
|
setTabSelected(this.mTabSpinner.getSelectedItemPosition());
|
|
return false;
|
|
}
|
|
|
|
public void setTabSelected(int i) {
|
|
this.mSelectedTabIndex = i;
|
|
int childCount = this.mTabLayout.getChildCount();
|
|
int i2 = 0;
|
|
while (i2 < childCount) {
|
|
View childAt = this.mTabLayout.getChildAt(i2);
|
|
boolean z = i2 == i;
|
|
childAt.setSelected(z);
|
|
if (z) {
|
|
animateToTab(i);
|
|
}
|
|
i2++;
|
|
}
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner == null || i < 0) {
|
|
return;
|
|
}
|
|
spinner.setSelection(i);
|
|
}
|
|
|
|
public void setContentHeight(int i) {
|
|
this.mContentHeight = i;
|
|
requestLayout();
|
|
}
|
|
|
|
private LinearLayoutCompat createTabLayout() {
|
|
LinearLayoutCompat linearLayoutCompat = new LinearLayoutCompat(getContext(), null, R.attr.actionBarTabBarStyle);
|
|
linearLayoutCompat.setMeasureWithLargestChildEnabled(true);
|
|
linearLayoutCompat.setGravity(17);
|
|
linearLayoutCompat.setLayoutParams(new LinearLayoutCompat.LayoutParams(-2, -1));
|
|
return linearLayoutCompat;
|
|
}
|
|
|
|
private Spinner createSpinner() {
|
|
AppCompatSpinner appCompatSpinner = new AppCompatSpinner(getContext(), null, R.attr.actionDropDownStyle);
|
|
appCompatSpinner.setLayoutParams(new LinearLayoutCompat.LayoutParams(-2, -1));
|
|
appCompatSpinner.setOnItemSelectedListener(this);
|
|
return appCompatSpinner;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
protected void onConfigurationChanged(Configuration configuration) {
|
|
super.onConfigurationChanged(configuration);
|
|
ActionBarPolicy actionBarPolicy = ActionBarPolicy.get(getContext());
|
|
setContentHeight(actionBarPolicy.getTabContainerHeight());
|
|
this.mStackedTabMaxWidth = actionBarPolicy.getStackedTabMaxWidth();
|
|
}
|
|
|
|
public void animateToVisibility(int i) {
|
|
ViewPropertyAnimator viewPropertyAnimator = this.mVisibilityAnim;
|
|
if (viewPropertyAnimator != null) {
|
|
viewPropertyAnimator.cancel();
|
|
}
|
|
if (i == 0) {
|
|
if (getVisibility() != 0) {
|
|
setAlpha(0.0f);
|
|
}
|
|
ViewPropertyAnimator alpha = animate().alpha(1.0f);
|
|
alpha.setDuration(200L);
|
|
alpha.setInterpolator(sAlphaInterpolator);
|
|
alpha.setListener(this.mVisAnimListener.withFinalVisibility(alpha, i));
|
|
alpha.start();
|
|
return;
|
|
}
|
|
ViewPropertyAnimator alpha2 = animate().alpha(0.0f);
|
|
alpha2.setDuration(200L);
|
|
alpha2.setInterpolator(sAlphaInterpolator);
|
|
alpha2.setListener(this.mVisAnimListener.withFinalVisibility(alpha2, i));
|
|
alpha2.start();
|
|
}
|
|
|
|
public void animateToTab(int i) {
|
|
final View childAt = this.mTabLayout.getChildAt(i);
|
|
Runnable runnable = this.mTabSelector;
|
|
if (runnable != null) {
|
|
removeCallbacks(runnable);
|
|
}
|
|
Runnable runnable2 = new Runnable() { // from class: androidx.appcompat.widget.ScrollingTabContainerView.1
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
ScrollingTabContainerView.this.smoothScrollTo(childAt.getLeft() - ((ScrollingTabContainerView.this.getWidth() - childAt.getWidth()) / 2), 0);
|
|
ScrollingTabContainerView.this.mTabSelector = null;
|
|
}
|
|
};
|
|
this.mTabSelector = runnable2;
|
|
post(runnable2);
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
public void onAttachedToWindow() {
|
|
super.onAttachedToWindow();
|
|
Runnable runnable = this.mTabSelector;
|
|
if (runnable != null) {
|
|
post(runnable);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
public void onDetachedFromWindow() {
|
|
super.onDetachedFromWindow();
|
|
Runnable runnable = this.mTabSelector;
|
|
if (runnable != null) {
|
|
removeCallbacks(runnable);
|
|
}
|
|
}
|
|
|
|
TabView createTabView(ActionBar.Tab tab, boolean z) {
|
|
TabView tabView = new TabView(getContext(), tab, z);
|
|
if (z) {
|
|
tabView.setBackgroundDrawable(null);
|
|
tabView.setLayoutParams(new AbsListView.LayoutParams(-1, this.mContentHeight));
|
|
} else {
|
|
tabView.setFocusable(true);
|
|
if (this.mTabClickListener == null) {
|
|
this.mTabClickListener = new TabClickListener();
|
|
}
|
|
tabView.setOnClickListener(this.mTabClickListener);
|
|
}
|
|
return tabView;
|
|
}
|
|
|
|
public void addTab(ActionBar.Tab tab, boolean z) {
|
|
TabView createTabView = createTabView(tab, false);
|
|
this.mTabLayout.addView(createTabView, new LinearLayoutCompat.LayoutParams(0, -1, 1.0f));
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner != null) {
|
|
((TabAdapter) spinner.getAdapter()).notifyDataSetChanged();
|
|
}
|
|
if (z) {
|
|
createTabView.setSelected(true);
|
|
}
|
|
if (this.mAllowCollapse) {
|
|
requestLayout();
|
|
}
|
|
}
|
|
|
|
public void addTab(ActionBar.Tab tab, int i, boolean z) {
|
|
TabView createTabView = createTabView(tab, false);
|
|
this.mTabLayout.addView(createTabView, i, new LinearLayoutCompat.LayoutParams(0, -1, 1.0f));
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner != null) {
|
|
((TabAdapter) spinner.getAdapter()).notifyDataSetChanged();
|
|
}
|
|
if (z) {
|
|
createTabView.setSelected(true);
|
|
}
|
|
if (this.mAllowCollapse) {
|
|
requestLayout();
|
|
}
|
|
}
|
|
|
|
public void updateTab(int i) {
|
|
((TabView) this.mTabLayout.getChildAt(i)).update();
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner != null) {
|
|
((TabAdapter) spinner.getAdapter()).notifyDataSetChanged();
|
|
}
|
|
if (this.mAllowCollapse) {
|
|
requestLayout();
|
|
}
|
|
}
|
|
|
|
public void removeTabAt(int i) {
|
|
this.mTabLayout.removeViewAt(i);
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner != null) {
|
|
((TabAdapter) spinner.getAdapter()).notifyDataSetChanged();
|
|
}
|
|
if (this.mAllowCollapse) {
|
|
requestLayout();
|
|
}
|
|
}
|
|
|
|
public void removeAllTabs() {
|
|
this.mTabLayout.removeAllViews();
|
|
Spinner spinner = this.mTabSpinner;
|
|
if (spinner != null) {
|
|
((TabAdapter) spinner.getAdapter()).notifyDataSetChanged();
|
|
}
|
|
if (this.mAllowCollapse) {
|
|
requestLayout();
|
|
}
|
|
}
|
|
|
|
@Override // android.widget.AdapterView.OnItemSelectedListener
|
|
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long j) {
|
|
((TabView) view).getTab().select();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes.dex */
|
|
public class TabView extends LinearLayout {
|
|
private static final String ACCESSIBILITY_CLASS_NAME = "androidx.appcompat.app.ActionBar$Tab";
|
|
private final int[] BG_ATTRS;
|
|
private View mCustomView;
|
|
private ImageView mIconView;
|
|
private ActionBar.Tab mTab;
|
|
private TextView mTextView;
|
|
|
|
public ActionBar.Tab getTab() {
|
|
return this.mTab;
|
|
}
|
|
|
|
public TabView(Context context, ActionBar.Tab tab, boolean z) {
|
|
super(context, null, R.attr.actionBarTabStyle);
|
|
int[] iArr = {android.R.attr.background};
|
|
this.BG_ATTRS = iArr;
|
|
this.mTab = tab;
|
|
TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, null, iArr, R.attr.actionBarTabStyle, 0);
|
|
if (obtainStyledAttributes.hasValue(0)) {
|
|
setBackgroundDrawable(obtainStyledAttributes.getDrawable(0));
|
|
}
|
|
obtainStyledAttributes.recycle();
|
|
if (z) {
|
|
setGravity(8388627);
|
|
}
|
|
update();
|
|
}
|
|
|
|
public void bindTab(ActionBar.Tab tab) {
|
|
this.mTab = tab;
|
|
update();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setSelected(boolean z) {
|
|
boolean z2 = isSelected() != z;
|
|
super.setSelected(z);
|
|
if (z2 && z) {
|
|
sendAccessibilityEvent(4);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
|
|
super.onInitializeAccessibilityEvent(accessibilityEvent);
|
|
accessibilityEvent.setClassName(ACCESSIBILITY_CLASS_NAME);
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
super.onInitializeAccessibilityNodeInfo(accessibilityNodeInfo);
|
|
accessibilityNodeInfo.setClassName(ACCESSIBILITY_CLASS_NAME);
|
|
}
|
|
|
|
@Override // android.widget.LinearLayout, android.view.View
|
|
public void onMeasure(int i, int i2) {
|
|
super.onMeasure(i, i2);
|
|
if (ScrollingTabContainerView.this.mMaxTabWidth <= 0 || getMeasuredWidth() <= ScrollingTabContainerView.this.mMaxTabWidth) {
|
|
return;
|
|
}
|
|
super.onMeasure(View.MeasureSpec.makeMeasureSpec(ScrollingTabContainerView.this.mMaxTabWidth, 1073741824), i2);
|
|
}
|
|
|
|
public void update() {
|
|
ActionBar.Tab tab = this.mTab;
|
|
View customView = tab.getCustomView();
|
|
if (customView != null) {
|
|
ViewParent parent = customView.getParent();
|
|
if (parent != this) {
|
|
if (parent != null) {
|
|
((ViewGroup) parent).removeView(customView);
|
|
}
|
|
addView(customView);
|
|
}
|
|
this.mCustomView = customView;
|
|
TextView textView = this.mTextView;
|
|
if (textView != null) {
|
|
textView.setVisibility(8);
|
|
}
|
|
ImageView imageView = this.mIconView;
|
|
if (imageView != null) {
|
|
imageView.setVisibility(8);
|
|
this.mIconView.setImageDrawable(null);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
View view = this.mCustomView;
|
|
if (view != null) {
|
|
removeView(view);
|
|
this.mCustomView = null;
|
|
}
|
|
Drawable icon = tab.getIcon();
|
|
CharSequence text = tab.getText();
|
|
if (icon != null) {
|
|
if (this.mIconView == null) {
|
|
AppCompatImageView appCompatImageView = new AppCompatImageView(getContext());
|
|
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(-2, -2);
|
|
layoutParams.gravity = 16;
|
|
appCompatImageView.setLayoutParams(layoutParams);
|
|
addView(appCompatImageView, 0);
|
|
this.mIconView = appCompatImageView;
|
|
}
|
|
this.mIconView.setImageDrawable(icon);
|
|
this.mIconView.setVisibility(0);
|
|
} else {
|
|
ImageView imageView2 = this.mIconView;
|
|
if (imageView2 != null) {
|
|
imageView2.setVisibility(8);
|
|
this.mIconView.setImageDrawable(null);
|
|
}
|
|
}
|
|
boolean z = !TextUtils.isEmpty(text);
|
|
if (z) {
|
|
if (this.mTextView == null) {
|
|
AppCompatTextView appCompatTextView = new AppCompatTextView(getContext(), null, R.attr.actionBarTabTextStyle);
|
|
appCompatTextView.setEllipsize(TextUtils.TruncateAt.END);
|
|
LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(-2, -2);
|
|
layoutParams2.gravity = 16;
|
|
appCompatTextView.setLayoutParams(layoutParams2);
|
|
addView(appCompatTextView);
|
|
this.mTextView = appCompatTextView;
|
|
}
|
|
this.mTextView.setText(text);
|
|
this.mTextView.setVisibility(0);
|
|
} else {
|
|
TextView textView2 = this.mTextView;
|
|
if (textView2 != null) {
|
|
textView2.setVisibility(8);
|
|
this.mTextView.setText((CharSequence) null);
|
|
}
|
|
}
|
|
ImageView imageView3 = this.mIconView;
|
|
if (imageView3 != null) {
|
|
imageView3.setContentDescription(tab.getContentDescription());
|
|
}
|
|
TooltipCompat.setTooltipText(this, z ? null : tab.getContentDescription());
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes.dex */
|
|
public class TabAdapter extends BaseAdapter {
|
|
@Override // android.widget.Adapter
|
|
public long getItemId(int i) {
|
|
return i;
|
|
}
|
|
|
|
TabAdapter() {
|
|
}
|
|
|
|
@Override // android.widget.Adapter
|
|
public int getCount() {
|
|
return ScrollingTabContainerView.this.mTabLayout.getChildCount();
|
|
}
|
|
|
|
@Override // android.widget.Adapter
|
|
public Object getItem(int i) {
|
|
return ((TabView) ScrollingTabContainerView.this.mTabLayout.getChildAt(i)).getTab();
|
|
}
|
|
|
|
@Override // android.widget.Adapter
|
|
public View getView(int i, View view, ViewGroup viewGroup) {
|
|
if (view == null) {
|
|
return ScrollingTabContainerView.this.createTabView((ActionBar.Tab) getItem(i), true);
|
|
}
|
|
((TabView) view).bindTab((ActionBar.Tab) getItem(i));
|
|
return view;
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes.dex */
|
|
public class TabClickListener implements View.OnClickListener {
|
|
TabClickListener() {
|
|
}
|
|
|
|
@Override // android.view.View.OnClickListener
|
|
public void onClick(View view) {
|
|
((TabView) view).getTab().select();
|
|
int childCount = ScrollingTabContainerView.this.mTabLayout.getChildCount();
|
|
for (int i = 0; i < childCount; i++) {
|
|
View childAt = ScrollingTabContainerView.this.mTabLayout.getChildAt(i);
|
|
childAt.setSelected(childAt == view);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
protected class VisibilityAnimListener extends AnimatorListenerAdapter {
|
|
private boolean mCanceled = false;
|
|
private int mFinalVisibility;
|
|
|
|
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
|
|
public void onAnimationCancel(Animator animator) {
|
|
this.mCanceled = true;
|
|
}
|
|
|
|
protected VisibilityAnimListener() {
|
|
}
|
|
|
|
public VisibilityAnimListener withFinalVisibility(ViewPropertyAnimator viewPropertyAnimator, int i) {
|
|
this.mFinalVisibility = i;
|
|
ScrollingTabContainerView.this.mVisibilityAnim = viewPropertyAnimator;
|
|
return this;
|
|
}
|
|
|
|
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
|
|
public void onAnimationStart(Animator animator) {
|
|
ScrollingTabContainerView.this.setVisibility(0);
|
|
this.mCanceled = false;
|
|
}
|
|
|
|
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
|
|
public void onAnimationEnd(Animator animator) {
|
|
if (this.mCanceled) {
|
|
return;
|
|
}
|
|
ScrollingTabContainerView.this.mVisibilityAnim = null;
|
|
ScrollingTabContainerView.this.setVisibility(this.mFinalVisibility);
|
|
}
|
|
}
|
|
}
|