[Settings] Add a verification flow for exiting repair mode

Handles the ACTION_CONFIRM_REPAIR_MODE_DEVICE_CREDENTIAL
intent to launch the confirm device credential activity for
users to exiting repair mode. The activity passes a special
user id USER_REPAIR_MODE to the framework and verify credentials
that the user enrolled in normal mode.

Bug: 277561275
Test: am start -a android.app.action.PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL
      settings put global repair_mode_active 1
      am start -a android.app.action.CONFIRM_REPAIR_MODE_DEVICE_CREDENTIAL
      The credential is verified successfully.
Change-Id: I9ffe32f9925ee2b990c49d5674d27196a4c9edf7
This commit is contained in:
Rhed Jao
2023-04-17 11:39:40 +00:00
parent cc1fe61339
commit b7a4a7daa4
8 changed files with 68 additions and 8 deletions

View File

@@ -708,9 +708,13 @@ public final class Utils extends com.android.settingslib.Utils {
final int userId = bundle.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId());
if (userId == LockPatternUtils.USER_FRP) {
return allowAnyUser ? userId : checkUserOwnsFrpCredential(context, userId);
} else {
return allowAnyUser ? userId : enforceSameOwner(context, userId);
}
if (userId == LockPatternUtils.USER_REPAIR_MODE) {
enforceRepairModeActive(context);
// any users can exit repair mode
return userId;
}
return allowAnyUser ? userId : enforceSameOwner(context, userId);
}
/**
@@ -729,6 +733,16 @@ public final class Utils extends com.android.settingslib.Utils {
+ " does not own frp credential.");
}
/**
* Throws {@link SecurityException} if repair mode is not active on the device.
*/
private static void enforceRepairModeActive(Context context) {
if (LockPatternUtils.isRepairModeActive(context)) {
return;
}
throw new SecurityException("Repair mode is not active on the device.");
}
/**
* Returns the given user id if it belongs to the current user.
*