Update userUnlockedWithBiometric on unlock changes

To update a potentially stale unlock icon
to a lock icon on the keyguard

Test: manual
Test: atest LockIconViewControllerTest
Fixes: 234687929
Change-Id: Ie26dcad376efac1722f714a26aac8c7a12ca44a0
This commit is contained in:
Beverly
2023-02-10 15:13:30 +00:00
parent 27df631c6f
commit 9d258c4196
2 changed files with 39 additions and 14 deletions

View File

@@ -466,6 +466,17 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
}
}
/**
* @return whether the userUnlockedWithBiometric state changed
*/
private boolean updateUserUnlockedWithBiometric() {
final boolean wasUserUnlockedWithBiometric = mUserUnlockedWithBiometric;
mUserUnlockedWithBiometric =
mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(
KeyguardUpdateMonitor.getCurrentUser());
return wasUserUnlockedWithBiometric != mUserUnlockedWithBiometric;
}
private StatusBarStateController.StateListener mStatusBarStateListener =
new StatusBarStateController.StateListener() {
@Override
@@ -503,11 +514,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
@Override
public void onBiometricsCleared() {
final boolean wasUserUnlockedWithBiometric = mUserUnlockedWithBiometric;
mUserUnlockedWithBiometric =
mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(
KeyguardUpdateMonitor.getCurrentUser());
if (wasUserUnlockedWithBiometric != mUserUnlockedWithBiometric) {
if (updateUserUnlockedWithBiometric()) {
updateVisibility();
}
}
@@ -516,10 +523,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
public void onBiometricRunningStateChanged(boolean running,
BiometricSourceType biometricSourceType) {
final boolean wasRunningFps = mRunningFPS;
final boolean wasUserUnlockedWithBiometric = mUserUnlockedWithBiometric;
mUserUnlockedWithBiometric =
mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(
KeyguardUpdateMonitor.getCurrentUser());
final boolean userUnlockedWithBiometricChanged =
updateUserUnlockedWithBiometric();
if (biometricSourceType == FINGERPRINT) {
mRunningFPS = running;
@@ -537,8 +542,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
}
}
if (wasUserUnlockedWithBiometric != mUserUnlockedWithBiometric
|| wasRunningFps != mRunningFPS) {
if (userUnlockedWithBiometricChanged || wasRunningFps != mRunningFPS) {
updateVisibility();
}
}
@@ -549,6 +553,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
@Override
public void onUnlockedChanged() {
mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
updateUserUnlockedWithBiometric();
updateKeyguardShowing();
updateVisibility();
}
@@ -566,9 +571,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
updateKeyguardShowing();
if (mIsKeyguardShowing) {
mUserUnlockedWithBiometric =
mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(
KeyguardUpdateMonitor.getCurrentUser());
updateUserUnlockedWithBiometric();
}
updateVisibility();
}

View File

@@ -284,4 +284,26 @@ public class LockIconViewControllerTest extends LockIconViewControllerBaseTest {
// THEN the lock icon is shown
verify(mLockIconView).setContentDescription(LOCKED_LABEL);
}
@Test
public void lockIconShows_afterUnlockStateChanges() {
// GIVEN lock icon controller is initialized and view is attached
init(/* useMigrationFlag= */false);
captureKeyguardStateCallback();
captureKeyguardUpdateMonitorCallback();
// GIVEN user has unlocked with a biometric auth (ie: face auth)
// and biometric running state changes
when(mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(anyInt())).thenReturn(true);
mKeyguardUpdateMonitorCallback.onBiometricRunningStateChanged(false,
BiometricSourceType.FACE);
reset(mLockIconView);
// WHEN the unlocked state changes
when(mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(anyInt())).thenReturn(false);
mKeyguardStateCallback.onUnlockedChanged();
// THEN the lock icon is shown
verify(mLockIconView).setContentDescription(LOCKED_LABEL);
}
}