diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java | 16 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt | 16 |
2 files changed, 31 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index e74d8106b2f0..029cde9420f2 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -127,7 +127,7 @@ public class AuthContainerView extends LinearLayout private final ScrollView mBiometricScrollView; private final View mPanelView; private final float mTranslationY; - @ContainerState private int mContainerState = STATE_UNKNOWN; + @VisibleForTesting @ContainerState int mContainerState = STATE_UNKNOWN; private final Set<Integer> mFailedModalities = new HashSet<Integer>(); private final OnBackInvokedCallback mBackCallback = this::onBackInvoked; @@ -657,11 +657,25 @@ public class AuthContainerView extends LinearLayout wm.addView(this, getLayoutParams(mWindowToken, mConfig.mPromptInfo.getTitle())); } + private void forceExecuteAnimatedIn() { + if (mContainerState == STATE_ANIMATING_IN) { + //clear all animators + if (mCredentialView != null && mCredentialView.isAttachedToWindow()) { + mCredentialView.animate().cancel(); + } + mPanelView.animate().cancel(); + mBiometricView.animate().cancel(); + animate().cancel(); + onDialogAnimatedIn(); + } + } + @Override public void dismissWithoutCallback(boolean animate) { if (animate) { animateAway(false /* sendReason */, 0 /* reason */); } else { + forceExecuteAnimatedIn(); removeWindowIfAttached(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index d52612b000bc..e8c760c3e140 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -52,6 +52,7 @@ import org.mockito.Mockito.anyInt import org.mockito.Mockito.anyLong import org.mockito.Mockito.eq import org.mockito.Mockito.never +import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever import org.mockito.junit.MockitoJUnit @@ -123,6 +124,21 @@ class AuthContainerViewTest : SysuiTestCase() { } @Test + fun testDismissBeforeIntroEnd() { + val container = initializeFingerprintContainer() + waitForIdleSync() + + // STATE_ANIMATING_IN = 1 + container?.mContainerState = 1 + + container.dismissWithoutCallback(false) + + // the first time is triggered by initializeFingerprintContainer() + // the second time was triggered by dismissWithoutCallback() + verify(callback, times(2)).onDialogAnimatedIn(authContainer?.requestId ?: 0L) + } + + @Test fun testDismissesOnFocusLoss() { val container = initializeFingerprintContainer() waitForIdleSync() |