Fix ActivityResultLauncher lifecycle issues
If an activity is re-created, its result launchers that were registered
during instantiation are not available, so register those in onCreate
instead and unregister in onDestroy.
Change-Id: I7fd2a61ddbb056e0bf761b6918dc371db8ddbe33
diff --git a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
index 04e07d2..8687d08 100644
--- a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
+++ b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
@@ -50,10 +50,7 @@
private NavigationLayout mNavigationBar;
- private final ActivityResultLauncher<Intent> mNextIntentResultLauncher =
- registerForActivityResult(
- new StartDecoratedActivityForResult(),
- BaseSetupWizardActivity.this::onNextIntentResult);
+ private ActivityResultLauncher<Intent> mNextIntentResultLauncher;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -61,6 +58,9 @@
logActivityState("onCreate savedInstanceState=" + savedInstanceState);
}
super.onCreate(savedInstanceState);
+ mNextIntentResultLauncher = registerForActivityResult(
+ new StartDecoratedActivityForResult(),
+ BaseSetupWizardActivity.this::onNextIntentResult);
initLayout();
mNavigationBar = getNavigationBar();
if (mNavigationBar != null) {
@@ -125,6 +125,7 @@
logActivityState("onDestroy");
}
super.onDestroy();
+ mNextIntentResultLauncher.unregister();
}
@Override
diff --git a/src/org/lineageos/setupwizard/SubBaseActivity.java b/src/org/lineageos/setupwizard/SubBaseActivity.java
index 7c83658..fe6ab12 100644
--- a/src/org/lineageos/setupwizard/SubBaseActivity.java
+++ b/src/org/lineageos/setupwizard/SubBaseActivity.java
@@ -28,10 +28,7 @@
protected abstract void onStartSubactivity();
- private final ActivityResultLauncher<Intent> mSubactivityResultLauncher =
- registerForActivityResult(
- new StartDecoratedActivityForResult(),
- SubBaseActivity.this::onSubactivityResult);
+ private ActivityResultLauncher<Intent> mSubactivityResultLauncher;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -39,6 +36,9 @@
Log.d(TAG, "onCreate savedInstanceState=" + savedInstanceState);
}
super.onCreate(savedInstanceState);
+ mSubactivityResultLauncher = registerForActivityResult(
+ new StartDecoratedActivityForResult(),
+ SubBaseActivity.this::onSubactivityResult);
setNextAllowed(false);
if (savedInstanceState == null) {
onStartSubactivity();
@@ -46,6 +46,12 @@
}
@Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mSubactivityResultLauncher.unregister();
+ }
+
+ @Override
public void onStart() {
super.onStart();
}