Bouncer should dismiss if being tracked when face unlocked

When the user is tracking the bouncer with their finger and a
successful face unlock occurs, the bouncer should always be
immediately dismissed. Prior to this, it was possible for the user to
continue tracking the bouncer over the homescreen after unlock, leading 
to shade problems, including missing lock/udfps icons and
lockscreen over homescreen/activity.

The primary issue was BiometricUnlockController was returning MODE_NONE, and 
is now returning MODE_DISMISS_BOUNCER.

Fixes: 237822716
Test: atest StatusBarKeyguardViewManagerTest
Change-Id: I364d8e61a61138d79240b5baefed295493678063
This commit is contained in:
Matt Pietal
2022-07-14 14:02:05 +00:00
parent 9d2f3f9d1f
commit 80771ec563
4 changed files with 12 additions and 6 deletions

View File

@@ -2692,7 +2692,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
/** Hides the surface behind the keyguard by re-showing the keyguard/activity lock screen. */
public void hideSurfaceBehindKeyguard() {
mSurfaceBehindRemoteAnimationRequested = false;
mKeyguardStateController.notifyKeyguardGoingAway(false);
if (mShowing) {
setShowingLocked(true, true);
}

View File

@@ -397,10 +397,6 @@ public class KeyguardBouncer {
return mShowingSoon || mExpansion != EXPANSION_HIDDEN && mExpansion != EXPANSION_VISIBLE;
}
public boolean getShowingSoon() {
return mShowingSoon;
}
/**
* @return {@code true} when bouncer's pre-hide animation already started but isn't completely
* hidden yet, {@code false} otherwise.

View File

@@ -963,7 +963,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public boolean bouncerIsOrWillBeShowing() {
return isBouncerShowing() || mBouncer.getShowingSoon();
return isBouncerShowing() || mBouncer.inTransit();
}
public boolean isFullscreenBouncer() {

View File

@@ -380,6 +380,16 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
verify(mAlternateAuthInterceptor).hideAlternateAuthBouncer();
}
@Test
public void testBouncerIsOrWillBeShowing_whenBouncerIsInTransit() {
when(mBouncer.isShowing()).thenReturn(false);
when(mBouncer.inTransit()).thenReturn(true);
assertTrue(
"Is or will be showing should be true when bouncer is in transit",
mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing());
}
@Test
public void testShowAltAuth_unlockingWithBiometricNotAllowed() {
// GIVEN alt auth exists, unlocking with biometric isn't allowed