diff options
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java')
-rw-r--r-- | app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java index 0ddf8ffc..151361ba 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/BaseSetupFragment.java @@ -1,8 +1,11 @@ package se.leap.bitmaskclient.providersetup.fragments; import android.content.Context; +import android.os.Bundle; +import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.viewpager2.widget.ViewPager2; @@ -10,8 +13,10 @@ import se.leap.bitmaskclient.providersetup.activities.SetupActivityCallback; public class BaseSetupFragment extends Fragment { - SetupActivityCallback setupActivityCallback; + public static String EXTRA_POSITION = "EXTRA_POSITION"; private boolean callFragmentSelected = false; + SetupActivityCallback setupActivityCallback; + private final ViewPager2.OnPageChangeCallback viewPagerCallback = new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { @@ -23,10 +28,21 @@ public class BaseSetupFragment extends Fragment { } } }; - private final int position; + private int position; - public BaseSetupFragment(int position) { - this.position = position; + public static Bundle initBundle(int pos) { + Bundle bundle = new Bundle(); + bundle.putInt(EXTRA_POSITION, pos); + return bundle; + } + + public BaseSetupFragment() { + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.position = getArguments().getInt(EXTRA_POSITION); } @Override @@ -34,15 +50,26 @@ public class BaseSetupFragment extends Fragment { super.onAttach(context); if (getActivity() instanceof SetupActivityCallback) { setupActivityCallback = (SetupActivityCallback) getActivity(); - setupActivityCallback.registerOnPageChangeCallback(viewPagerCallback); - if (setupActivityCallback.getCurrentPosition() == position) { - handleCallFragmentSelected(); - } } else { throw new IllegalStateException("These setup fragments are closely coupled to SetupActivityCallback interface. Activities instantiating them are required to implement the interface"); } } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putInt(EXTRA_POSITION, position); + super.onSaveInstanceState(outState); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + setupActivityCallback.registerOnPageChangeCallback(viewPagerCallback); + if (setupActivityCallback.getCurrentPosition() == position) { + handleCallFragmentSelected(); + } + } + private void handleCallFragmentSelected() { if (!callFragmentSelected) { callFragmentSelected = true; @@ -51,11 +78,16 @@ public class BaseSetupFragment extends Fragment { } @Override - public void onDetach() { - super.onDetach(); + public void onDestroyView() { setupActivityCallback.removeOnPageChangeCallback(viewPagerCallback); - setupActivityCallback = null; callFragmentSelected = false; + super.onDestroyView(); + } + + @Override + public void onDetach() { + setupActivityCallback = null; + super.onDetach(); } public void onFragmentSelected() { |