Merge "Retain udfps auth bouncer after orientation change" into sc-qpr1-dev

This commit is contained in:
TreeHugger Robot
2021-08-24 17:15:19 +00:00
committed by Android (Google) Code Review
4 changed files with 35 additions and 2 deletions

View File

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

View File

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

View File

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

View File

@@ -416,6 +416,21 @@ public class UdfpsControllerTest extends SysuiTestCase {
verify(mWindowManager).removeView(eq(mUdfpsView)); 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 @Test
public void testSubscribesToOrientationChangesWhenShowingOverlay() throws Exception { public void testSubscribesToOrientationChangesWhenShowingOverlay() throws Exception {
mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID,