Rabbit-R1/switch port/java/sources/androidx/fragment/app/DialogFragment.java
2024-05-21 17:08:36 -04:00

540 lines
20 KiB
Java

package androidx.fragment.app;
import android.R;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import androidx.activity.ComponentDialog;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewTreeLifecycleOwner;
import androidx.lifecycle.ViewTreeViewModelStoreOwner;
import androidx.savedstate.ViewTreeSavedStateRegistryOwner;
/* loaded from: classes2.dex */
public class DialogFragment extends Fragment implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener {
private static final String SAVED_BACK_STACK_ID = "android:backStackId";
private static final String SAVED_CANCELABLE = "android:cancelable";
private static final String SAVED_DIALOG_STATE_TAG = "android:savedDialogState";
private static final String SAVED_INTERNAL_DIALOG_SHOWING = "android:dialogShowing";
private static final String SAVED_SHOWS_DIALOG = "android:showsDialog";
private static final String SAVED_STYLE = "android:style";
private static final String SAVED_THEME = "android:theme";
public static final int STYLE_NORMAL = 0;
public static final int STYLE_NO_FRAME = 2;
public static final int STYLE_NO_INPUT = 3;
public static final int STYLE_NO_TITLE = 1;
private int mBackStackId;
private boolean mCancelable;
private boolean mCreatingDialog;
private Dialog mDialog;
private boolean mDialogCreated;
private Runnable mDismissRunnable;
private boolean mDismissed;
private Handler mHandler;
private Observer<LifecycleOwner> mObserver;
private DialogInterface.OnCancelListener mOnCancelListener;
private DialogInterface.OnDismissListener mOnDismissListener;
private boolean mShownByMe;
private boolean mShowsDialog;
private int mStyle;
private int mTheme;
private boolean mViewDestroyed;
public Dialog getDialog() {
return this.mDialog;
}
public boolean getShowsDialog() {
return this.mShowsDialog;
}
public int getTheme() {
return this.mTheme;
}
public boolean isCancelable() {
return this.mCancelable;
}
@Override // android.content.DialogInterface.OnCancelListener
public void onCancel(DialogInterface dialogInterface) {
}
boolean onHasView() {
return this.mDialogCreated;
}
public void setShowsDialog(boolean z) {
this.mShowsDialog = z;
}
public DialogFragment() {
this.mDismissRunnable = new Runnable() { // from class: androidx.fragment.app.DialogFragment.1
@Override // java.lang.Runnable
public void run() {
DialogFragment.this.mOnDismissListener.onDismiss(DialogFragment.this.mDialog);
}
};
this.mOnCancelListener = new DialogInterface.OnCancelListener() { // from class: androidx.fragment.app.DialogFragment.2
@Override // android.content.DialogInterface.OnCancelListener
public void onCancel(DialogInterface dialogInterface) {
if (DialogFragment.this.mDialog != null) {
DialogFragment dialogFragment = DialogFragment.this;
dialogFragment.onCancel(dialogFragment.mDialog);
}
}
};
this.mOnDismissListener = new DialogInterface.OnDismissListener() { // from class: androidx.fragment.app.DialogFragment.3
@Override // android.content.DialogInterface.OnDismissListener
public void onDismiss(DialogInterface dialogInterface) {
if (DialogFragment.this.mDialog != null) {
DialogFragment dialogFragment = DialogFragment.this;
dialogFragment.onDismiss(dialogFragment.mDialog);
}
}
};
this.mStyle = 0;
this.mTheme = 0;
this.mCancelable = true;
this.mShowsDialog = true;
this.mBackStackId = -1;
this.mObserver = new Observer<LifecycleOwner>() { // from class: androidx.fragment.app.DialogFragment.4
@Override // androidx.lifecycle.Observer
public void onChanged(LifecycleOwner lifecycleOwner) {
if (lifecycleOwner == null || !DialogFragment.this.mShowsDialog) {
return;
}
View requireView = DialogFragment.this.requireView();
if (requireView.getParent() == null) {
if (DialogFragment.this.mDialog != null) {
if (FragmentManager.isLoggingEnabled(3)) {
Log.d(FragmentManager.TAG, "DialogFragment " + this + " setting the content view on " + DialogFragment.this.mDialog);
}
DialogFragment.this.mDialog.setContentView(requireView);
return;
}
return;
}
throw new IllegalStateException("DialogFragment can not be attached to a container view");
}
};
this.mDialogCreated = false;
}
public DialogFragment(int i) {
super(i);
this.mDismissRunnable = new Runnable() { // from class: androidx.fragment.app.DialogFragment.1
@Override // java.lang.Runnable
public void run() {
DialogFragment.this.mOnDismissListener.onDismiss(DialogFragment.this.mDialog);
}
};
this.mOnCancelListener = new DialogInterface.OnCancelListener() { // from class: androidx.fragment.app.DialogFragment.2
@Override // android.content.DialogInterface.OnCancelListener
public void onCancel(DialogInterface dialogInterface) {
if (DialogFragment.this.mDialog != null) {
DialogFragment dialogFragment = DialogFragment.this;
dialogFragment.onCancel(dialogFragment.mDialog);
}
}
};
this.mOnDismissListener = new DialogInterface.OnDismissListener() { // from class: androidx.fragment.app.DialogFragment.3
@Override // android.content.DialogInterface.OnDismissListener
public void onDismiss(DialogInterface dialogInterface) {
if (DialogFragment.this.mDialog != null) {
DialogFragment dialogFragment = DialogFragment.this;
dialogFragment.onDismiss(dialogFragment.mDialog);
}
}
};
this.mStyle = 0;
this.mTheme = 0;
this.mCancelable = true;
this.mShowsDialog = true;
this.mBackStackId = -1;
this.mObserver = new Observer<LifecycleOwner>() { // from class: androidx.fragment.app.DialogFragment.4
@Override // androidx.lifecycle.Observer
public void onChanged(LifecycleOwner lifecycleOwner) {
if (lifecycleOwner == null || !DialogFragment.this.mShowsDialog) {
return;
}
View requireView = DialogFragment.this.requireView();
if (requireView.getParent() == null) {
if (DialogFragment.this.mDialog != null) {
if (FragmentManager.isLoggingEnabled(3)) {
Log.d(FragmentManager.TAG, "DialogFragment " + this + " setting the content view on " + DialogFragment.this.mDialog);
}
DialogFragment.this.mDialog.setContentView(requireView);
return;
}
return;
}
throw new IllegalStateException("DialogFragment can not be attached to a container view");
}
};
this.mDialogCreated = false;
}
public void setStyle(int i, int i2) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.d(FragmentManager.TAG, "Setting style and theme for DialogFragment " + this + " to " + i + ", " + i2);
}
this.mStyle = i;
if (i == 2 || i == 3) {
this.mTheme = R.style.Theme.Panel;
}
if (i2 != 0) {
this.mTheme = i2;
}
}
public void show(FragmentManager fragmentManager, String str) {
this.mDismissed = false;
this.mShownByMe = true;
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.setReorderingAllowed(true);
beginTransaction.add(this, str);
beginTransaction.commit();
}
public int show(FragmentTransaction fragmentTransaction, String str) {
this.mDismissed = false;
this.mShownByMe = true;
fragmentTransaction.add(this, str);
this.mViewDestroyed = false;
int commit = fragmentTransaction.commit();
this.mBackStackId = commit;
return commit;
}
public void showNow(FragmentManager fragmentManager, String str) {
this.mDismissed = false;
this.mShownByMe = true;
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.setReorderingAllowed(true);
beginTransaction.add(this, str);
beginTransaction.commitNow();
}
public void dismiss() {
dismissInternal(false, false, false);
}
public void dismissNow() {
dismissInternal(false, false, true);
}
public void dismissAllowingStateLoss() {
dismissInternal(true, false, false);
}
private void dismissInternal(boolean z, boolean z2, boolean z3) {
if (this.mDismissed) {
return;
}
this.mDismissed = true;
this.mShownByMe = false;
Dialog dialog = this.mDialog;
if (dialog != null) {
dialog.setOnDismissListener(null);
this.mDialog.dismiss();
if (!z2) {
if (Looper.myLooper() == this.mHandler.getLooper()) {
onDismiss(this.mDialog);
} else {
this.mHandler.post(this.mDismissRunnable);
}
}
}
this.mViewDestroyed = true;
if (this.mBackStackId >= 0) {
if (z3) {
getParentFragmentManager().popBackStackImmediate(this.mBackStackId, 1);
} else {
getParentFragmentManager().popBackStack(this.mBackStackId, 1, z);
}
this.mBackStackId = -1;
return;
}
FragmentTransaction beginTransaction = getParentFragmentManager().beginTransaction();
beginTransaction.setReorderingAllowed(true);
beginTransaction.remove(this);
if (z3) {
beginTransaction.commitNow();
} else if (z) {
beginTransaction.commitAllowingStateLoss();
} else {
beginTransaction.commit();
}
}
public final Dialog requireDialog() {
Dialog dialog = getDialog();
if (dialog != null) {
return dialog;
}
throw new IllegalStateException("DialogFragment " + this + " does not have a Dialog.");
}
public final ComponentDialog requireComponentDialog() {
Dialog requireDialog = requireDialog();
if (!(requireDialog instanceof ComponentDialog)) {
throw new IllegalStateException("DialogFragment " + this + " did not return a ComponentDialog instance from requireDialog(). The actual Dialog is " + requireDialog);
}
return (ComponentDialog) requireDialog;
}
public void setCancelable(boolean z) {
this.mCancelable = z;
Dialog dialog = this.mDialog;
if (dialog != null) {
dialog.setCancelable(z);
}
}
@Override // androidx.fragment.app.Fragment
public void onAttach(Context context) {
super.onAttach(context);
getViewLifecycleOwnerLiveData().observeForever(this.mObserver);
if (this.mShownByMe) {
return;
}
this.mDismissed = false;
}
@Override // androidx.fragment.app.Fragment
public void onDetach() {
super.onDetach();
if (!this.mShownByMe && !this.mDismissed) {
this.mDismissed = true;
}
getViewLifecycleOwnerLiveData().removeObserver(this.mObserver);
}
@Override // androidx.fragment.app.Fragment
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
this.mHandler = new Handler();
this.mShowsDialog = this.mContainerId == 0;
if (bundle != null) {
this.mStyle = bundle.getInt(SAVED_STYLE, 0);
this.mTheme = bundle.getInt(SAVED_THEME, 0);
this.mCancelable = bundle.getBoolean(SAVED_CANCELABLE, true);
this.mShowsDialog = bundle.getBoolean(SAVED_SHOWS_DIALOG, this.mShowsDialog);
this.mBackStackId = bundle.getInt(SAVED_BACK_STACK_ID, -1);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // androidx.fragment.app.Fragment
public void performCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
Bundle bundle2;
super.performCreateView(layoutInflater, viewGroup, bundle);
if (this.mView != null || this.mDialog == null || bundle == null || (bundle2 = bundle.getBundle(SAVED_DIALOG_STATE_TAG)) == null) {
return;
}
this.mDialog.onRestoreInstanceState(bundle2);
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // androidx.fragment.app.Fragment
public FragmentContainer createFragmentContainer() {
final FragmentContainer createFragmentContainer = super.createFragmentContainer();
return new FragmentContainer() { // from class: androidx.fragment.app.DialogFragment.5
@Override // androidx.fragment.app.FragmentContainer
public View onFindViewById(int i) {
if (createFragmentContainer.onHasView()) {
return createFragmentContainer.onFindViewById(i);
}
return DialogFragment.this.onFindViewById(i);
}
@Override // androidx.fragment.app.FragmentContainer
public boolean onHasView() {
return createFragmentContainer.onHasView() || DialogFragment.this.onHasView();
}
};
}
View onFindViewById(int i) {
Dialog dialog = this.mDialog;
if (dialog != null) {
return dialog.findViewById(i);
}
return null;
}
@Override // androidx.fragment.app.Fragment
public LayoutInflater onGetLayoutInflater(Bundle bundle) {
LayoutInflater onGetLayoutInflater = super.onGetLayoutInflater(bundle);
if (!this.mShowsDialog || this.mCreatingDialog) {
if (FragmentManager.isLoggingEnabled(2)) {
String str = "getting layout inflater for DialogFragment " + this;
if (!this.mShowsDialog) {
Log.d(FragmentManager.TAG, "mShowsDialog = false: " + str);
} else {
Log.d(FragmentManager.TAG, "mCreatingDialog = true: " + str);
}
}
return onGetLayoutInflater;
}
prepareDialog(bundle);
if (FragmentManager.isLoggingEnabled(2)) {
Log.d(FragmentManager.TAG, "get layout inflater for DialogFragment " + this + " from dialog context");
}
Dialog dialog = this.mDialog;
return dialog != null ? onGetLayoutInflater.cloneInContext(dialog.getContext()) : onGetLayoutInflater;
}
public void setupDialog(Dialog dialog, int i) {
if (i != 1 && i != 2) {
if (i != 3) {
return;
}
Window window = dialog.getWindow();
if (window != null) {
window.addFlags(24);
}
}
dialog.requestWindowFeature(1);
}
public Dialog onCreateDialog(Bundle bundle) {
if (FragmentManager.isLoggingEnabled(3)) {
Log.d(FragmentManager.TAG, "onCreateDialog called for DialogFragment " + this);
}
return new ComponentDialog(requireContext(), getTheme());
}
@Override // android.content.DialogInterface.OnDismissListener
public void onDismiss(DialogInterface dialogInterface) {
if (this.mViewDestroyed) {
return;
}
if (FragmentManager.isLoggingEnabled(3)) {
Log.d(FragmentManager.TAG, "onDismiss called for DialogFragment " + this);
}
dismissInternal(true, true, false);
}
private void prepareDialog(Bundle bundle) {
if (this.mShowsDialog && !this.mDialogCreated) {
try {
this.mCreatingDialog = true;
Dialog onCreateDialog = onCreateDialog(bundle);
this.mDialog = onCreateDialog;
if (this.mShowsDialog) {
setupDialog(onCreateDialog, this.mStyle);
Context context = getContext();
if (context instanceof Activity) {
this.mDialog.setOwnerActivity((Activity) context);
}
this.mDialog.setCancelable(this.mCancelable);
this.mDialog.setOnCancelListener(this.mOnCancelListener);
this.mDialog.setOnDismissListener(this.mOnDismissListener);
this.mDialogCreated = true;
} else {
this.mDialog = null;
}
} finally {
this.mCreatingDialog = false;
}
}
}
@Override // androidx.fragment.app.Fragment
public void onViewStateRestored(Bundle bundle) {
Bundle bundle2;
super.onViewStateRestored(bundle);
if (this.mDialog == null || bundle == null || (bundle2 = bundle.getBundle(SAVED_DIALOG_STATE_TAG)) == null) {
return;
}
this.mDialog.onRestoreInstanceState(bundle2);
}
@Override // androidx.fragment.app.Fragment
@Deprecated
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
}
@Override // androidx.fragment.app.Fragment
public void onStart() {
super.onStart();
Dialog dialog = this.mDialog;
if (dialog != null) {
this.mViewDestroyed = false;
dialog.show();
View decorView = this.mDialog.getWindow().getDecorView();
ViewTreeLifecycleOwner.set(decorView, this);
ViewTreeViewModelStoreOwner.set(decorView, this);
ViewTreeSavedStateRegistryOwner.set(decorView, this);
}
}
@Override // androidx.fragment.app.Fragment
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
Dialog dialog = this.mDialog;
if (dialog != null) {
Bundle onSaveInstanceState = dialog.onSaveInstanceState();
onSaveInstanceState.putBoolean(SAVED_INTERNAL_DIALOG_SHOWING, false);
bundle.putBundle(SAVED_DIALOG_STATE_TAG, onSaveInstanceState);
}
int i = this.mStyle;
if (i != 0) {
bundle.putInt(SAVED_STYLE, i);
}
int i2 = this.mTheme;
if (i2 != 0) {
bundle.putInt(SAVED_THEME, i2);
}
boolean z = this.mCancelable;
if (!z) {
bundle.putBoolean(SAVED_CANCELABLE, z);
}
boolean z2 = this.mShowsDialog;
if (!z2) {
bundle.putBoolean(SAVED_SHOWS_DIALOG, z2);
}
int i3 = this.mBackStackId;
if (i3 != -1) {
bundle.putInt(SAVED_BACK_STACK_ID, i3);
}
}
@Override // androidx.fragment.app.Fragment
public void onStop() {
super.onStop();
Dialog dialog = this.mDialog;
if (dialog != null) {
dialog.hide();
}
}
@Override // androidx.fragment.app.Fragment
public void onDestroyView() {
super.onDestroyView();
Dialog dialog = this.mDialog;
if (dialog != null) {
this.mViewDestroyed = true;
dialog.setOnDismissListener(null);
this.mDialog.dismiss();
if (!this.mDismissed) {
onDismiss(this.mDialog);
}
this.mDialog = null;
this.mDialogCreated = false;
}
}
}