Merge "Do not try to bypass when triaging notifications" into qt-r1-dev
am: dd217f3a72
Change-Id: Ie140621d9830439f0d1acea06e1e8f5e83a03e0c
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user