Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5948809b authored by Tommy Webb's avatar Tommy Webb
Browse files

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
parent 635998c4
Loading
Loading
Loading
Loading
+28 −11
Original line number Diff line number Diff line
@@ -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<Intent> activityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            BaseSetupWizardActivity.this::onActivityResult);
    private final ActivityResultLauncher<Intent> 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<Intent, ActivityResult> {

        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);
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+18 −3
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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) {