Rework activity launching and result handling

* Rename or eliminate methods that could be easily confused for AOSP
  methods due to the reuse of AOSP names.
* Separate out the handling of results for subactivites and for the
  next action (intent), each using its own activity launcher and
  callback.
* Add a StartDecoratedActivityForResult contract to ease the launching
  of activities without the caller needing to add SUW-related extras.

Change-Id: Iffaba4c51b2c90c42b8b243874a62cdea9e0c793
This commit is contained in:
Tommy Webb
2024-07-24 21:26:36 +00:00
parent 635998c42d
commit 5948809bb4
5 changed files with 49 additions and 17 deletions

View File

@@ -18,6 +18,7 @@ import android.os.Bundle;
import android.util.Log;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultLauncher;
public abstract class SubBaseActivity extends BaseSetupWizardActivity {
@@ -27,6 +28,11 @@ public abstract class SubBaseActivity extends BaseSetupWizardActivity {
protected abstract void onStartSubactivity();
private final ActivityResultLauncher<Intent> mSubactivityResultLauncher =
registerForActivityResult(
new StartDecoratedActivityForResult(),
SubBaseActivity.this::onSubactivityResult);
@Override
protected void onCreate(Bundle savedInstanceState) {
if (LOGV) {
@@ -61,7 +67,7 @@ public abstract class SubBaseActivity extends BaseSetupWizardActivity {
subactivityIntent.putExtra(EXTRA_WIZARD_BUNDLE, wizardBundle);
}
try {
startActivityForResult(subactivityIntent);
mSubactivityResultLauncher.launch(subactivityIntent);
} catch (ActivityNotFoundException e) {
Log.w(TAG, "activity not found; start next screen and finish; intent=" + intent);
mIsSubactivityNotFound = true;
@@ -70,8 +76,17 @@ public abstract class SubBaseActivity extends BaseSetupWizardActivity {
}
@Override
protected void onActivityResult(ActivityResult activityResult) {
super.onActivityResult(activityResult);
protected void onNextIntentResult(@NonNull ActivityResult activityResult) {
super.onNextIntentResult(activityResult);
int resultCode = activityResult.getResultCode();
Intent data = activityResult.getData();
if (resultCode == RESULT_CANCELED && data != null
&& data.getBooleanExtra("onBackPressed", false)) {
onStartSubactivity();
}
}
protected void onSubactivityResult(@NonNull ActivityResult activityResult) {
int resultCode = activityResult.getResultCode();
Intent data = activityResult.getData();
if (resultCode != RESULT_CANCELED) {