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

Commit 18df885c authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Android (Google) Code Review
Browse files

Merge "Use updated lockscreen validation API in Settings." into udc-dev

parents bcca5ebf 1ab3fe5a
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.KeyguardManager;
import android.app.StartLockscreenValidationRequest;
import android.app.RemoteLockscreenValidationSession;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
@@ -145,7 +145,7 @@ public final class ChooseLockSettingsHelper {
        private boolean mAllowAnyUserId;
        private boolean mForceVerifyPath;
        private boolean mRemoteLockscreenValidation;
        @Nullable private StartLockscreenValidationRequest mStartLockscreenValidationRequest;
        @Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
        @Nullable private ComponentName mRemoteLockscreenValidationServiceComponent;
        boolean mRequestGatekeeperPasswordHandle;

@@ -272,7 +272,7 @@ public final class ChooseLockSettingsHelper {

        /**
         * @param isRemoteLockscreenValidation if true, remote device validation flow will be
         *                                 started. {@link #setStartLockscreenValidationRequest} and
         *                                 started. {@link #setRemoteLockscreenValidationSession},
         *                                 {@link #setRemoteLockscreenValidationServiceComponent}
         *                                 must also be used to set the required data.
         */
@@ -283,14 +283,14 @@ public final class ChooseLockSettingsHelper {
        }

        /**
         * @param startLockScreenValidationRequest contains information necessary to perform remote
         * @param remoteLockscreenValidationSession contains information necessary to perform remote
         *                                         lockscreen validation such as the remote device's
         *                                         lockscreen type, public key to be used for
         *                                         encryption, and remaining attempts.
         */
        @NonNull public Builder setStartLockscreenValidationRequest(
                StartLockscreenValidationRequest startLockScreenValidationRequest) {
            mStartLockscreenValidationRequest = startLockScreenValidationRequest;
        @NonNull public Builder setRemoteLockscreenValidationSession(
                RemoteLockscreenValidationSession remoteLockscreenValidationSession) {
            mRemoteLockscreenValidationSession = remoteLockscreenValidationSession;
            return this;
        }

@@ -369,7 +369,7 @@ public final class ChooseLockSettingsHelper {
                mBuilder.mDescription, mBuilder.mReturnCredentials, mBuilder.mExternal,
                mBuilder.mForceVerifyPath, mBuilder.mUserId, mBuilder.mAlternateButton,
                mBuilder.mCheckBoxLabel, mBuilder.mRemoteLockscreenValidation,
                mBuilder.mStartLockscreenValidationRequest,
                mBuilder.mRemoteLockscreenValidationSession,
                mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId,
                mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle);
    }
@@ -379,18 +379,18 @@ public final class ChooseLockSettingsHelper {
            boolean returnCredentials, boolean external, boolean forceVerifyPath,
            int userId, @Nullable CharSequence alternateButton,
            @Nullable CharSequence checkboxLabel, boolean remoteLockscreenValidation,
            @Nullable StartLockscreenValidationRequest startLockScreenValidationRequest,
            @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
            @Nullable ComponentName remoteLockscreenValidationServiceComponent,
            boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) {
        Optional<Class<?>> activityClass = determineAppropriateActivityClass(
                returnCredentials, forceVerifyPath, userId, startLockScreenValidationRequest);
                returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession);
        if (activityClass.isEmpty()) {
            return false;
        }

        return launchConfirmationActivity(request, title, header, description, activityClass.get(),
                returnCredentials, external, forceVerifyPath, userId, alternateButton,
                checkboxLabel, remoteLockscreenValidation, startLockScreenValidationRequest,
                checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession,
                remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly,
                requestGatekeeperPasswordHandle);
    }
@@ -400,7 +400,7 @@ public final class ChooseLockSettingsHelper {
            boolean external, boolean forceVerifyPath, int userId,
            @Nullable CharSequence alternateButton, @Nullable CharSequence checkbox,
            boolean remoteLockscreenValidation,
            @Nullable StartLockscreenValidationRequest startLockScreenValidationRequest,
            @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
            @Nullable ComponentName remoteLockscreenValidationServiceComponent,
            boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) {
        final Intent intent = new Intent();
@@ -419,8 +419,8 @@ public final class ChooseLockSettingsHelper {
        intent.putExtra(Intent.EXTRA_USER_ID, userId);
        intent.putExtra(KeyguardManager.EXTRA_ALTERNATE_BUTTON_LABEL, alternateButton);
        intent.putExtra(KeyguardManager.EXTRA_CHECKBOX_LABEL, checkbox);
        intent.putExtra(KeyguardManager.EXTRA_START_LOCKSCREEN_VALIDATION_REQUEST,
                startLockScreenValidationRequest);
        intent.putExtra(KeyguardManager.EXTRA_REMOTE_LOCKSCREEN_VALIDATION_SESSION,
                remoteLockscreenValidationSession);
        intent.putExtra(Intent.EXTRA_COMPONENT_NAME, remoteLockscreenValidationServiceComponent);
        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOREGROUND_ONLY, foregroundOnly);
        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, allowAnyUser);
@@ -477,10 +477,10 @@ public final class ChooseLockSettingsHelper {

    private Optional<Class<?>> determineAppropriateActivityClass(boolean returnCredentials,
            boolean forceVerifyPath, int userId,
            @Nullable StartLockscreenValidationRequest startLockscreenValidationRequest) {
            @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession) {
        int lockType;
        if (startLockscreenValidationRequest != null) {
            lockType = startLockscreenValidationRequest.getLockscreenUiType();
        if (remoteLockscreenValidationSession != null) {
            lockType = remoteLockscreenValidationSession.getLockType();
        } else {
            final int effectiveUserId = UserManager
                    .get(mActivity).getCredentialOwnerProfile(userId);
+5 −5
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;

import android.app.Activity;
import android.app.KeyguardManager;
import android.app.StartLockscreenValidationRequest;
import android.app.RemoteLockscreenValidationSession;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.ComponentName;
@@ -235,10 +235,10 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
                    .setUserId(LockPatternUtils.USER_FRP)
                    .show();
        } else if (remoteValidation) {
            StartLockscreenValidationRequest startLockScreenValidationRequest =
            RemoteLockscreenValidationSession remoteLockscreenValidationSession =
                    intent.getParcelableExtra(
                            KeyguardManager.EXTRA_START_LOCKSCREEN_VALIDATION_REQUEST,
                            StartLockscreenValidationRequest.class);
                            KeyguardManager.EXTRA_REMOTE_LOCKSCREEN_VALIDATION_SESSION,
                            RemoteLockscreenValidationSession.class);
            ComponentName remoteLockscreenValidationServiceComponent =
                    intent.getParcelableExtra(Intent.EXTRA_COMPONENT_NAME, ComponentName.class);

@@ -247,7 +247,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
                    new ChooseLockSettingsHelper.Builder(this);
            launchedCDC = builder
                    .setRemoteLockscreenValidation(true)
                    .setStartLockscreenValidationRequest(startLockScreenValidationRequest)
                    .setRemoteLockscreenValidationSession(remoteLockscreenValidationSession)
                    .setRemoteLockscreenValidationServiceComponent(
                            remoteLockscreenValidationServiceComponent)
                    .setHeader(mTitle) // Show the title in the header location
+9 −9
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import android.annotation.Nullable;
import android.app.Dialog;
import android.app.KeyguardManager;
import android.app.RemoteLockscreenValidationResult;
import android.app.StartLockscreenValidationRequest;
import android.app.RemoteLockscreenValidationSession;
import android.app.admin.DevicePolicyManager;
import android.app.admin.ManagedSubscriptionsPolicy;
import android.content.ComponentName;
@@ -107,7 +107,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
    protected boolean mRemoteValidation;
    protected CharSequence mAlternateButtonText;
    protected BiometricManager mBiometricManager;
    @Nullable protected StartLockscreenValidationRequest mStartLockscreenValidationRequest;
    @Nullable protected RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
    /** Credential saved so the credential can be set for device if remote validation passes */
    @Nullable protected LockscreenCredential mDeviceCredentialGuess;
    @Nullable protected RemoteLockscreenValidationClient mRemoteLockscreenValidationClient;
@@ -141,12 +141,12 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
            }
        }
        if (mRemoteValidation) {
            mStartLockscreenValidationRequest = intent.getParcelableExtra(
                    KeyguardManager.EXTRA_START_LOCKSCREEN_VALIDATION_REQUEST,
                    StartLockscreenValidationRequest.class);
            if (mStartLockscreenValidationRequest == null
                    || mStartLockscreenValidationRequest.getRemainingAttempts() == 0) {
                Log.e(TAG, "StartLockscreenValidationRequest is null or "
            mRemoteLockscreenValidationSession = intent.getParcelableExtra(
                    KeyguardManager.EXTRA_REMOTE_LOCKSCREEN_VALIDATION_SESSION,
                    RemoteLockscreenValidationSession.class);
            if (mRemoteLockscreenValidationSession == null
                    || mRemoteLockscreenValidationSession.getRemainingAttempts() == 0) {
                Log.e(TAG, "RemoteLockscreenValidationSession is null or "
                        + "no more attempts for remote lockscreen validation.");
                getActivity().finish();
            }
@@ -437,7 +437,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr

    private byte[] encryptDeviceCredentialGuess(byte[] guess) {
        try {
            byte[] encodedPublicKey = mStartLockscreenValidationRequest.getSourcePublicKey();
            byte[] encodedPublicKey = mRemoteLockscreenValidationSession.getSourcePublicKey();
            PublicKey publicKey = SecureBox.decodePublicKey(encodedPublicKey);
            return SecureBox.encrypt(
                    publicKey,
+4 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
            mErrorTextView = (TextView) view.findViewById(R.id.errorText);

            if (mRemoteValidation) {
                mIsAlpha = mStartLockscreenValidationRequest.getLockscreenUiType()
                mIsAlpha = mRemoteLockscreenValidationSession.getLockType()
                        == KeyguardManager.PASSWORD;
                // ProgressBar visibility is set to GONE until interacted with.
                // Set progress bar to INVISIBLE, so the EditText does not get bumped down later.
@@ -633,6 +633,9 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
                    break;
                case RemoteLockscreenValidationResult.RESULT_NO_REMAINING_ATTEMPTS:
                    getActivity().finish();
                    break;
                case RemoteLockscreenValidationResult.RESULT_SESSION_EXPIRED:
                    getActivity().finish();
            }
            mGlifLayout.setProgressBarShown(false);
        }
+3 −0
Original line number Diff line number Diff line
@@ -646,6 +646,9 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
                    break;
                case RemoteLockscreenValidationResult.RESULT_NO_REMAINING_ATTEMPTS:
                    getActivity().finish();
                    break;
                case RemoteLockscreenValidationResult.RESULT_SESSION_EXPIRED:
                    getActivity().finish();
            }
            mGlifLayout.setProgressBarShown(false);
        }
Loading