Merge "New api in LockSettingsService to get StrongAuth synchronously" into nyc-dev

This commit is contained in:
Victor Chang
2016-05-23 11:51:54 +00:00
committed by Android (Google) Code Review
3 changed files with 63 additions and 3 deletions

View File

@@ -44,4 +44,5 @@ interface ILockSettings {
void requireStrongAuth(int strongAuthReason, int userId);
void systemReady();
void userPresent(int userId);
int getStrongAuthForUser(int userId);
}

View File

@@ -1451,6 +1451,32 @@ public class LockPatternUtils {
}
}
/**
* @see StrongAuthTracker#getStrongAuthForUser
*/
public int getStrongAuthForUser(int userId) {
try {
return getLockSettings().getStrongAuthForUser(userId);
} catch (RemoteException e) {
Log.e(TAG, "Could not get StrongAuth", e);
return StrongAuthTracker.getDefaultFlags(mContext);
}
}
/**
* @see StrongAuthTracker#isTrustAllowedForUser
*/
public boolean isTrustAllowedForUser(int userId) {
return getStrongAuthForUser(userId) == StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED;
}
/**
* @see StrongAuthTracker#isFingerprintAllowedForUser
*/
public boolean isFingerprintAllowedForUser(int userId) {
return (getStrongAuthForUser(userId) & ~StrongAuthTracker.ALLOWING_FINGERPRINT) == 0;
}
/**
* Tracks the global strong authentication state.
*/
@@ -1556,9 +1582,8 @@ public class LockPatternUtils {
public void onStrongAuthRequiredChanged(int userId) {
}
void handleStrongAuthRequiredChanged(@StrongAuthFlags int strongAuthFlags,
protected void handleStrongAuthRequiredChanged(@StrongAuthFlags int strongAuthFlags,
int userId) {
int oldValue = getStrongAuthForUser(userId);
if (strongAuthFlags != oldValue) {
if (strongAuthFlags == mDefaultStrongAuthFlags) {
@@ -1571,7 +1596,7 @@ public class LockPatternUtils {
}
final IStrongAuthTracker.Stub mStub = new IStrongAuthTracker.Stub() {
protected final IStrongAuthTracker.Stub mStub = new IStrongAuthTracker.Stub() {
@Override
public void onStrongAuthRequiredChanged(@StrongAuthFlags int strongAuthFlags,
int userId) {

View File

@@ -120,6 +120,7 @@ public class LockSettingsService extends ILockSettings.Stub {
private final Context mContext;
private final LockSettingsStorage mStorage;
private final LockSettingsStrongAuth mStrongAuth;
private final SynchronizedStrongAuthTracker mStrongAuthTracker;
private LockPatternUtils mLockPatternUtils;
private boolean mFirstCallToVold;
@@ -177,6 +178,30 @@ public class LockSettingsService extends ILockSettings.Stub {
}
}
private class SynchronizedStrongAuthTracker extends LockPatternUtils.StrongAuthTracker {
public SynchronizedStrongAuthTracker(Context context) {
super(context);
}
@Override
protected void handleStrongAuthRequiredChanged(int strongAuthFlags, int userId) {
synchronized (this) {
super.handleStrongAuthRequiredChanged(strongAuthFlags, userId);
}
}
@Override
public int getStrongAuthForUser(int userId) {
synchronized (this) {
return super.getStrongAuthForUser(userId);
}
}
void register() {
mStrongAuth.registerStrongAuthTracker(this.mStub);
}
}
/**
* Tie managed profile to primary profile if it is in unified mode and not tied before.
*
@@ -245,6 +270,9 @@ public class LockSettingsService extends ILockSettings.Stub {
mNotificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
mStrongAuthTracker = new SynchronizedStrongAuthTracker(mContext);
mStrongAuthTracker.register();
}
/**
@@ -1398,6 +1426,12 @@ public class LockSettingsService extends ILockSettings.Stub {
mStrongAuth.reportUnlock(userId);
}
@Override
public int getStrongAuthForUser(int userId) {
checkPasswordReadPermission(userId);
return mStrongAuthTracker.getStrongAuthForUser(userId);
}
private static final String[] VALID_SETTINGS = new String[] {
LockPatternUtils.LOCKOUT_PERMANENT_KEY,
LockPatternUtils.LOCKOUT_ATTEMPT_DEADLINE,