301 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import android.R;
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.os.Bundle;
 | |
| import android.os.Parcel;
 | |
| import android.os.Parcelable;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.View;
 | |
| import android.widget.FrameLayout;
 | |
| import android.widget.LinearLayout;
 | |
| import android.widget.TabHost;
 | |
| import android.widget.TabWidget;
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| @Deprecated
 | |
| /* loaded from: classes.dex */
 | |
| public class FragmentTabHost extends TabHost implements TabHost.OnTabChangeListener {
 | |
|     private boolean mAttached;
 | |
|     private int mContainerId;
 | |
|     private Context mContext;
 | |
|     private FragmentManager mFragmentManager;
 | |
|     private TabInfo mLastTab;
 | |
|     private TabHost.OnTabChangeListener mOnTabChangeListener;
 | |
|     private FrameLayout mRealTabContent;
 | |
|     private final ArrayList<TabInfo> mTabs;
 | |
| 
 | |
|     @Override // android.widget.TabHost
 | |
|     @Deprecated
 | |
|     public void setOnTabChangedListener(TabHost.OnTabChangeListener onTabChangeListener) {
 | |
|         this.mOnTabChangeListener = onTabChangeListener;
 | |
|     }
 | |
| 
 | |
|     static final class TabInfo {
 | |
|         final Bundle args;
 | |
|         final Class<?> clss;
 | |
|         Fragment fragment;
 | |
|         final String tag;
 | |
| 
 | |
|         TabInfo(String str, Class<?> cls, Bundle bundle) {
 | |
|             this.tag = str;
 | |
|             this.clss = cls;
 | |
|             this.args = bundle;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class DummyTabFactory implements TabHost.TabContentFactory {
 | |
|         private final Context mContext;
 | |
| 
 | |
|         public DummyTabFactory(Context context) {
 | |
|             this.mContext = context;
 | |
|         }
 | |
| 
 | |
|         @Override // android.widget.TabHost.TabContentFactory
 | |
|         public View createTabContent(String str) {
 | |
|             View view = new View(this.mContext);
 | |
|             view.setMinimumWidth(0);
 | |
|             view.setMinimumHeight(0);
 | |
|             return view;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class SavedState extends View.BaseSavedState {
 | |
|         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { // from class: androidx.fragment.app.FragmentTabHost.SavedState.1
 | |
|             /* JADX WARN: Can't rename method to resolve collision */
 | |
|             @Override // android.os.Parcelable.Creator
 | |
|             public SavedState createFromParcel(Parcel parcel) {
 | |
|                 return new SavedState(parcel);
 | |
|             }
 | |
| 
 | |
|             /* JADX WARN: Can't rename method to resolve collision */
 | |
|             @Override // android.os.Parcelable.Creator
 | |
|             public SavedState[] newArray(int i) {
 | |
|                 return new SavedState[i];
 | |
|             }
 | |
|         };
 | |
|         String curTab;
 | |
| 
 | |
|         SavedState(Parcelable parcelable) {
 | |
|             super(parcelable);
 | |
|         }
 | |
| 
 | |
|         SavedState(Parcel parcel) {
 | |
|             super(parcel);
 | |
|             this.curTab = parcel.readString();
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.View.BaseSavedState, android.view.AbsSavedState, android.os.Parcelable
 | |
|         public void writeToParcel(Parcel parcel, int i) {
 | |
|             super.writeToParcel(parcel, i);
 | |
|             parcel.writeString(this.curTab);
 | |
|         }
 | |
| 
 | |
|         public String toString() {
 | |
|             return "FragmentTabHost.SavedState{" + Integer.toHexString(System.identityHashCode(this)) + " curTab=" + this.curTab + "}";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public FragmentTabHost(Context context) {
 | |
|         super(context, null);
 | |
|         this.mTabs = new ArrayList<>();
 | |
|         initFragmentTabHost(context, null);
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public FragmentTabHost(Context context, AttributeSet attributeSet) {
 | |
|         super(context, attributeSet);
 | |
|         this.mTabs = new ArrayList<>();
 | |
|         initFragmentTabHost(context, attributeSet);
 | |
|     }
 | |
| 
 | |
|     private void initFragmentTabHost(Context context, AttributeSet attributeSet) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, new int[]{R.attr.inflatedId}, 0, 0);
 | |
|         this.mContainerId = obtainStyledAttributes.getResourceId(0, 0);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         super.setOnTabChangedListener(this);
 | |
|     }
 | |
| 
 | |
|     private void ensureHierarchy(Context context) {
 | |
|         if (findViewById(R.id.tabs) == null) {
 | |
|             LinearLayout linearLayout = new LinearLayout(context);
 | |
|             linearLayout.setOrientation(1);
 | |
|             addView(linearLayout, new FrameLayout.LayoutParams(-1, -1));
 | |
|             TabWidget tabWidget = new TabWidget(context);
 | |
|             tabWidget.setId(R.id.tabs);
 | |
|             tabWidget.setOrientation(0);
 | |
|             linearLayout.addView(tabWidget, new LinearLayout.LayoutParams(-1, -2, 0.0f));
 | |
|             FrameLayout frameLayout = new FrameLayout(context);
 | |
|             frameLayout.setId(R.id.tabcontent);
 | |
|             linearLayout.addView(frameLayout, new LinearLayout.LayoutParams(0, 0, 0.0f));
 | |
|             FrameLayout frameLayout2 = new FrameLayout(context);
 | |
|             this.mRealTabContent = frameLayout2;
 | |
|             frameLayout2.setId(this.mContainerId);
 | |
|             linearLayout.addView(frameLayout2, new LinearLayout.LayoutParams(-1, 0, 1.0f));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TabHost
 | |
|     @Deprecated
 | |
|     public void setup() {
 | |
|         throw new IllegalStateException("Must call setup() that takes a Context and FragmentManager");
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public void setup(Context context, FragmentManager fragmentManager) {
 | |
|         ensureHierarchy(context);
 | |
|         super.setup();
 | |
|         this.mContext = context;
 | |
|         this.mFragmentManager = fragmentManager;
 | |
|         ensureContent();
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public void setup(Context context, FragmentManager fragmentManager, int i) {
 | |
|         ensureHierarchy(context);
 | |
|         super.setup();
 | |
|         this.mContext = context;
 | |
|         this.mFragmentManager = fragmentManager;
 | |
|         this.mContainerId = i;
 | |
|         ensureContent();
 | |
|         this.mRealTabContent.setId(i);
 | |
|         if (getId() == -1) {
 | |
|             setId(R.id.tabhost);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void ensureContent() {
 | |
|         if (this.mRealTabContent == null) {
 | |
|             FrameLayout frameLayout = (FrameLayout) findViewById(this.mContainerId);
 | |
|             this.mRealTabContent = frameLayout;
 | |
|             if (frameLayout != null) {
 | |
|                 return;
 | |
|             }
 | |
|             throw new IllegalStateException("No tab content FrameLayout found for id " + this.mContainerId);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public void addTab(TabHost.TabSpec tabSpec, Class<?> cls, Bundle bundle) {
 | |
|         tabSpec.setContent(new DummyTabFactory(this.mContext));
 | |
|         String tag = tabSpec.getTag();
 | |
|         TabInfo tabInfo = new TabInfo(tag, cls, bundle);
 | |
|         if (this.mAttached) {
 | |
|             tabInfo.fragment = this.mFragmentManager.findFragmentByTag(tag);
 | |
|             if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) {
 | |
|                 FragmentTransaction beginTransaction = this.mFragmentManager.beginTransaction();
 | |
|                 beginTransaction.detach(tabInfo.fragment);
 | |
|                 beginTransaction.commit();
 | |
|             }
 | |
|         }
 | |
|         this.mTabs.add(tabInfo);
 | |
|         addTab(tabSpec);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     @Deprecated
 | |
|     protected void onAttachedToWindow() {
 | |
|         super.onAttachedToWindow();
 | |
|         String currentTabTag = getCurrentTabTag();
 | |
|         int size = this.mTabs.size();
 | |
|         FragmentTransaction fragmentTransaction = null;
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             TabInfo tabInfo = this.mTabs.get(i);
 | |
|             tabInfo.fragment = this.mFragmentManager.findFragmentByTag(tabInfo.tag);
 | |
|             if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) {
 | |
|                 if (tabInfo.tag.equals(currentTabTag)) {
 | |
|                     this.mLastTab = tabInfo;
 | |
|                 } else {
 | |
|                     if (fragmentTransaction == null) {
 | |
|                         fragmentTransaction = this.mFragmentManager.beginTransaction();
 | |
|                     }
 | |
|                     fragmentTransaction.detach(tabInfo.fragment);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         this.mAttached = true;
 | |
|         FragmentTransaction doTabChanged = doTabChanged(currentTabTag, fragmentTransaction);
 | |
|         if (doTabChanged != null) {
 | |
|             doTabChanged.commit();
 | |
|             this.mFragmentManager.executePendingTransactions();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     @Deprecated
 | |
|     protected void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         this.mAttached = false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     @Deprecated
 | |
|     protected Parcelable onSaveInstanceState() {
 | |
|         SavedState savedState = new SavedState(super.onSaveInstanceState());
 | |
|         savedState.curTab = getCurrentTabTag();
 | |
|         return savedState;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     @Deprecated
 | |
|     protected void onRestoreInstanceState(Parcelable parcelable) {
 | |
|         if (!(parcelable instanceof SavedState)) {
 | |
|             super.onRestoreInstanceState(parcelable);
 | |
|             return;
 | |
|         }
 | |
|         SavedState savedState = (SavedState) parcelable;
 | |
|         super.onRestoreInstanceState(savedState.getSuperState());
 | |
|         setCurrentTabByTag(savedState.curTab);
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TabHost.OnTabChangeListener
 | |
|     @Deprecated
 | |
|     public void onTabChanged(String str) {
 | |
|         FragmentTransaction doTabChanged;
 | |
|         if (this.mAttached && (doTabChanged = doTabChanged(str, null)) != null) {
 | |
|             doTabChanged.commit();
 | |
|         }
 | |
|         TabHost.OnTabChangeListener onTabChangeListener = this.mOnTabChangeListener;
 | |
|         if (onTabChangeListener != null) {
 | |
|             onTabChangeListener.onTabChanged(str);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private FragmentTransaction doTabChanged(String str, FragmentTransaction fragmentTransaction) {
 | |
|         TabInfo tabInfoForTag = getTabInfoForTag(str);
 | |
|         if (this.mLastTab != tabInfoForTag) {
 | |
|             if (fragmentTransaction == null) {
 | |
|                 fragmentTransaction = this.mFragmentManager.beginTransaction();
 | |
|             }
 | |
|             TabInfo tabInfo = this.mLastTab;
 | |
|             if (tabInfo != null && tabInfo.fragment != null) {
 | |
|                 fragmentTransaction.detach(this.mLastTab.fragment);
 | |
|             }
 | |
|             if (tabInfoForTag != null) {
 | |
|                 if (tabInfoForTag.fragment == null) {
 | |
|                     tabInfoForTag.fragment = this.mFragmentManager.getFragmentFactory().instantiate(this.mContext.getClassLoader(), tabInfoForTag.clss.getName());
 | |
|                     tabInfoForTag.fragment.setArguments(tabInfoForTag.args);
 | |
|                     fragmentTransaction.add(this.mContainerId, tabInfoForTag.fragment, tabInfoForTag.tag);
 | |
|                 } else {
 | |
|                     fragmentTransaction.attach(tabInfoForTag.fragment);
 | |
|                 }
 | |
|             }
 | |
|             this.mLastTab = tabInfoForTag;
 | |
|         }
 | |
|         return fragmentTransaction;
 | |
|     }
 | |
| 
 | |
|     private TabInfo getTabInfoForTag(String str) {
 | |
|         int size = this.mTabs.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             TabInfo tabInfo = this.mTabs.get(i);
 | |
|             if (tabInfo.tag.equals(str)) {
 | |
|                 return tabInfo;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| }
 |