コード例 #1
0
 /**
  * Save a lock pattern.
  *
  * @param pattern The new pattern to save.
  * @param isFallback Specifies if this is a fallback to biometric weak
  */
 public void saveLockPattern(List<LockPatternView.Cell> pattern, boolean isFallback) {
   // Compute the hash
   final byte[] hash = LockPatternUtils.patternToHash(pattern);
   try {
     // Write the hash to file
     RandomAccessFile raf = new RandomAccessFile(sLockPatternFilename, "rw");
     // Truncate the file if pattern is null, to clear the lock
     if (pattern == null) {
       raf.setLength(0);
     } else {
       raf.write(hash, 0, hash.length);
     }
     raf.close();
     DevicePolicyManager dpm = getDevicePolicyManager();
     KeyStore keyStore = KeyStore.getInstance();
     if (pattern != null) {
       keyStore.password(patternToString(pattern));
       setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
       if (!isFallback) {
         deleteGallery();
         setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
         dpm.setActivePasswordState(
             DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, pattern.size(), 0, 0, 0, 0, 0, 0);
       } else {
         setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK);
         setLong(PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
         finishBiometricWeak();
         dpm.setActivePasswordState(
             DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK, 0, 0, 0, 0, 0, 0, 0);
       }
     } else {
       if (keyStore.isEmpty()) {
         keyStore.reset();
       }
       dpm.setActivePasswordState(
           DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, 0, 0, 0, 0, 0, 0, 0);
     }
   } catch (FileNotFoundException fnfe) {
     // Cant do much, unless we want to fail over to using the settings
     // provider
     Log.e(TAG, "Unable to save lock pattern to " + sLockPatternFilename);
   } catch (IOException ioe) {
     // Cant do much
     Log.e(TAG, "Unable to save lock pattern to " + sLockPatternFilename);
   }
 }
コード例 #2
0
 /**
  * Check to see if a pattern matches the saved pattern. If no pattern exists, always returns true.
  *
  * @param pattern The pattern to check.
  * @return Whether the pattern matches the stored one.
  */
 public boolean checkPattern(List<LockPatternView.Cell> pattern) {
   try {
     // Read all the bytes from the file
     RandomAccessFile raf = new RandomAccessFile(sLockPatternFilename, "r");
     final byte[] stored = new byte[(int) raf.length()];
     int got = raf.read(stored, 0, stored.length);
     raf.close();
     if (got <= 0) {
       return true;
     }
     // Compare the hash from the file with the entered pattern's hash
     return Arrays.equals(stored, LockPatternUtils.patternToHash(pattern));
   } catch (FileNotFoundException fnfe) {
     return true;
   } catch (IOException ioe) {
     return true;
   }
 }