ADD week 5
This commit is contained in:
		
							
								
								
									
										300
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentTabHost.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										300
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentTabHost.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,300 @@ | ||||
| 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; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user