Merge "Disable bypass and bouncer delay when no face auth" into qt-r1-dev
am: f41cc30658
Change-Id: I367b3ef7d3a596e15972af1f047fd291f92e56b0
This commit is contained in:
@@ -22,5 +22,5 @@ import android.hardware.biometrics.BiometricSourceType;
|
||||
* @hide
|
||||
*/
|
||||
oneway interface IBiometricEnabledOnKeyguardCallback {
|
||||
void onChanged(in BiometricSourceType type, boolean enabled);
|
||||
void onChanged(in BiometricSourceType type, boolean enabled, int userId);
|
||||
}
|
||||
@@ -377,14 +377,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
};
|
||||
|
||||
private boolean mFaceSettingEnabledForUser;
|
||||
private SparseBooleanArray mFaceSettingEnabledForUser = new SparseBooleanArray();
|
||||
private BiometricManager mBiometricManager;
|
||||
private IBiometricEnabledOnKeyguardCallback mBiometricEnabledCallback =
|
||||
new IBiometricEnabledOnKeyguardCallback.Stub() {
|
||||
@Override
|
||||
public void onChanged(BiometricSourceType type, boolean enabled) throws RemoteException {
|
||||
public void onChanged(BiometricSourceType type, boolean enabled, int userId)
|
||||
throws RemoteException {
|
||||
if (type == BiometricSourceType.FACE) {
|
||||
mFaceSettingEnabledForUser = enabled;
|
||||
mFaceSettingEnabledForUser.put(userId, enabled);
|
||||
updateFaceListeningState();
|
||||
}
|
||||
}
|
||||
@@ -1711,7 +1712,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
// instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
|
||||
return (mBouncer || mAuthInterruptActive || awakeKeyguard || shouldListenForFaceAssistant())
|
||||
&& !mSwitchingUser && !isFaceDisabled(user) && becauseCannotSkipBouncer
|
||||
&& !mKeyguardGoingAway && mFaceSettingEnabledForUser && !mLockIconPressed
|
||||
&& !mKeyguardGoingAway && mFaceSettingEnabledForUser.get(user) && !mLockIconPressed
|
||||
&& strongAuthAllowsScanning && mIsPrimaryUser
|
||||
&& !mSecureCameraLaunched;
|
||||
}
|
||||
@@ -1783,13 +1784,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
|
||||
/**
|
||||
* If face hardware is available and user has enrolled. Not considering encryption or
|
||||
* lockdown state.
|
||||
* If face hardware is available, user has enrolled and enabled auth via setting.
|
||||
* Not considering encryption or lock down state.
|
||||
*/
|
||||
public boolean isUnlockWithFacePossible(int userId) {
|
||||
return mFaceManager != null && mFaceManager.isHardwareDetected()
|
||||
&& !isFaceDisabled(userId)
|
||||
&& mFaceManager.hasEnrolledTemplates(userId);
|
||||
&& mFaceManager.hasEnrolledTemplates(userId)
|
||||
&& mFaceSettingEnabledForUser.get(userId);
|
||||
}
|
||||
|
||||
private void stopListeningForFingerprint() {
|
||||
@@ -2657,7 +2659,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
pw.println(" possible=" + isUnlockWithFacePossible(userId));
|
||||
pw.println(" strongAuthFlags=" + Integer.toHexString(strongAuthFlags));
|
||||
pw.println(" trustManaged=" + getUserTrustIsManaged(userId));
|
||||
pw.println(" enabledByUser=" + mFaceSettingEnabledForUser);
|
||||
pw.println(" enabledByUser=" + mFaceSettingEnabledForUser.get(userId));
|
||||
pw.println(" mSecureCameraLaunched=" + mSecureCameraLaunched);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,9 @@ public class UnlockMethodCache {
|
||||
mListeners.remove(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* If there are faces enrolled and user enabled face auth on keyguard.
|
||||
*/
|
||||
public boolean isUnlockingWithFacePossible() {
|
||||
return mIsUnlockingWithFacePossible;
|
||||
}
|
||||
@@ -119,15 +122,16 @@ public class UnlockMethodCache {
|
||||
|| (Build.IS_DEBUGGABLE && DEBUG_AUTH_WITH_ADB && mDebugUnlocked);
|
||||
boolean trustManaged = mKeyguardUpdateMonitor.getUserTrustIsManaged(user);
|
||||
boolean trusted = mKeyguardUpdateMonitor.getUserHasTrust(user);
|
||||
boolean hasEnrolledFaces = mKeyguardUpdateMonitor.isUnlockWithFacePossible(user);
|
||||
boolean changed = secure != mSecure || canSkipBouncer != mCanSkipBouncer ||
|
||||
trustManaged != mTrustManaged || mIsUnlockingWithFacePossible != hasEnrolledFaces;
|
||||
boolean isUnlockingWithFacePossible = mKeyguardUpdateMonitor.isUnlockWithFacePossible(user);
|
||||
boolean changed = secure != mSecure || canSkipBouncer != mCanSkipBouncer
|
||||
|| trustManaged != mTrustManaged
|
||||
|| mIsUnlockingWithFacePossible != isUnlockingWithFacePossible;
|
||||
if (changed || updateAlways) {
|
||||
mSecure = secure;
|
||||
mCanSkipBouncer = canSkipBouncer;
|
||||
mTrusted = trusted;
|
||||
mTrustManaged = trustManaged;
|
||||
mIsUnlockingWithFacePossible = hasEnrolledFaces;
|
||||
mIsUnlockingWithFacePossible = isUnlockingWithFacePossible;
|
||||
notifyListeners();
|
||||
}
|
||||
Trace.endSection();
|
||||
|
||||
@@ -103,7 +103,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
||||
when(context.getPackageManager()).thenReturn(mPackageManager);
|
||||
doAnswer(invocation -> {
|
||||
IBiometricEnabledOnKeyguardCallback callback = invocation.getArgument(0);
|
||||
callback.onChanged(BiometricSourceType.FACE, true /* enabled */);
|
||||
callback.onChanged(BiometricSourceType.FACE, true /* enabled */,
|
||||
KeyguardUpdateMonitor.getCurrentUser());
|
||||
return null;
|
||||
}).when(mBiometricManager).registerEnabledOnKeyguardCallback(any());
|
||||
when(mFaceManager.isHardwareDetected()).thenReturn(true);
|
||||
|
||||
@@ -521,8 +521,8 @@ public class BiometricService extends SystemService {
|
||||
List<EnabledOnKeyguardCallback> callbacks = mEnabledOnKeyguardCallbacks;
|
||||
for (int i = 0; i < callbacks.size(); i++) {
|
||||
callbacks.get(i).notify(BiometricSourceType.FACE,
|
||||
mFaceEnabledOnKeyguard.getOrDefault(userId,
|
||||
DEFAULT_KEYGUARD_ENABLED));
|
||||
mFaceEnabledOnKeyguard.getOrDefault(userId, DEFAULT_KEYGUARD_ENABLED),
|
||||
userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -540,9 +540,9 @@ public class BiometricService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
void notify(BiometricSourceType sourceType, boolean enabled) {
|
||||
void notify(BiometricSourceType sourceType, boolean enabled, int userId) {
|
||||
try {
|
||||
mCallback.onChanged(sourceType, enabled);
|
||||
mCallback.onChanged(sourceType, enabled, userId);
|
||||
} catch (DeadObjectException e) {
|
||||
Slog.w(TAG, "Death while invoking notify", e);
|
||||
mEnabledOnKeyguardCallbacks.remove(this);
|
||||
@@ -796,7 +796,8 @@ public class BiometricService extends SystemService {
|
||||
mEnabledOnKeyguardCallbacks.add(new EnabledOnKeyguardCallback(callback));
|
||||
try {
|
||||
callback.onChanged(BiometricSourceType.FACE,
|
||||
mSettingObserver.getFaceEnabledOnKeyguard());
|
||||
mSettingObserver.getFaceEnabledOnKeyguard(),
|
||||
UserHandle.getCallingUserId());
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Remote exception", e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user