From 8ffc4c8b7dac3a479b5d58953f53713c72e82360 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 30 Apr 2019 11:15:24 +0300 Subject: [PATCH] MvpBottomSheetDialogFragment added --- .../mvp/MvpBottomSheetDialogFragment.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 moxy-androidx/src/main/java/com/omegar/mvp/MvpBottomSheetDialogFragment.java diff --git a/moxy-androidx/src/main/java/com/omegar/mvp/MvpBottomSheetDialogFragment.java b/moxy-androidx/src/main/java/com/omegar/mvp/MvpBottomSheetDialogFragment.java new file mode 100644 index 00000000..bf70340f --- /dev/null +++ b/moxy-androidx/src/main/java/com/omegar/mvp/MvpBottomSheetDialogFragment.java @@ -0,0 +1,97 @@ +package com.omegar.mvp; + +import android.os.Build; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; + +public class MvpBottomSheetDialogFragment extends BottomSheetDialogFragment { + + 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; + + if (Build.VERSION.SDK_INT >= 17) { + 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; + } + +}