diff --git a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java index 5dc3afea..04e07d2b 100644 --- a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java +++ b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java @@ -8,12 +8,15 @@ package org.lineageos.setupwizard; import static android.view.View.INVISIBLE; +import static androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; + import static com.google.android.setupcompat.util.ResultCodes.RESULT_SKIP; import static org.lineageos.setupwizard.SetupWizardApp.LOGV; import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.wifi.WifiManager; @@ -26,7 +29,7 @@ import android.widget.Button; import androidx.activity.OnBackPressedCallback; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; +import androidx.activity.result.contract.ActivityResultContract; import androidx.appcompat.app.AppCompatActivity; import com.android.settingslib.Utils; @@ -47,9 +50,10 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen private NavigationLayout mNavigationBar; - private final ActivityResultLauncher activityResultLauncher = registerForActivityResult( - new ActivityResultContracts.StartActivityForResult(), - BaseSetupWizardActivity.this::onActivityResult); + private final ActivityResultLauncher mNextIntentResultLauncher = + registerForActivityResult( + new StartDecoratedActivityForResult(), + BaseSetupWizardActivity.this::onNextIntentResult); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -252,7 +256,7 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen } setResult(resultCode, data); Intent intent = WizardManagerHelper.getNextIntent(getIntent(), resultCode, data); - startActivityForResult(intent); + mNextIntentResultLauncher.launch(intent); } /** Adorn the Intent with Setup Wizard-related extras. */ @@ -268,15 +272,11 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen super.startActivity(decorateIntent(intent)); } - protected final void startActivityForResult(@NonNull Intent intent) { - activityResultLauncher.launch(decorateIntent(intent)); - } - - protected void onActivityResult(ActivityResult activityResult) { + protected void onNextIntentResult(@NonNull ActivityResult activityResult) { int resultCode = activityResult.getResultCode(); Intent data = activityResult.getData(); if (LOGV) { - StringBuilder append = new StringBuilder().append("onActivityResult(") + StringBuilder append = new StringBuilder().append("onNextIntentResult(") .append(resultCode).append(", "); Bundle extras = null; if (data != null) { @@ -340,4 +340,21 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen TransitionHelper.applyBackwardTransition(BaseSetupWizardActivity.this, DEFAULT_TRANSITION, true); } + + protected final class StartDecoratedActivityForResult + extends ActivityResultContract { + + private final StartActivityForResult mWrappedContract = new StartActivityForResult(); + + @NonNull + @Override + public Intent createIntent(@NonNull Context context, @NonNull Intent intent) { + return decorateIntent(mWrappedContract.createIntent(context, intent)); + } + + @Override + public ActivityResult parseResult(int resultCode, @Nullable Intent result) { + return mWrappedContract.parseResult(resultCode, result); + } + } } diff --git a/src/org/lineageos/setupwizard/BluetoothSetupActivity.java b/src/org/lineageos/setupwizard/BluetoothSetupActivity.java index 91ba5569..26127ee2 100644 --- a/src/org/lineageos/setupwizard/BluetoothSetupActivity.java +++ b/src/org/lineageos/setupwizard/BluetoothSetupActivity.java @@ -43,7 +43,7 @@ public class BluetoothSetupActivity extends SubBaseActivity { } @Override - protected void onActivityResult(ActivityResult activityResult) { + protected void onSubactivityResult(ActivityResult activityResult) { Intent data = activityResult.getData(); if (mIsSubactivityNotFound) { finishAction(RESULT_ACTIVITY_NOT_FOUND); diff --git a/src/org/lineageos/setupwizard/SimMissingActivity.java b/src/org/lineageos/setupwizard/SimMissingActivity.java index d5214973..8cac4a49 100644 --- a/src/org/lineageos/setupwizard/SimMissingActivity.java +++ b/src/org/lineageos/setupwizard/SimMissingActivity.java @@ -27,7 +27,7 @@ public class SimMissingActivity extends SubBaseActivity { } @Override - protected void onActivityResult(ActivityResult activityResult) { + protected void onSubactivityResult(ActivityResult activityResult) { int resultCode = activityResult.getResultCode(); Intent data = activityResult.getData(); if (resultCode != RESULT_CANCELED) { diff --git a/src/org/lineageos/setupwizard/SubBaseActivity.java b/src/org/lineageos/setupwizard/SubBaseActivity.java index 05caf36b..4751bd44 100644 --- a/src/org/lineageos/setupwizard/SubBaseActivity.java +++ b/src/org/lineageos/setupwizard/SubBaseActivity.java @@ -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 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) { diff --git a/src/org/lineageos/setupwizard/backup/RestoreIntroActivity.java b/src/org/lineageos/setupwizard/backup/RestoreIntroActivity.java index b43798b6..b81d5523 100644 --- a/src/org/lineageos/setupwizard/backup/RestoreIntroActivity.java +++ b/src/org/lineageos/setupwizard/backup/RestoreIntroActivity.java @@ -28,7 +28,7 @@ public class RestoreIntroActivity extends SubBaseActivity { } @Override - protected void onActivityResult(ActivityResult activityResult) { + protected void onSubactivityResult(ActivityResult activityResult) { int resultCode = activityResult.getResultCode(); Intent data = activityResult.getData(); if (resultCode != RESULT_CANCELED) {