Merge "Add support for current failed lock attempts and max attempts" into nyc-dev

am: 29b13190cd

* commit '29b13190cd57bd823eb803f6fca03f671a32a5fe':
  Add support for current failed lock attempts and max attempts
This commit is contained in:
Clara Bayarri
2016-02-12 14:00:41 +00:00
committed by android-build-merger
3 changed files with 31 additions and 5 deletions

View File

@@ -1826,9 +1826,23 @@ public class DevicePolicyManager {
* this method; if it has not, a security exception will be thrown.
*/
public int getCurrentFailedPasswordAttempts() {
return getCurrentFailedPasswordAttempts(myUserId());
}
/**
* Retrieve the number of times the given user has failed at entering a
* password since that last successful password entry.
*
* <p>The calling device admin must have requested
* {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN} to be able to call this method; if it has
* not and it is not the system uid, a security exception will be thrown.
*
* @hide
*/
public int getCurrentFailedPasswordAttempts(int userHandle) {
if (mService != null) {
try {
return mService.getCurrentFailedPasswordAttempts(myUserId(), mParentInstance);
return mService.getCurrentFailedPasswordAttempts(userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}

View File

@@ -283,6 +283,15 @@ public class LockPatternUtils {
getTrustManager().reportUnlockAttempt(true /* authenticated */, userId);
}
public int getCurrentFailedPasswordAttempts(int userId) {
return getDevicePolicyManager().getCurrentFailedPasswordAttempts(userId);
}
public int getMaximumFailedPasswordsForWipe(int userId) {
return getDevicePolicyManager().getMaximumFailedPasswordsForWipe(
null /* componentName */, userId);
}
/**
* Check to see if a pattern matches the saved pattern.
* If pattern matches, return an opaque attestation that the challenge

View File

@@ -3524,11 +3524,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
@Override
public int getCurrentFailedPasswordAttempts(int userHandle, boolean parent) {
enforceFullCrossUsersPermission(userHandle);
synchronized (this) {
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
getActiveAdminForCallerLocked(
null, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent);
if (!isCallerWithSystemUid()) {
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
getActiveAdminForCallerLocked(
null, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent);
}
DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, parent));