Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +15 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -122,6 +123,21 @@ class AuthContainerViewTest : SysuiTestCase() { verify(callback).onDialogAnimatedIn(authContainer?.requestId ?: 0L) } @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() Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +15 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -122,6 +123,21 @@ class AuthContainerViewTest : SysuiTestCase() { verify(callback).onDialogAnimatedIn(authContainer?.requestId ?: 0L) } @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() Loading