summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Beverly Tai <beverlyt@google.com> 2022-11-02 15:27:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-02 15:27:39 +0000
commit454ee9a80d1396b4c74af35308cad734951de435 (patch)
tree0cd997d2120c95fac54a205457bc5b4c29ba51de
parent52e56d160117921de304cd8266f88452ccb5be71 (diff)
parentcfcc9fcf5cd2eb6f17b32c0a3de085f89163409e (diff)
Merge "[1.5/N] side fps bouncer - update UdfpsKeyguardViewControllerBaseTest"
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java355
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java356
2 files changed, 356 insertions, 355 deletions
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java
index c313c8dc1a7c..e5c7a42c06a6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java
@@ -16,15 +16,7 @@
package com.android.systemui.biometrics;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -44,7 +36,6 @@ import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionListener;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
-import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
@@ -55,7 +46,6 @@ import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.Before;
-import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -114,351 +104,6 @@ public class UdfpsKeyguardViewControllerBaseTest extends SysuiTestCase {
mController = createUdfpsKeyguardViewController();
}
- @Test
- public void testRegistersExpansionChangedListenerOnAttached() {
- mController.onViewAttached();
- captureStatusBarExpansionListeners();
- }
-
- @Test
- public void testRegistersStatusBarStateListenersOnAttached() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
- }
-
- @Test
- public void testViewControllerQueriesSBStateOnAttached() {
- mController.onViewAttached();
- verify(mStatusBarStateController).getState();
- verify(mStatusBarStateController).getDozeAmount();
-
- final float dozeAmount = .88f;
- when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE_LOCKED);
- when(mStatusBarStateController.getDozeAmount()).thenReturn(dozeAmount);
- captureStatusBarStateListeners();
-
- mController.onViewAttached();
- verify(mView, atLeast(1)).setPauseAuth(true);
- verify(mView).onDozeAmountChanged(dozeAmount, dozeAmount,
- UdfpsKeyguardView.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN);
- }
-
- @Test
- public void testListenersUnregisteredOnDetached() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
- captureStatusBarExpansionListeners();
- captureKeyguardStateControllerCallback();
- mController.onViewDetached();
-
- verify(mStatusBarStateController).removeCallback(mStatusBarStateListener);
- for (ShadeExpansionListener listener : mExpansionListeners) {
- verify(mShadeExpansionStateManager).removeExpansionListener(listener);
- }
- verify(mKeyguardStateController).removeCallback(mKeyguardStateControllerCallback);
- }
-
- @Test
- public void testDozeEventsSentToView() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- final float linear = .55f;
- final float eased = .65f;
- mStatusBarStateListener.onDozeAmountChanged(linear, eased);
-
- verify(mView).onDozeAmountChanged(linear, eased,
- UdfpsKeyguardView.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN);
- }
-
- @Test
- public void testShouldPauseAuthUnpausedAlpha0() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- when(mView.getUnpausedAlpha()).thenReturn(0);
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
-
- assertTrue(mController.shouldPauseAuth());
- }
-
- @Test
- public void testFadeFromDialogSuggestedAlpha() {
- // GIVEN view is attached and status bar expansion is 1f
- mController.onViewAttached();
- captureStatusBarStateListeners();
- captureStatusBarExpansionListeners();
- updateStatusBarExpansion(1f, true);
- reset(mView);
-
- // WHEN dialog suggested alpha is .6f
- when(mView.getDialogSuggestedAlpha()).thenReturn(.6f);
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
-
- // THEN alpha is updated based on dialog suggested alpha
- verify(mView).setUnpausedAlpha((int) (.6f * 255));
- }
-
- @Test
- public void testShouldNotPauseAuthOnKeyguard() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
-
- assertFalse(mController.shouldPauseAuth());
- }
-
- @Test
- public void testShouldPauseAuthIsLaunchTransitionFadingAway() {
- // GIVEN view is attached and we're on the keyguard (see testShouldNotPauseAuthOnKeyguard)
- mController.onViewAttached();
- captureStatusBarStateListeners();
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
-
- // WHEN isLaunchTransitionFadingAway=true
- captureKeyguardStateControllerCallback();
- when(mKeyguardStateController.isLaunchTransitionFadingAway()).thenReturn(true);
- mKeyguardStateControllerCallback.onLaunchTransitionFadingAwayChanged();
-
- // THEN pause auth
- assertTrue(mController.shouldPauseAuth());
- }
-
- @Test
- public void testShouldPauseAuthOnShadeLocked() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED);
-
- assertTrue(mController.shouldPauseAuth());
- }
-
- @Test
- public void testShouldPauseAuthOnShade() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- // WHEN not on keyguard yet (shade = home)
- sendStatusBarStateChanged(StatusBarState.SHADE);
-
- // THEN pause auth
- assertTrue(mController.shouldPauseAuth());
- }
-
- @Test
- public void testShouldPauseAuthAnimatingScreenOffFromShade() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- // WHEN transitioning from home/shade => keyguard + animating screen off
- mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD);
- when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
-
- // THEN pause auth
- assertTrue(mController.shouldPauseAuth());
- }
-
- @Test
- public void testDoNotPauseAuthAnimatingScreenOffFromLS() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
-
- // WHEN animating screen off transition from LS => AOD
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
- when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
-
- // THEN don't pause auth
- assertFalse(mController.shouldPauseAuth());
- }
-
- @Test
- public void testOverrideShouldPauseAuthOnShadeLocked() {
- mController.onViewAttached();
- captureStatusBarStateListeners();
- captureAltAuthInterceptor();
-
- sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED);
- assertTrue(mController.shouldPauseAuth());
-
- mAltAuthInterceptor.showAlternateAuthBouncer(); // force show
- assertFalse(mController.shouldPauseAuth());
- assertTrue(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
-
- mAltAuthInterceptor.hideAlternateAuthBouncer(); // stop force show
- assertTrue(mController.shouldPauseAuth());
- assertFalse(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
- }
-
- @Test
- public void testOnDetachedStateReset() {
- // GIVEN view is attached
- mController.onViewAttached();
- captureAltAuthInterceptor();
-
- // WHEN view is detached
- mController.onViewDetached();
-
- // THEN remove alternate auth interceptor
- verify(mStatusBarKeyguardViewManager).removeAlternateAuthInterceptor(mAltAuthInterceptor);
- }
-
- @Test
- public void testHiddenUdfpsBouncerOnTouchOutside_nothingHappens() {
- // GIVEN view is attached
- mController.onViewAttached();
- captureAltAuthInterceptor();
-
- // GIVEN udfps bouncer isn't showing
- mAltAuthInterceptor.hideAlternateAuthBouncer();
-
- // WHEN touch is observed outside the view
- mController.onTouchOutsideView();
-
- // THEN bouncer / alt auth methods are never called
- verify(mStatusBarKeyguardViewManager, never()).showBouncer(anyBoolean());
- verify(mStatusBarKeyguardViewManager, never()).resetAlternateAuth(anyBoolean());
- }
-
- @Test
- public void testShowingUdfpsBouncerOnTouchOutsideWithinThreshold_nothingHappens() {
- // GIVEN view is attached
- mController.onViewAttached();
- captureAltAuthInterceptor();
-
- // GIVEN udfps bouncer is showing
- mAltAuthInterceptor.showAlternateAuthBouncer();
-
- // WHEN touch is observed outside the view 200ms later (just within threshold)
- mSystemClock.advanceTime(200);
- mController.onTouchOutsideView();
-
- // THEN bouncer / alt auth methods are never called because not enough time has passed
- verify(mStatusBarKeyguardViewManager, never()).showBouncer(anyBoolean());
- verify(mStatusBarKeyguardViewManager, never()).resetAlternateAuth(anyBoolean());
- }
-
- @Test
- public void testShowingUdfpsBouncerOnTouchOutsideAboveThreshold_showInputBouncer() {
- // GIVEN view is attached
- mController.onViewAttached();
- captureAltAuthInterceptor();
-
- // GIVEN udfps bouncer is showing
- mAltAuthInterceptor.showAlternateAuthBouncer();
-
- // WHEN touch is observed outside the view 205ms later
- mSystemClock.advanceTime(205);
- mController.onTouchOutsideView();
-
- // THEN show the bouncer
- verify(mStatusBarKeyguardViewManager).showBouncer(eq(true));
- }
-
- @Test
- public void testFadeInWithStatusBarExpansion() {
- // GIVEN view is attached
- mController.onViewAttached();
- captureStatusBarExpansionListeners();
- captureKeyguardStateControllerCallback();
- reset(mView);
-
- // WHEN status bar expansion is 0
- updateStatusBarExpansion(0, true);
-
- // THEN alpha is 0
- verify(mView).setUnpausedAlpha(0);
- }
-
- @Test
- public void testShowUdfpsBouncer() {
- // GIVEN view is attached and status bar expansion is 0
- mController.onViewAttached();
- captureStatusBarExpansionListeners();
- captureKeyguardStateControllerCallback();
- captureAltAuthInterceptor();
- updateStatusBarExpansion(0, true);
- reset(mView);
- when(mView.getContext()).thenReturn(mResourceContext);
- when(mResourceContext.getString(anyInt())).thenReturn("test string");
-
- // WHEN status bar expansion is 0 but udfps bouncer is requested
- mAltAuthInterceptor.showAlternateAuthBouncer();
-
- // THEN alpha is 255
- verify(mView).setUnpausedAlpha(255);
- }
-
- @Test
- public void testTransitionToFullShadeProgress() {
- // GIVEN view is attached and status bar expansion is 1f
- mController.onViewAttached();
- captureStatusBarExpansionListeners();
- updateStatusBarExpansion(1f, true);
- reset(mView);
- when(mView.getDialogSuggestedAlpha()).thenReturn(1f);
-
- // WHEN we're transitioning to the full shade
- float transitionProgress = .6f;
- mController.setTransitionToFullShadeProgress(transitionProgress);
-
- // THEN alpha is between 0 and 255
- verify(mView).setUnpausedAlpha((int) ((1f - transitionProgress) * 255));
- }
-
- @Test
- public void testShowUdfpsBouncer_transitionToFullShadeProgress() {
- // GIVEN view is attached and status bar expansion is 1f
- mController.onViewAttached();
- captureStatusBarExpansionListeners();
- captureKeyguardStateControllerCallback();
- captureAltAuthInterceptor();
- updateStatusBarExpansion(1f, true);
- mAltAuthInterceptor.showAlternateAuthBouncer();
- reset(mView);
-
- // WHEN we're transitioning to the full shade
- mController.setTransitionToFullShadeProgress(1.0f);
-
- // THEN alpha is 255 (b/c udfps bouncer is requested)
- verify(mView).setUnpausedAlpha(255);
- }
-
- @Test
- public void testUpdatePanelExpansion_pauseAuth() {
- // GIVEN view is attached + on the keyguard
- mController.onViewAttached();
- captureStatusBarStateListeners();
- captureStatusBarExpansionListeners();
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
- reset(mView);
-
- // WHEN panelViewExpansion changes to hide
- when(mView.getUnpausedAlpha()).thenReturn(0);
- updateStatusBarExpansion(0f, false);
-
- // THEN pause auth is updated to PAUSE
- verify(mView, atLeastOnce()).setPauseAuth(true);
- }
-
- @Test
- public void testUpdatePanelExpansion_unpauseAuth() {
- // GIVEN view is attached + on the keyguard + panel expansion is 0f
- mController.onViewAttached();
- captureStatusBarStateListeners();
- captureStatusBarExpansionListeners();
- sendStatusBarStateChanged(StatusBarState.KEYGUARD);
- reset(mView);
-
- // WHEN panelViewExpansion changes to expanded
- when(mView.getUnpausedAlpha()).thenReturn(255);
- updateStatusBarExpansion(1f, true);
-
- // THEN pause auth is updated to NOT pause
- verify(mView, atLeastOnce()).setPauseAuth(false);
- }
-
protected void sendStatusBarStateChanged(int statusBarState) {
mStatusBarStateListener.onStateChanged(statusBarState);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
index a067e430c248..55b61948ee45 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
@@ -16,7 +16,15 @@
package com.android.systemui.biometrics;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -25,6 +33,7 @@ import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
+import com.android.systemui.shade.ShadeExpansionListener;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
@@ -60,6 +69,353 @@ public class UdfpsKeyguardViewControllerTest extends UdfpsKeyguardViewController
assertTrue(mController.shouldPauseAuth());
}
+
+
+ @Test
+ public void testRegistersExpansionChangedListenerOnAttached() {
+ mController.onViewAttached();
+ captureStatusBarExpansionListeners();
+ }
+
+ @Test
+ public void testRegistersStatusBarStateListenersOnAttached() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ }
+
+ @Test
+ public void testViewControllerQueriesSBStateOnAttached() {
+ mController.onViewAttached();
+ verify(mStatusBarStateController).getState();
+ verify(mStatusBarStateController).getDozeAmount();
+
+ final float dozeAmount = .88f;
+ when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE_LOCKED);
+ when(mStatusBarStateController.getDozeAmount()).thenReturn(dozeAmount);
+ captureStatusBarStateListeners();
+
+ mController.onViewAttached();
+ verify(mView, atLeast(1)).setPauseAuth(true);
+ verify(mView).onDozeAmountChanged(dozeAmount, dozeAmount,
+ UdfpsKeyguardView.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN);
+ }
+
+ @Test
+ public void testListenersUnregisteredOnDetached() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ captureStatusBarExpansionListeners();
+ captureKeyguardStateControllerCallback();
+ mController.onViewDetached();
+
+ verify(mStatusBarStateController).removeCallback(mStatusBarStateListener);
+ for (ShadeExpansionListener listener : mExpansionListeners) {
+ verify(mShadeExpansionStateManager).removeExpansionListener(listener);
+ }
+ verify(mKeyguardStateController).removeCallback(mKeyguardStateControllerCallback);
+ }
+
+ @Test
+ public void testDozeEventsSentToView() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ final float linear = .55f;
+ final float eased = .65f;
+ mStatusBarStateListener.onDozeAmountChanged(linear, eased);
+
+ verify(mView).onDozeAmountChanged(linear, eased,
+ UdfpsKeyguardView.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN);
+ }
+
+ @Test
+ public void testShouldPauseAuthUnpausedAlpha0() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ when(mView.getUnpausedAlpha()).thenReturn(0);
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+
+ assertTrue(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testFadeFromDialogSuggestedAlpha() {
+ // GIVEN view is attached and status bar expansion is 1f
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ captureStatusBarExpansionListeners();
+ updateStatusBarExpansion(1f, true);
+ reset(mView);
+
+ // WHEN dialog suggested alpha is .6f
+ when(mView.getDialogSuggestedAlpha()).thenReturn(.6f);
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+
+ // THEN alpha is updated based on dialog suggested alpha
+ verify(mView).setUnpausedAlpha((int) (.6f * 255));
+ }
+
+ @Test
+ public void testShouldNotPauseAuthOnKeyguard() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+
+ assertFalse(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testShouldPauseAuthIsLaunchTransitionFadingAway() {
+ // GIVEN view is attached and we're on the keyguard (see testShouldNotPauseAuthOnKeyguard)
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+
+ // WHEN isLaunchTransitionFadingAway=true
+ captureKeyguardStateControllerCallback();
+ when(mKeyguardStateController.isLaunchTransitionFadingAway()).thenReturn(true);
+ mKeyguardStateControllerCallback.onLaunchTransitionFadingAwayChanged();
+
+ // THEN pause auth
+ assertTrue(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testShouldPauseAuthOnShadeLocked() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED);
+
+ assertTrue(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testShouldPauseAuthOnShade() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ // WHEN not on keyguard yet (shade = home)
+ sendStatusBarStateChanged(StatusBarState.SHADE);
+
+ // THEN pause auth
+ assertTrue(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testShouldPauseAuthAnimatingScreenOffFromShade() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ // WHEN transitioning from home/shade => keyguard + animating screen off
+ mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD);
+ when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
+
+ // THEN pause auth
+ assertTrue(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testDoNotPauseAuthAnimatingScreenOffFromLS() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+
+ // WHEN animating screen off transition from LS => AOD
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+ when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
+
+ // THEN don't pause auth
+ assertFalse(mController.shouldPauseAuth());
+ }
+
+ @Test
+ public void testOverrideShouldPauseAuthOnShadeLocked() {
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ captureAltAuthInterceptor();
+
+ sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED);
+ assertTrue(mController.shouldPauseAuth());
+
+ mAltAuthInterceptor.showAlternateAuthBouncer(); // force show
+ assertFalse(mController.shouldPauseAuth());
+ assertTrue(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
+
+ mAltAuthInterceptor.hideAlternateAuthBouncer(); // stop force show
+ assertTrue(mController.shouldPauseAuth());
+ assertFalse(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
+ }
+
+ @Test
+ public void testOnDetachedStateReset() {
+ // GIVEN view is attached
+ mController.onViewAttached();
+ captureAltAuthInterceptor();
+
+ // WHEN view is detached
+ mController.onViewDetached();
+
+ // THEN remove alternate auth interceptor
+ verify(mStatusBarKeyguardViewManager).removeAlternateAuthInterceptor(mAltAuthInterceptor);
+ }
+
+ @Test
+ public void testHiddenUdfpsBouncerOnTouchOutside_nothingHappens() {
+ // GIVEN view is attached
+ mController.onViewAttached();
+ captureAltAuthInterceptor();
+
+ // GIVEN udfps bouncer isn't showing
+ mAltAuthInterceptor.hideAlternateAuthBouncer();
+
+ // WHEN touch is observed outside the view
+ mController.onTouchOutsideView();
+
+ // THEN bouncer / alt auth methods are never called
+ verify(mStatusBarKeyguardViewManager, never()).showBouncer(anyBoolean());
+ verify(mStatusBarKeyguardViewManager, never()).resetAlternateAuth(anyBoolean());
+ }
+
+ @Test
+ public void testShowingUdfpsBouncerOnTouchOutsideWithinThreshold_nothingHappens() {
+ // GIVEN view is attached
+ mController.onViewAttached();
+ captureAltAuthInterceptor();
+
+ // GIVEN udfps bouncer is showing
+ mAltAuthInterceptor.showAlternateAuthBouncer();
+
+ // WHEN touch is observed outside the view 200ms later (just within threshold)
+ mSystemClock.advanceTime(200);
+ mController.onTouchOutsideView();
+
+ // THEN bouncer / alt auth methods are never called because not enough time has passed
+ verify(mStatusBarKeyguardViewManager, never()).showBouncer(anyBoolean());
+ verify(mStatusBarKeyguardViewManager, never()).resetAlternateAuth(anyBoolean());
+ }
+
+ @Test
+ public void testShowingUdfpsBouncerOnTouchOutsideAboveThreshold_showInputBouncer() {
+ // GIVEN view is attached
+ mController.onViewAttached();
+ captureAltAuthInterceptor();
+
+ // GIVEN udfps bouncer is showing
+ mAltAuthInterceptor.showAlternateAuthBouncer();
+
+ // WHEN touch is observed outside the view 205ms later
+ mSystemClock.advanceTime(205);
+ mController.onTouchOutsideView();
+
+ // THEN show the bouncer
+ verify(mStatusBarKeyguardViewManager).showBouncer(eq(true));
+ }
+
+ @Test
+ public void testFadeInWithStatusBarExpansion() {
+ // GIVEN view is attached
+ mController.onViewAttached();
+ captureStatusBarExpansionListeners();
+ captureKeyguardStateControllerCallback();
+ reset(mView);
+
+ // WHEN status bar expansion is 0
+ updateStatusBarExpansion(0, true);
+
+ // THEN alpha is 0
+ verify(mView).setUnpausedAlpha(0);
+ }
+
+ @Test
+ public void testShowUdfpsBouncer() {
+ // GIVEN view is attached and status bar expansion is 0
+ mController.onViewAttached();
+ captureStatusBarExpansionListeners();
+ captureKeyguardStateControllerCallback();
+ captureAltAuthInterceptor();
+ updateStatusBarExpansion(0, true);
+ reset(mView);
+ when(mView.getContext()).thenReturn(mResourceContext);
+ when(mResourceContext.getString(anyInt())).thenReturn("test string");
+
+ // WHEN status bar expansion is 0 but udfps bouncer is requested
+ mAltAuthInterceptor.showAlternateAuthBouncer();
+
+ // THEN alpha is 255
+ verify(mView).setUnpausedAlpha(255);
+ }
+
+ @Test
+ public void testTransitionToFullShadeProgress() {
+ // GIVEN view is attached and status bar expansion is 1f
+ mController.onViewAttached();
+ captureStatusBarExpansionListeners();
+ updateStatusBarExpansion(1f, true);
+ reset(mView);
+ when(mView.getDialogSuggestedAlpha()).thenReturn(1f);
+
+ // WHEN we're transitioning to the full shade
+ float transitionProgress = .6f;
+ mController.setTransitionToFullShadeProgress(transitionProgress);
+
+ // THEN alpha is between 0 and 255
+ verify(mView).setUnpausedAlpha((int) ((1f - transitionProgress) * 255));
+ }
+
+ @Test
+ public void testShowUdfpsBouncer_transitionToFullShadeProgress() {
+ // GIVEN view is attached and status bar expansion is 1f
+ mController.onViewAttached();
+ captureStatusBarExpansionListeners();
+ captureKeyguardStateControllerCallback();
+ captureAltAuthInterceptor();
+ updateStatusBarExpansion(1f, true);
+ mAltAuthInterceptor.showAlternateAuthBouncer();
+ reset(mView);
+
+ // WHEN we're transitioning to the full shade
+ mController.setTransitionToFullShadeProgress(1.0f);
+
+ // THEN alpha is 255 (b/c udfps bouncer is requested)
+ verify(mView).setUnpausedAlpha(255);
+ }
+
+ @Test
+ public void testUpdatePanelExpansion_pauseAuth() {
+ // GIVEN view is attached + on the keyguard
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ captureStatusBarExpansionListeners();
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+ reset(mView);
+
+ // WHEN panelViewExpansion changes to hide
+ when(mView.getUnpausedAlpha()).thenReturn(0);
+ updateStatusBarExpansion(0f, false);
+
+ // THEN pause auth is updated to PAUSE
+ verify(mView, atLeastOnce()).setPauseAuth(true);
+ }
+
+ @Test
+ public void testUpdatePanelExpansion_unpauseAuth() {
+ // GIVEN view is attached + on the keyguard + panel expansion is 0f
+ mController.onViewAttached();
+ captureStatusBarStateListeners();
+ captureStatusBarExpansionListeners();
+ sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+ reset(mView);
+
+ // WHEN panelViewExpansion changes to expanded
+ when(mView.getUnpausedAlpha()).thenReturn(255);
+ updateStatusBarExpansion(1f, true);
+
+ // THEN pause auth is updated to NOT pause
+ verify(mView, atLeastOnce()).setPauseAuth(false);
+ }
+
private void captureBouncerExpansionCallback() {
verify(mBouncer).addBouncerExpansionCallback(mBouncerExpansionCallbackCaptor.capture());
mBouncerExpansionCallback = mBouncerExpansionCallbackCaptor.getValue();