Merge "Fix UDFPS icon of Biometric Prompt has no response after rotation" into tm-qpr-dev

This commit is contained in:
Vincent Wang
2022-10-25 00:31:12 +00:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 1 deletions

View File

@@ -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();
}
}

View File

@@ -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
@@ -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()