mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
304 lines
11 KiB
Java
304 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: classes2.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;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes2.dex */
|
|
public 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;
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes2.dex */
|
|
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;
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes2.dex */
|
|
public 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) {
|
|
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;
|
|
}
|
|
}
|