[Bouncer] Do not send message if face auth...
Succeeded. When we authenticate the face, the KeyguardIndicationController checks to see if the bouncer is showing and will set message to "Swipe up and try again." if so. Ensure that we only show "Swipe up and try again." when face auth fails. Also ensure that message is removed when bouncer no longer becomes visible. Fixes: 259007288 Test: Enroll in FP and face. Open bouncer and auth via face. Turn off and on and open bouncer again to view initial message. Test: Unit Test Change-Id: I8ee56d27ff60f32e696ac100a64d0553ce3c77e0
This commit is contained in:
@@ -103,6 +103,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
// start fresh
|
||||
mDismissing = false;
|
||||
mView.resetPasswordText(false /* animate */, false /* announce */);
|
||||
|
||||
@@ -121,6 +121,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView>
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
mMessageAreaController.setMessage("", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -104,14 +104,6 @@ object KeyguardBouncerViewBinder {
|
||||
}
|
||||
}
|
||||
|
||||
launch {
|
||||
viewModel.showWithFullExpansion.collect { model ->
|
||||
hostViewController.resetSecurityContainer()
|
||||
hostViewController.showPromptReason(model.promptReason)
|
||||
hostViewController.onResume()
|
||||
}
|
||||
}
|
||||
|
||||
launch {
|
||||
viewModel.hide.collect {
|
||||
hostViewController.cancelDismissAction()
|
||||
|
||||
@@ -22,10 +22,8 @@ import com.android.systemui.keyguard.data.BouncerViewDelegate
|
||||
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor
|
||||
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
|
||||
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_VISIBLE
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/** Models UI state for the lock screen bouncer; handles user input. */
|
||||
@@ -44,10 +42,6 @@ constructor(
|
||||
/** Observe whether bouncer is showing. */
|
||||
val show: Flow<KeyguardBouncerModel> = interactor.show
|
||||
|
||||
/** Observe visible expansion when bouncer is showing. */
|
||||
val showWithFullExpansion: Flow<KeyguardBouncerModel> =
|
||||
interactor.show.filter { it.expansionAmount == EXPANSION_VISIBLE }
|
||||
|
||||
/** Observe whether bouncer is hiding. */
|
||||
val hide: Flow<Unit> = interactor.hide
|
||||
|
||||
|
||||
@@ -930,7 +930,8 @@ public class KeyguardIndicationController {
|
||||
if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
|
||||
if (mStatusBarKeyguardViewManager.isShowingAlternateBouncer()) {
|
||||
return; // udfps affordance is highlighted, no need to show action to unlock
|
||||
} else if (mKeyguardUpdateMonitor.isFaceEnrolled()) {
|
||||
} else if (!mKeyguardUpdateMonitor.getIsFaceAuthenticated()
|
||||
&& mKeyguardUpdateMonitor.isFaceEnrolled()) {
|
||||
String message = mContext.getString(R.string.keyguard_retry);
|
||||
mStatusBarKeyguardViewManager.setKeyguardMessage(message, mInitialTextColorState);
|
||||
}
|
||||
|
||||
@@ -150,4 +150,10 @@ public class KeyguardAbsKeyInputViewControllerTest extends SysuiTestCase {
|
||||
getContext().getResources().getString(R.string.kg_prompt_reason_restart_password),
|
||||
false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReset() {
|
||||
mKeyguardAbsKeyInputViewController.reset();
|
||||
verify(mKeyguardMessageAreaController).setMessage("", false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -660,6 +660,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
createController();
|
||||
String message = mContext.getString(R.string.keyguard_retry);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
|
||||
when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(false);
|
||||
when(mKeyguardUpdateMonitor.isFaceEnrolled()).thenReturn(true);
|
||||
|
||||
mController.setVisible(true);
|
||||
@@ -669,6 +670,21 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
verify(mStatusBarKeyguardViewManager).setKeyguardMessage(eq(message), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transientIndication_swipeUpToRetry_faceAuthenticated() {
|
||||
createController();
|
||||
String message = mContext.getString(R.string.keyguard_retry);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
|
||||
when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
|
||||
when(mKeyguardUpdateMonitor.isFaceEnrolled()).thenReturn(true);
|
||||
|
||||
mController.setVisible(true);
|
||||
mController.getKeyguardCallback().onBiometricError(FACE_ERROR_TIMEOUT,
|
||||
"A message", BiometricSourceType.FACE);
|
||||
|
||||
verify(mStatusBarKeyguardViewManager, never()).setKeyguardMessage(eq(message), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void faceErrorTimeout_whenFingerprintEnrolled_doesNotShowMessage() {
|
||||
createController();
|
||||
|
||||
Reference in New Issue
Block a user