Merge "[Settings] Enable ActivityResultLauncher for keyguard" am: d1e0b46a44 am: a0baef444d

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2313406

Change-Id: I5f54b27ea703417acc13421fb4810df5b79a5cf3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Bonian Chen
2022-11-24 15:10:40 +00:00
committed by Automerger Merge Worker
2 changed files with 37 additions and 13 deletions

View File

@@ -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());

View File

@@ -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);