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

Commit a0baef44 authored by Bonian Chen's avatar Bonian Chen Committed by Automerger Merge Worker
Browse files

Merge "[Settings] Enable ActivityResultLauncher for keyguard" am: d1e0b46a

parents 61ed6795 d1e0b46a
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@ import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Spinner;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.VisibleForTesting;

import com.android.settings.core.InstrumentedFragment;
@@ -70,6 +73,7 @@ public class ResetNetwork extends InstrumentedFragment {
    // Arbitrary to avoid conficts
    private static final int KEYGUARD_REQUEST = 55;

    private ActivityResultLauncher mActivityResultLauncher;
    private List<SubscriptionInfo> mSubscriptions;

    private View mContentView;
@@ -82,6 +86,10 @@ public class ResetNetwork extends InstrumentedFragment {
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActivity().setTitle(R.string.reset_network_title);

        mActivityResultLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> onActivityLauncherResult(result));
    }

    /**
@@ -96,20 +104,14 @@ public class ResetNetwork extends InstrumentedFragment {
                new ChooseLockSettingsHelper.Builder(getActivity(), this);
        return builder.setRequestCode(request)
                .setTitle(res.getText(R.string.reset_network_title))
                .setActivityResultLauncher(mActivityResultLauncher)
                .show();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode != KEYGUARD_REQUEST) {
            return;
        }

    public void onActivityLauncherResult(ActivityResult result) {
        // If the user entered a valid keyguard trace, present the final
        // confirmation prompt; otherwise, go back to the initial state.
        if (resultCode == Activity.RESULT_OK) {
        if (result.getResultCode() == Activity.RESULT_OK) {
            showFinalConfirmation();
        } else if (mContentView != null) {
            establishInitialState(getActiveSubscriptionInfoList());
+26 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.IntentSender;
import android.os.UserManager;
import android.util.Log;

import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;

@@ -109,19 +110,23 @@ public final class ChooseLockSettingsHelper {
    @VisibleForTesting @NonNull LockPatternUtils mLockPatternUtils;
    @NonNull private final Activity mActivity;
    @Nullable private final Fragment mFragment;
    @Nullable private final ActivityResultLauncher mActivityResultLauncher;
    @NonNull private final Builder mBuilder;

    private ChooseLockSettingsHelper(@NonNull Builder builder, @NonNull Activity activity,
            @Nullable Fragment fragment) {
            @Nullable Fragment fragment,
            @Nullable ActivityResultLauncher activityResultLauncher) {
        mBuilder = builder;
        mActivity = activity;
        mFragment = fragment;
        mActivityResultLauncher = activityResultLauncher;
        mLockPatternUtils = new LockPatternUtils(activity);
    }

    public static class Builder {
        @NonNull private final Activity mActivity;
        @Nullable private Fragment mFragment;
        @Nullable private ActivityResultLauncher mActivityResultLauncher;

        private int mRequestCode;
        @Nullable private CharSequence mTitle;
@@ -265,6 +270,18 @@ public final class ChooseLockSettingsHelper {
            return this;
        }

        /**
         * Support of ActivityResultLauncher.
         *
         * Which allowing the launch operation be controlled externally.
         * @param activityResultLauncher a launcher previously prepared.
         */
        @NonNull public Builder setActivityResultLauncher(
                ActivityResultLauncher activityResultLauncher) {
            mActivityResultLauncher = activityResultLauncher;
            return this;
        }

        @NonNull public ChooseLockSettingsHelper build() {
            if (!mAllowAnyUserId && mUserId != LockPatternUtils.USER_FRP) {
                Utils.enforceSameOwner(mActivity, mUserId);
@@ -282,7 +299,8 @@ public final class ChooseLockSettingsHelper {
                        + " ReturnCredentials. Are you sure this is what you want?");
            }

            return new ChooseLockSettingsHelper(this, mActivity, mFragment);
            return new ChooseLockSettingsHelper(this, mActivity, mFragment,
                    mActivityResultLauncher);
        }

        public boolean show() {
@@ -369,13 +387,17 @@ public final class ChooseLockSettingsHelper {
        if (external) {
            intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
            copyOptionalExtras(inIntent, intent);
            if (mFragment != null) {
            if (mActivityResultLauncher != null) {
                mActivityResultLauncher.launch(intent);
            } else if (mFragment != null) {
                mFragment.startActivity(intent);
            } else {
                mActivity.startActivity(intent);
            }
        } else {
            if (mFragment != null) {
            if (mActivityResultLauncher != null) {
                mActivityResultLauncher.launch(intent);
            } else if (mFragment != null) {
                mFragment.startActivityForResult(intent, request);
            } else {
                mActivity.startActivityForResult(intent, request);