547 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			547 lines
		
	
	
		
			20 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;
 | |
| import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure;
 | |
| 
 | |
| /* 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, BasicMeasure.EXACTLY);
 | |
|         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();
 | |
|     }
 | |
| 
 | |
|     private 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, BasicMeasure.EXACTLY), 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());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private 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;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private 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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     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);
 | |
|         }
 | |
|     }
 | |
| }
 |