From 0d3264d67fed375bc67fbe4b56dc540e03b738c3 Mon Sep 17 00:00:00 2001 From: Tommy Webb Date: Thu, 1 Aug 2024 19:22:46 +0000 Subject: [PATCH] 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 --- .../setupwizard/BaseSetupWizardActivity.java | 9 +++++---- src/org/lineageos/setupwizard/SubBaseActivity.java | 14 ++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java index 04e07d2b..8687d089 100644 --- a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java +++ b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java @@ -50,10 +50,7 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen private NavigationLayout mNavigationBar; - private final ActivityResultLauncher mNextIntentResultLauncher = - registerForActivityResult( - new StartDecoratedActivityForResult(), - BaseSetupWizardActivity.this::onNextIntentResult); + private ActivityResultLauncher mNextIntentResultLauncher; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -61,6 +58,9 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen logActivityState("onCreate savedInstanceState=" + savedInstanceState); } super.onCreate(savedInstanceState); + mNextIntentResultLauncher = registerForActivityResult( + new StartDecoratedActivityForResult(), + BaseSetupWizardActivity.this::onNextIntentResult); initLayout(); mNavigationBar = getNavigationBar(); if (mNavigationBar != null) { @@ -125,6 +125,7 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen logActivityState("onDestroy"); } super.onDestroy(); + mNextIntentResultLauncher.unregister(); } @Override diff --git a/src/org/lineageos/setupwizard/SubBaseActivity.java b/src/org/lineageos/setupwizard/SubBaseActivity.java index 7c83658d..fe6ab12f 100644 --- a/src/org/lineageos/setupwizard/SubBaseActivity.java +++ b/src/org/lineageos/setupwizard/SubBaseActivity.java @@ -28,10 +28,7 @@ public abstract class SubBaseActivity extends BaseSetupWizardActivity { protected abstract void onStartSubactivity(); - private final ActivityResultLauncher mSubactivityResultLauncher = - registerForActivityResult( - new StartDecoratedActivityForResult(), - SubBaseActivity.this::onSubactivityResult); + private ActivityResultLauncher mSubactivityResultLauncher; @Override protected void onCreate(Bundle savedInstanceState) { @@ -39,12 +36,21 @@ public abstract class SubBaseActivity extends BaseSetupWizardActivity { Log.d(TAG, "onCreate savedInstanceState=" + savedInstanceState); } super.onCreate(savedInstanceState); + mSubactivityResultLauncher = registerForActivityResult( + new StartDecoratedActivityForResult(), + SubBaseActivity.this::onSubactivityResult); setNextAllowed(false); if (savedInstanceState == null) { onStartSubactivity(); } } + @Override + protected void onDestroy() { + super.onDestroy(); + mSubactivityResultLauncher.unregister(); + } + @Override public void onStart() { super.onStart();