diff options
Diffstat (limited to 'core/java/com/android/internal/widget/LockPatternUtils.java')
-rw-r--r-- | core/java/com/android/internal/widget/LockPatternUtils.java | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 67b668d71e8..6837231bb56 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -102,6 +102,11 @@ public class LockPatternUtils { public static final int MIN_LOCK_PATTERN_SIZE = 4; /** + * The default size of the pattern lockscreen. Ex: 3x3 + */ + public static final byte PATTERN_SIZE_DEFAULT = 3; + + /** * The minimum number of dots the user must include in a wrong pattern * attempt for it to be counted against the counts that affect * {@link #FAILED_ATTEMPTS_BEFORE_TIMEOUT} and {@link #FAILED_ATTEMPTS_BEFORE_RESET} @@ -968,13 +973,16 @@ public class LockPatternUtils { * @param string The pattern serialized with {@link #patternToString} * @return The pattern. */ - public static List<LockPatternView.Cell> stringToPattern(String string) { + public List<LockPatternView.Cell> stringToPattern(String string) { List<LockPatternView.Cell> result = Lists.newArrayList(); + final byte size = getLockPatternSize(); + LockPatternView.Cell.updateSize(size); + final byte[] bytes = string.getBytes(); for (int i = 0; i < bytes.length; i++) { byte b = bytes[i]; - result.add(LockPatternView.Cell.of(b / 3, b % 3)); + result.add(LockPatternView.Cell.of(b / size, b % size, size)); } return result; } @@ -984,7 +992,7 @@ public class LockPatternUtils { * @param pattern The pattern. * @return The pattern in string form. */ - public static String patternToString(List<LockPatternView.Cell> pattern) { + public String patternToString(List<LockPatternView.Cell> pattern) { if (pattern == null) { return ""; } @@ -993,7 +1001,7 @@ public class LockPatternUtils { byte[] res = new byte[patternSize]; for (int i = 0; i < patternSize; i++) { LockPatternView.Cell cell = pattern.get(i); - res[i] = (byte) (cell.getRow() * 3 + cell.getColumn()); + res[i] = (byte) (cell.getRow() * getLockPatternSize() + cell.getColumn()); } return new String(res); } @@ -1005,7 +1013,7 @@ public class LockPatternUtils { * @param pattern the gesture pattern. * @return the hash of the pattern in a byte array. */ - public static byte[] patternToHash(List<LockPatternView.Cell> pattern) { + public byte[] patternToHash(List<LockPatternView.Cell> pattern) { if (pattern == null) { return null; } @@ -1014,7 +1022,7 @@ public class LockPatternUtils { byte[] res = new byte[patternSize]; for (int i = 0; i < patternSize; i++) { LockPatternView.Cell cell = pattern.get(i); - res[i] = (byte) (cell.getRow() * 3 + cell.getColumn()); + res[i] = (byte) (cell.getRow() * getLockPatternSize() + cell.getColumn()); } try { MessageDigest md = MessageDigest.getInstance("SHA-1"); @@ -1208,6 +1216,40 @@ public class LockPatternUtils { } /** + * @return the pattern lockscreen size + */ + public byte getLockPatternSize() { + try { + return getLockSettings().getLockPatternSize(getCurrentOrCallingUserId()); + } catch (RemoteException re) { + return PATTERN_SIZE_DEFAULT; + } + } + + /** + * Set the pattern lockscreen size + */ + public void setLockPatternSize(long size) { + setLong(Settings.Secure.LOCK_PATTERN_SIZE, size); + } + + public void setVisibleDotsEnabled(boolean enabled) { + setBoolean(Settings.Secure.LOCK_DOTS_VISIBLE, enabled); + } + + public boolean isVisibleDotsEnabled() { + return getBoolean(Settings.Secure.LOCK_DOTS_VISIBLE, true); + } + + public void setShowErrorPath(boolean enabled) { + setBoolean(Settings.Secure.LOCK_SHOW_ERROR_PATH, enabled); + } + + public boolean isShowErrorPath() { + return getBoolean(Settings.Secure.LOCK_SHOW_ERROR_PATH, true); + } + + /** * Set and store the lockout deadline, meaning the user can't attempt his/her unlock * pattern until the deadline has passed. * @return the chosen deadline. |