Passing the writing repair mode password flag to verify credential api
Handles the ACTION_PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL intent to prompt the user for device credentials. Passing the writing repair mode password flag to the verify credential api when the user is authenticating. Bug: 277561275 Test: am start -a android.app.action.PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL Change-Id: Id018586b0ed535555c157b7516c9571b049978ad
This commit is contained in:
@@ -2397,6 +2397,7 @@
|
|||||||
<intent-filter android:priority="1">
|
<intent-filter android:priority="1">
|
||||||
<action android:name="android.app.action.CONFIRM_DEVICE_CREDENTIAL" />
|
<action android:name="android.app.action.CONFIRM_DEVICE_CREDENTIAL" />
|
||||||
<action android:name="android.app.action.CONFIRM_FRP_CREDENTIAL" />
|
<action android:name="android.app.action.CONFIRM_FRP_CREDENTIAL" />
|
||||||
|
<action android:name="android.app.action.PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
@@ -71,6 +71,8 @@ public final class ChooseLockSettingsHelper {
|
|||||||
// Gatekeeper password handle, which can subsequently be used to generate Gatekeeper
|
// Gatekeeper password handle, which can subsequently be used to generate Gatekeeper
|
||||||
// HardwareAuthToken(s) via LockSettingsService#verifyGatekeeperPasswordHandle
|
// HardwareAuthToken(s) via LockSettingsService#verifyGatekeeperPasswordHandle
|
||||||
public static final String EXTRA_KEY_GK_PW_HANDLE = "gk_pw_handle";
|
public static final String EXTRA_KEY_GK_PW_HANDLE = "gk_pw_handle";
|
||||||
|
public static final String EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW =
|
||||||
|
"request_write_repair_mode_pw";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL and EXTRA_KEY_UNIFICATION_PROFILE_ID are
|
* When EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL and EXTRA_KEY_UNIFICATION_PROFILE_ID are
|
||||||
@@ -152,6 +154,7 @@ public final class ChooseLockSettingsHelper {
|
|||||||
@Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
|
@Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
|
||||||
@Nullable private ComponentName mRemoteLockscreenValidationServiceComponent;
|
@Nullable private ComponentName mRemoteLockscreenValidationServiceComponent;
|
||||||
private boolean mRequestGatekeeperPasswordHandle;
|
private boolean mRequestGatekeeperPasswordHandle;
|
||||||
|
private boolean mRequestWriteRepairModePassword;
|
||||||
private boolean mTaskOverlay;
|
private boolean mTaskOverlay;
|
||||||
|
|
||||||
public Builder(@NonNull Activity activity) {
|
public Builder(@NonNull Activity activity) {
|
||||||
@@ -335,6 +338,17 @@ public final class ChooseLockSettingsHelper {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param requestWriteRepairModePassword Set {@code true} to request that
|
||||||
|
* LockSettingsService writes the password data to the repair mode file after the user
|
||||||
|
* credential is verified successfully.
|
||||||
|
*/
|
||||||
|
@NonNull public Builder setRequestWriteRepairModePassword(
|
||||||
|
boolean requestWriteRepairModePassword) {
|
||||||
|
mRequestWriteRepairModePassword = requestWriteRepairModePassword;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Support of ActivityResultLauncher.
|
* Support of ActivityResultLauncher.
|
||||||
*
|
*
|
||||||
@@ -385,7 +399,7 @@ public final class ChooseLockSettingsHelper {
|
|||||||
mBuilder.mRemoteLockscreenValidationSession,
|
mBuilder.mRemoteLockscreenValidationSession,
|
||||||
mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId,
|
mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId,
|
||||||
mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle,
|
mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle,
|
||||||
mBuilder.mTaskOverlay);
|
mBuilder.mRequestWriteRepairModePassword, mBuilder.mTaskOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
|
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
|
||||||
@@ -396,7 +410,7 @@ public final class ChooseLockSettingsHelper {
|
|||||||
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
|
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
|
||||||
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
|
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
|
||||||
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
|
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
|
||||||
boolean taskOverlay) {
|
boolean requestWriteRepairModePassword, boolean taskOverlay) {
|
||||||
Optional<Class<?>> activityClass = determineAppropriateActivityClass(
|
Optional<Class<?>> activityClass = determineAppropriateActivityClass(
|
||||||
returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession);
|
returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession);
|
||||||
if (activityClass.isEmpty()) {
|
if (activityClass.isEmpty()) {
|
||||||
@@ -407,7 +421,7 @@ public final class ChooseLockSettingsHelper {
|
|||||||
returnCredentials, external, forceVerifyPath, userId, alternateButton,
|
returnCredentials, external, forceVerifyPath, userId, alternateButton,
|
||||||
checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession,
|
checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession,
|
||||||
remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly,
|
remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly,
|
||||||
requestGatekeeperPasswordHandle, taskOverlay);
|
requestGatekeeperPasswordHandle, requestWriteRepairModePassword, taskOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header,
|
private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header,
|
||||||
@@ -418,7 +432,7 @@ public final class ChooseLockSettingsHelper {
|
|||||||
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
|
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
|
||||||
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
|
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
|
||||||
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
|
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
|
||||||
boolean taskOverlay) {
|
boolean requestWriteRepairModePassword, boolean taskOverlay) {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title);
|
intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title);
|
||||||
intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header);
|
intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header);
|
||||||
@@ -442,6 +456,8 @@ public final class ChooseLockSettingsHelper {
|
|||||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, allowAnyUser);
|
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, allowAnyUser);
|
||||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE,
|
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE,
|
||||||
requestGatekeeperPasswordHandle);
|
requestGatekeeperPasswordHandle);
|
||||||
|
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW,
|
||||||
|
requestWriteRepairModePassword);
|
||||||
|
|
||||||
intent.setClassName(SETTINGS_PACKAGE_NAME, activityClass.getName());
|
intent.setClassName(SETTINGS_PACKAGE_NAME, activityClass.getName());
|
||||||
intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
|
intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
|
||||||
|
@@ -171,6 +171,9 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
|||||||
KeyguardManager.ACTION_CONFIRM_REMOTE_DEVICE_CREDENTIAL.equals(intent.getAction());
|
KeyguardManager.ACTION_CONFIRM_REMOTE_DEVICE_CREDENTIAL.equals(intent.getAction());
|
||||||
mTaskOverlay = isInternalActivity()
|
mTaskOverlay = isInternalActivity()
|
||||||
&& intent.getBooleanExtra(KeyguardManager.EXTRA_FORCE_TASK_OVERLAY, false);
|
&& intent.getBooleanExtra(KeyguardManager.EXTRA_FORCE_TASK_OVERLAY, false);
|
||||||
|
final boolean prepareRepairMode =
|
||||||
|
KeyguardManager.ACTION_PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL.equals(
|
||||||
|
intent.getAction());
|
||||||
|
|
||||||
mUserId = UserHandle.myUserId();
|
mUserId = UserHandle.myUserId();
|
||||||
if (isInternalActivity()) {
|
if (isInternalActivity()) {
|
||||||
@@ -244,6 +247,17 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
|||||||
.setExternal(true)
|
.setExternal(true)
|
||||||
.show();
|
.show();
|
||||||
return;
|
return;
|
||||||
|
} else if (prepareRepairMode) {
|
||||||
|
final ChooseLockSettingsHelper.Builder builder =
|
||||||
|
new ChooseLockSettingsHelper.Builder(this);
|
||||||
|
launchedCDC = builder.setHeader(mTitle)
|
||||||
|
.setDescription(mDetails)
|
||||||
|
.setExternal(true)
|
||||||
|
.setUserId(mUserId)
|
||||||
|
.setTaskOverlay(mTaskOverlay)
|
||||||
|
.setRequestWriteRepairModePassword(true)
|
||||||
|
.setForceVerifyPath(true)
|
||||||
|
.show();
|
||||||
} else if (isEffectiveUserManagedProfile && isInternalActivity()) {
|
} else if (isEffectiveUserManagedProfile && isInternalActivity()) {
|
||||||
mCredentialMode = CREDENTIAL_MANAGED;
|
mCredentialMode = CREDENTIAL_MANAGED;
|
||||||
if (isBiometricAllowed(effectiveUserId, mUserId)) {
|
if (isBiometricAllowed(effectiveUserId, mUserId)) {
|
||||||
|
@@ -105,6 +105,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
protected final Handler mHandler = new Handler();
|
protected final Handler mHandler = new Handler();
|
||||||
protected boolean mFrp;
|
protected boolean mFrp;
|
||||||
protected boolean mRemoteValidation;
|
protected boolean mRemoteValidation;
|
||||||
|
protected boolean mRequestWriteRepairModePassword;
|
||||||
protected CharSequence mAlternateButtonText;
|
protected CharSequence mAlternateButtonText;
|
||||||
protected BiometricManager mBiometricManager;
|
protected BiometricManager mBiometricManager;
|
||||||
@Nullable protected RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
|
@Nullable protected RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
|
||||||
@@ -130,6 +131,8 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false);
|
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false);
|
||||||
mForceVerifyPath = intent.getBooleanExtra(
|
mForceVerifyPath = intent.getBooleanExtra(
|
||||||
ChooseLockSettingsHelper.EXTRA_KEY_FORCE_VERIFY, false);
|
ChooseLockSettingsHelper.EXTRA_KEY_FORCE_VERIFY, false);
|
||||||
|
mRequestWriteRepairModePassword = intent.getBooleanExtra(
|
||||||
|
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, false);
|
||||||
|
|
||||||
if (intent.getBooleanExtra(IS_REMOTE_LOCKSCREEN_VALIDATION, false)) {
|
if (intent.getBooleanExtra(IS_REMOTE_LOCKSCREEN_VALIDATION, false)) {
|
||||||
if (FeatureFlagUtils.isEnabled(getContext(),
|
if (FeatureFlagUtils.isEnabled(getContext(),
|
||||||
|
@@ -496,7 +496,9 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
}
|
}
|
||||||
} else if (mForceVerifyPath) {
|
} else if (mForceVerifyPath) {
|
||||||
if (isInternalActivity()) {
|
if (isInternalActivity()) {
|
||||||
startVerifyPassword(credential, intent, 0 /* flags */);
|
final int flags = mRequestWriteRepairModePassword
|
||||||
|
? LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW : 0;
|
||||||
|
startVerifyPassword(credential, intent, flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@@ -523,7 +523,9 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
}
|
}
|
||||||
} else if (mForceVerifyPath) {
|
} else if (mForceVerifyPath) {
|
||||||
if (isInternalActivity()) {
|
if (isInternalActivity()) {
|
||||||
startVerifyPattern(credential, intent, 0 /* flags */);
|
final int flags = mRequestWriteRepairModePassword
|
||||||
|
? LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW : 0;
|
||||||
|
startVerifyPattern(credential, intent, flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user