Merge "Do not try to bypass when triaging notifications" into qt-r1-dev

am: dd217f3a72

Change-Id: Ie140621d9830439f0d1acea06e1e8f5e83a03e0c
This commit is contained in:
Lucas Dupin
2019-07-01 19:04:59 -07:00
committed by android-build-merger
3 changed files with 47 additions and 18 deletions

View File

@@ -1683,12 +1683,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
strongAuth == StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT strongAuth == StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT
|| strongAuth == StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; || strongAuth == StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
boolean canBypass = mKeyguardBypassController != null
&& mKeyguardBypassController.canBypass();
// There's no reason to ask the HAL for authentication when the user can dismiss the // There's no reason to ask the HAL for authentication when the user can dismiss the
// bouncer, unless we're bypassing and need to auto-dismiss the lock screen even when // bouncer, unless we're bypassing and need to auto-dismiss the lock screen even when
// TrustAgents or biometrics are keeping the device unlocked. // TrustAgents or biometrics are keeping the device unlocked.
boolean bypassEnabled = mKeyguardBypassController != null boolean becauseCannotSkipBouncer = !getUserCanSkipBouncer(user) || canBypass;
&& mKeyguardBypassController.getBypassEnabled();
boolean becauseCannotSkipBouncer = !getUserCanSkipBouncer(user) || bypassEnabled;
// Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
// instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware. // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.

View File

@@ -104,23 +104,11 @@ class KeyguardBypassController {
*/ */
fun onBiometricAuthenticated(biometricSourceType: BiometricSourceType): Boolean { fun onBiometricAuthenticated(biometricSourceType: BiometricSourceType): Boolean {
if (bypassEnabled) { if (bypassEnabled) {
if (bouncerShowing) { val can = canBypass()
// Whenever the bouncer is showing, we want to unlock. Otherwise we can get stuck if (!can && (isPulseExpanding || qSExpanded)) {
// in the shade locked where the bouncer wouldn't unlock
return true
}
if (statusBarStateController.state != StatusBarState.KEYGUARD) {
// We're bypassing but not actually on the lockscreen, the user should decide when
// to unlock
return false
}
if (launchingAffordance) {
return false
}
if (isPulseExpanding || qSExpanded) {
pendingUnlockType = biometricSourceType pendingUnlockType = biometricSourceType
return false
} }
return can
} }
return true return true
} }
@@ -134,6 +122,22 @@ class KeyguardBypassController {
} }
} }
/**
* If keyguard can be dismissed because of bypass.
*/
fun canBypass(): Boolean {
if (bypassEnabled) {
return when {
bouncerShowing -> true
statusBarStateController.state != StatusBarState.KEYGUARD -> false
launchingAffordance -> false
isPulseExpanding || qSExpanded -> false
else -> true
}
}
return false
}
fun onStartedGoingToSleep() { fun onStartedGoingToSleep() {
pendingUnlockType = null pendingUnlockType = null
} }

View File

@@ -52,6 +52,7 @@ import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
@@ -88,6 +89,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private UserManager mUserManager; private UserManager mUserManager;
@Mock @Mock
private DevicePolicyManager mDevicePolicyManager; private DevicePolicyManager mDevicePolicyManager;
@Mock
private KeyguardBypassController mKeyguardBypassController;
private TestableLooper mTestableLooper; private TestableLooper mTestableLooper;
private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor; private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -331,6 +334,28 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
verify(mFaceManager).authenticate(any(), any(), anyInt(), any(), any(), anyInt()); verify(mFaceManager).authenticate(any(), any(), anyInt(), any(), any(), anyInt());
} }
@Test
public void testTriesToAuthenticate_whenTrustOnAgentKeyguard_ifBypass() {
mKeyguardUpdateMonitor.setKeyguardBypassController(mKeyguardBypassController);
mKeyguardUpdateMonitor.dispatchStartedWakingUp();
mTestableLooper.processAllMessages();
when(mKeyguardBypassController.canBypass()).thenReturn(true);
mKeyguardUpdateMonitor.onTrustChanged(true /* enabled */,
KeyguardUpdateMonitor.getCurrentUser(), 0 /* flags */);
mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
verify(mFaceManager).authenticate(any(), any(), anyInt(), any(), any(), anyInt());
}
@Test
public void testIgnoresAuth_whenTrustAgentOnKeyguard_withoutBypass() {
mKeyguardUpdateMonitor.dispatchStartedWakingUp();
mTestableLooper.processAllMessages();
mKeyguardUpdateMonitor.onTrustChanged(true /* enabled */,
KeyguardUpdateMonitor.getCurrentUser(), 0 /* flags */);
mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
verify(mFaceManager, never()).authenticate(any(), any(), anyInt(), any(), any(), anyInt());
}
@Test @Test
public void testOnFaceAuthenticated_skipsFaceWhenAuthenticated() { public void testOnFaceAuthenticated_skipsFaceWhenAuthenticated() {
mKeyguardUpdateMonitor.onFaceAuthenticated(KeyguardUpdateMonitor.getCurrentUser()); mKeyguardUpdateMonitor.onFaceAuthenticated(KeyguardUpdateMonitor.getCurrentUser());