diff --git a/moxy-androidx/src/main/java/com/arellomobile/mvp/MvpAppCompatDialogFragment.java b/moxy-androidx/src/main/java/com/arellomobile/mvp/MvpAppCompatDialogFragment.java new file mode 100644 index 00000000..772e6af1 --- /dev/null +++ b/moxy-androidx/src/main/java/com/arellomobile/mvp/MvpAppCompatDialogFragment.java @@ -0,0 +1,97 @@ +package com.arellomobile.mvp; + +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import androidx.appcompat.app.AppCompatDialogFragment; + +/** + * Date: 25-Fed-18 + * Time: 11:50 + * + * @author Roman Savelev + */ +@SuppressWarnings({"ConstantConditions", "unused"}) +public class MvpAppCompatDialogFragment extends AppCompatDialogFragment { + + private boolean mIsStateSaved; + private MvpDelegate mMvpDelegate; + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getMvpDelegate().onCreate(savedInstanceState); + } + + public void onResume() { + super.onResume(); + + mIsStateSaved = false; + + getMvpDelegate().onAttach(); + } + + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + mIsStateSaved = true; + + getMvpDelegate().onSaveInstanceState(outState); + getMvpDelegate().onDetach(); + } + + @Override + public void onStop() { + super.onStop(); + + getMvpDelegate().onDetach(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + + getMvpDelegate().onDetach(); + getMvpDelegate().onDestroyView(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + //We leave the screen and respectively all fragments will be destroyed + if (getActivity().isFinishing()) { + getMvpDelegate().onDestroy(); + return; + } + + // When we rotate device isRemoving() return true for fragment placed in backstack + // http://stackoverflow.com/questions/34649126/fragment-back-stack-and-isremoving + if (mIsStateSaved) { + mIsStateSaved = false; + return; + } + + // See https://github.com/Arello-Mobile/Moxy/issues/24 + boolean anyParentIsRemoving = false; + Fragment parent = getParentFragment(); + while (!anyParentIsRemoving && parent != null) { + anyParentIsRemoving = parent.isRemoving(); + parent = parent.getParentFragment(); + } + + if (isRemoving() || anyParentIsRemoving) { + getMvpDelegate().onDestroy(); + } + } + + /** + * @return The {@link MvpDelegate} being used by this Fragment. + */ + public MvpDelegate getMvpDelegate() { + if (mMvpDelegate == null) { + mMvpDelegate = new MvpDelegate<>(this); + } + + return mMvpDelegate; + } +} \ No newline at end of file diff --git a/moxy-androidx/stub-androidx/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java b/moxy-androidx/stub-androidx/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java new file mode 100644 index 00000000..cb69244c --- /dev/null +++ b/moxy-androidx/stub-androidx/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java @@ -0,0 +1,15 @@ +package androidx.appcompat.app; + + +import androidx.fragment.app.DialogFragment; + +/** + * Date: 25-Fed-18 + * Time: 11:50 + * + * @author Roman Savelev + */ +public class AppCompatDialogFragment extends DialogFragment +{ + +} diff --git a/moxy-androidx/stub-androidx/src/main/java/androidx/fragment/app/DialogFragment.java b/moxy-androidx/stub-androidx/src/main/java/androidx/fragment/app/DialogFragment.java new file mode 100644 index 00000000..435ac2a0 --- /dev/null +++ b/moxy-androidx/stub-androidx/src/main/java/androidx/fragment/app/DialogFragment.java @@ -0,0 +1,11 @@ +package androidx.fragment.app; + +/** + * Date: 25-Fed-18 + * Time: 11:50 + * + * @author Roman Savelev + */ +public class DialogFragment extends Fragment { + +}