package android.support.v4.app; import android.content.Context; import android.content.res.TypedArray; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.Parcelable.Creator; import android.util.AttributeSet; import android.view.View; import android.view.View.BaseSavedState; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; import android.widget.TabHost.TabContentFactory; import android.widget.TabHost.TabSpec; import android.widget.TabWidget; import java.util.ArrayList; 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 = new ArrayList(); public FragmentTabHost(Context paramContext) { super(paramContext, null); initFragmentTabHost(paramContext, null); } public FragmentTabHost(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); initFragmentTabHost(paramContext, paramAttributeSet); } private FragmentTransaction doTabChanged(String paramString, FragmentTransaction paramFragmentTransaction) { Object localObject = null; for (int i = 0; i < this.mTabs.size(); i++) { TabInfo localTabInfo = (TabInfo)this.mTabs.get(i); if (localTabInfo.tag.equals(paramString)) { localObject = localTabInfo; } } if (localObject == null) { throw new IllegalStateException("No tab known for tag " + paramString); } if (this.mLastTab != localObject) { if (paramFragmentTransaction == null) { paramFragmentTransaction = this.mFragmentManager.beginTransaction(); } if ((this.mLastTab != null) && (this.mLastTab.fragment != null)) { paramFragmentTransaction.detach(this.mLastTab.fragment); } if (localObject != null) { if (localObject.fragment != null) { break label190; } TabInfo.access$102(localObject, Fragment.instantiate(this.mContext, localObject.clss.getName(), localObject.args)); paramFragmentTransaction.add(this.mContainerId, localObject.fragment, localObject.tag); } } for (;;) { this.mLastTab = localObject; return paramFragmentTransaction; label190: paramFragmentTransaction.attach(localObject.fragment); } } private void ensureContent() { if (this.mRealTabContent == null) { this.mRealTabContent = ((FrameLayout)findViewById(this.mContainerId)); if (this.mRealTabContent == null) { throw new IllegalStateException("No tab content FrameLayout found for id " + this.mContainerId); } } } private void initFragmentTabHost(Context paramContext, AttributeSet paramAttributeSet) { int[] arrayOfInt = new int[1]; arrayOfInt[0] = 16842995; TypedArray localTypedArray = paramContext.obtainStyledAttributes(paramAttributeSet, arrayOfInt, 0, 0); this.mContainerId = localTypedArray.getResourceId(0, 0); localTypedArray.recycle(); super.setOnTabChangedListener(this); if (findViewById(16908307) == null) { LinearLayout localLinearLayout = new LinearLayout(paramContext); localLinearLayout.setOrientation(1); addView(localLinearLayout, new FrameLayout.LayoutParams(-1, -1)); TabWidget localTabWidget = new TabWidget(paramContext); localTabWidget.setId(16908307); localTabWidget.setOrientation(0); localLinearLayout.addView(localTabWidget, new LinearLayout.LayoutParams(-1, -2, 0.0F)); FrameLayout localFrameLayout1 = new FrameLayout(paramContext); localFrameLayout1.setId(16908305); localLinearLayout.addView(localFrameLayout1, new LinearLayout.LayoutParams(0, 0, 0.0F)); FrameLayout localFrameLayout2 = new FrameLayout(paramContext); this.mRealTabContent = localFrameLayout2; this.mRealTabContent.setId(this.mContainerId); localLinearLayout.addView(localFrameLayout2, new LinearLayout.LayoutParams(-1, 0, 1.0F)); } } public void addTab(TabHost.TabSpec paramTabSpec, Class<?> paramClass, Bundle paramBundle) { paramTabSpec.setContent(new DummyTabFactory(this.mContext)); String str = paramTabSpec.getTag(); TabInfo localTabInfo = new TabInfo(str, paramClass, paramBundle); if (this.mAttached) { TabInfo.access$102(localTabInfo, this.mFragmentManager.findFragmentByTag(str)); if ((localTabInfo.fragment != null) && (!localTabInfo.fragment.isDetached())) { FragmentTransaction localFragmentTransaction = this.mFragmentManager.beginTransaction(); localFragmentTransaction.detach(localTabInfo.fragment); localFragmentTransaction.commit(); } } this.mTabs.add(localTabInfo); addTab(paramTabSpec); } protected void onAttachedToWindow() { super.onAttachedToWindow(); String str = getCurrentTabTag(); FragmentTransaction localFragmentTransaction1 = null; int i = 0; if (i < this.mTabs.size()) { TabInfo localTabInfo = (TabInfo)this.mTabs.get(i); TabInfo.access$102(localTabInfo, this.mFragmentManager.findFragmentByTag(localTabInfo.tag)); if ((localTabInfo.fragment != null) && (!localTabInfo.fragment.isDetached())) { if (!localTabInfo.tag.equals(str)) { break label98; } this.mLastTab = localTabInfo; } for (;;) { i++; break; label98: if (localFragmentTransaction1 == null) { localFragmentTransaction1 = this.mFragmentManager.beginTransaction(); } localFragmentTransaction1.detach(localTabInfo.fragment); } } this.mAttached = true; FragmentTransaction localFragmentTransaction2 = doTabChanged(str, localFragmentTransaction1); if (localFragmentTransaction2 != null) { localFragmentTransaction2.commit(); this.mFragmentManager.executePendingTransactions(); } } protected void onDetachedFromWindow() { super.onDetachedFromWindow(); this.mAttached = false; } protected void onRestoreInstanceState(Parcelable paramParcelable) { SavedState localSavedState = (SavedState)paramParcelable; super.onRestoreInstanceState(localSavedState.getSuperState()); setCurrentTabByTag(localSavedState.curTab); } protected Parcelable onSaveInstanceState() { SavedState localSavedState = new SavedState(super.onSaveInstanceState()); localSavedState.curTab = getCurrentTabTag(); return localSavedState; } public void onTabChanged(String paramString) { if (this.mAttached) { FragmentTransaction localFragmentTransaction = doTabChanged(paramString, null); if (localFragmentTransaction != null) { localFragmentTransaction.commit(); } } if (this.mOnTabChangeListener != null) { this.mOnTabChangeListener.onTabChanged(paramString); } } public void setOnTabChangedListener(TabHost.OnTabChangeListener paramOnTabChangeListener) { this.mOnTabChangeListener = paramOnTabChangeListener; } @Deprecated public void setup() { throw new IllegalStateException("Must call setup() that takes a Context and FragmentManager"); } public void setup(Context paramContext, FragmentManager paramFragmentManager) { super.setup(); this.mContext = paramContext; this.mFragmentManager = paramFragmentManager; ensureContent(); } public void setup(Context paramContext, FragmentManager paramFragmentManager, int paramInt) { super.setup(); this.mContext = paramContext; this.mFragmentManager = paramFragmentManager; this.mContainerId = paramInt; ensureContent(); this.mRealTabContent.setId(paramInt); if (getId() == -1) { setId(16908306); } } static class SavedState extends View.BaseSavedState { public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator() { public FragmentTabHost.SavedState createFromParcel(Parcel paramAnonymousParcel) { return new FragmentTabHost.SavedState(paramAnonymousParcel, null); } public FragmentTabHost.SavedState[] newArray(int paramAnonymousInt) { return new FragmentTabHost.SavedState[paramAnonymousInt]; } }; String curTab; private SavedState(Parcel paramParcel) { super(); this.curTab = paramParcel.readString(); } SavedState(Parcelable paramParcelable) { super(); } public String toString() { return "FragmentTabHost.SavedState{" + Integer.toHexString(System.identityHashCode(this)) + " curTab=" + this.curTab + "}"; } public void writeToParcel(Parcel paramParcel, int paramInt) { super.writeToParcel(paramParcel, paramInt); paramParcel.writeString(this.curTab); } } static class DummyTabFactory implements TabHost.TabContentFactory { private final Context mContext; public DummyTabFactory(Context paramContext) { this.mContext = paramContext; } public View createTabContent(String paramString) { View localView = new View(this.mContext); localView.setMinimumWidth(0); localView.setMinimumHeight(0); return localView; } } static final class TabInfo { private final Bundle args; private final Class<?> clss; private Fragment fragment; private final String tag; TabInfo(String paramString, Class<?> paramClass, Bundle paramBundle) { this.tag = paramString; this.clss = paramClass; this.args = paramBundle; } } } /* Location: F:\neembuu\Research\android_apps\output_jar.jar * Qualified Name: android.support.v4.app.FragmentTabHost * JD-Core Version: 0.7.0.1 */