From b5921fade9f16feaf0562d10ffd87de08c6d5154 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Wed, 23 Nov 2022 12:48:34 +0000 Subject: [PATCH] [Settings] Enable ActivityResultLauncher for keyguard Enable the support of ActivityResultLauncher for keyguard. Bug: 260034791 Test: local Change-Id: I0643241d7b79ba0ac4cd2314a126f33eb6557cc0 --- src/com/android/settings/ResetNetwork.java | 20 +++++++------ .../password/ChooseLockSettingsHelper.java | 30 ++++++++++++++++--- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java index 688e2abe71e..17a9bdd9468 100644 --- a/src/com/android/settings/ResetNetwork.java +++ b/src/com/android/settings/ResetNetwork.java @@ -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 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()); diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java index e4d52ba1d21..85c203dd1de 100644 --- a/src/com/android/settings/password/ChooseLockSettingsHelper.java +++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java @@ -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);