Retain udfps auth bouncer after orientation change

But also make sure to reset the auth bouncer state
after hiding the udfps overlay

Test: manual, atest UdfpsControllerTest
Fixes: 194868950
Change-Id: I2849615795c43d0fbb213415f804c396f9259442
This commit is contained in:
Beverly
2021-08-03 10:38:57 -04:00
committed by Beverly Tai
parent 35062e8426
commit 7e0e3e84b5
4 changed files with 35 additions and 2 deletions

View File

@@ -706,15 +706,21 @@ public class UdfpsController implements DozeReceiver {
return mCoreLayoutParams;
}
private void onOrientationChanged() {
// When the configuration changes it's almost always necessary to destroy and re-create
// the overlay's window to pass it the new LayoutParams.
// Hiding the overlay will destroy its window. It's safe to hide the overlay regardless
// of whether it is already hidden.
final boolean wasShowingAltAuth = mKeyguardViewManager.isShowingAlternateAuth();
hideUdfpsOverlay();
// If the overlay needs to be shown, this will re-create and show the overlay with the
// updated LayoutParams. Otherwise, the overlay will remain hidden.
updateOverlay();
if (wasShowingAltAuth) {
mKeyguardViewManager.showGenericBouncer(true);
}
}
private void showUdfpsOverlay(@NonNull ServerRequest request) {
@@ -820,10 +826,14 @@ public class UdfpsController implements DozeReceiver {
Log.v(TAG, "hideUdfpsOverlay | removing window");
// Reset the controller back to its starting state.
onFingerUp();
boolean wasShowingAltAuth = mKeyguardViewManager.isShowingAlternateAuth();
mWindowManager.removeView(mView);
mView.setOnTouchListener(null);
mView.setOnHoverListener(null);
mView.setAnimationViewController(null);
if (wasShowingAltAuth) {
mKeyguardViewManager.resetAlternateAuth(true);
}
mAccessibilityManager.removeTouchExplorationStateChangeListener(
mTouchExplorationStateChangeListener);
mView = null;

View File

@@ -100,6 +100,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
return "UdfpsKeyguardViewController";
}
@Override
public void onInit() {
super.onInit();
mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor);
}
@Override
protected void onViewAttached() {
super.onViewAttached();

View File

@@ -303,8 +303,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
* Sets a new alt auth interceptor.
*/
public void setAlternateAuthInterceptor(@NonNull AlternateAuthInterceptor authInterceptor) {
mAlternateAuthInterceptor = authInterceptor;
resetAlternateAuth(false);
if (!Objects.equals(mAlternateAuthInterceptor, authInterceptor)) {
mAlternateAuthInterceptor = authInterceptor;
resetAlternateAuth(false);
}
}
private void registerListeners() {

View File

@@ -416,6 +416,21 @@ public class UdfpsControllerTest extends SysuiTestCase {
verify(mWindowManager).removeView(eq(mUdfpsView));
}
@Test
public void hideUdfpsOverlay_resetsAltAuthBouncerWhenShowing() throws RemoteException {
// GIVEN overlay was showing and the udfps bouncer is showing
mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID,
IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback);
when(mStatusBarKeyguardViewManager.isShowingAlternateAuth()).thenReturn(true);
// WHEN the overlay is hidden
mOverlayController.hideUdfpsOverlay(TEST_UDFPS_SENSOR_ID);
mFgExecutor.runAllReady();
// THEN the udfps bouncer is reset
verify(mStatusBarKeyguardViewManager).resetAlternateAuth(eq(true));
}
@Test
public void testSubscribesToOrientationChangesWhenShowingOverlay() throws Exception {
mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID,