diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 0aba9c28d75f0..b7e1246f3a296 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -1672,6 +1672,10 @@ public class LockPatternUtils { setLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 1L, UserHandle.USER_SYSTEM); } + public void disableSyntheticPassword() { + setLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0L, UserHandle.USER_SYSTEM); + } + public boolean isSyntheticPasswordEnabled() { return getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0, UserHandle.USER_SYSTEM) != 0; } diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index f8b72e2f76e37..6855123157e30 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -134,6 +134,7 @@ public class LockSettingsService extends ILockSettings.Stub { private static final int PROFILE_KEY_IV_SIZE = 12; private static final String SEPARATE_PROFILE_CHALLENGE_KEY = "lockscreen.profilechallenge"; + private static final int SYNTHETIC_PASSWORD_ENABLED_BY_DEFAULT = 1; // Order of holding lock: mSeparateChallengeLock -> mSpManager -> this private final Object mSeparateChallengeLock = new Object(); @@ -1895,14 +1896,16 @@ public class LockSettingsService extends ILockSettings.Stub { private boolean isSyntheticPasswordBasedCredentialLocked(int userId) throws RemoteException { long handle = getSyntheticPasswordHandleLocked(userId); // This is a global setting - long enabled = getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0, UserHandle.USER_SYSTEM); + long enabled = getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, + SYNTHETIC_PASSWORD_ENABLED_BY_DEFAULT, UserHandle.USER_SYSTEM); return enabled != 0 && handle != SyntheticPasswordManager.DEFAULT_HANDLE; } private boolean shouldMigrateToSyntheticPasswordLocked(int userId) throws RemoteException { long handle = getSyntheticPasswordHandleLocked(userId); // This is a global setting - long enabled = getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0, UserHandle.USER_SYSTEM); + long enabled = getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, + SYNTHETIC_PASSWORD_ENABLED_BY_DEFAULT, UserHandle.USER_SYSTEM); return enabled != 0 && handle == SyntheticPasswordManager.DEFAULT_HANDLE; } diff --git a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java index d1fb28a1af143..d730c56ae2ca8 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java @@ -71,7 +71,7 @@ class LockSettingsShellCommand extends ShellCommand { runClear(); break; case COMMAND_SP: - runEnableSp(); + runChangeSp(); break; case COMMAND_SET_DISABLED: runSetDisabled(); @@ -107,10 +107,15 @@ class LockSettingsShellCommand extends ShellCommand { mNew = getNextArg(); } - private void runEnableSp() { - if (mNew != null) { - mLockPatternUtils.enableSyntheticPassword(); - getOutPrintWriter().println("Synthetic password enabled"); + private void runChangeSp() { + if (mNew != null ) { + if ("1".equals(mNew)) { + mLockPatternUtils.enableSyntheticPassword(); + getOutPrintWriter().println("Synthetic password enabled"); + } else if ("0".equals(mNew)) { + mLockPatternUtils.disableSyntheticPassword(); + getOutPrintWriter().println("Synthetic password disabled"); + } } getOutPrintWriter().println(String.format("SP Enabled = %b", mLockPatternUtils.isSyntheticPasswordEnabled()));