diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
index 1a726ce..4ec479a 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
@@ -21,7 +21,6 @@
 import android.animation.ValueAnimator;
 import android.annotation.NonNull;
 import android.content.res.Configuration;
-import android.util.Log;
 import android.util.MathUtils;
 import android.view.MotionEvent;
 
@@ -83,7 +82,7 @@
      * {@link KeyguardBouncer#EXPANSION_HIDDEN} (1f)
      */
     private float mInputBouncerHiddenAmount;
-    private boolean mIsBouncerVisible;
+    private boolean mIsGenericBouncerShowing; // whether UDFPS bouncer or input bouncer is visible
 
     protected UdfpsKeyguardViewController(
             @NonNull UdfpsKeyguardView view,
@@ -151,8 +150,7 @@
         mKeyguardStateController.addCallback(mKeyguardStateControllerCallback);
         mStatusBarState = getStatusBarStateController().getState();
         mQsExpanded = mKeyguardViewManager.isQsExpanded();
-        mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN;
-        mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing();
+        updateGenericBouncerVisibility();
         mConfigurationController.addCallback(mConfigurationListener);
         getPanelExpansionStateManager().addExpansionListener(mPanelExpansionListener);
         updateAlpha();
@@ -187,7 +185,7 @@
         pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
         pw.println("mStatusBarState=" + StatusBarState.toString(mStatusBarState));
         pw.println("mQsExpanded=" + mQsExpanded);
-        pw.println("mIsBouncerVisible=" + mIsBouncerVisible);
+        pw.println("mIsGenericBouncerShowing=" + mIsGenericBouncerShowing);
         pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount);
         pw.println("mPanelExpansionFraction=" + mPanelExpansionFraction);
         pw.println("unpausedAlpha=" + mView.getUnpausedAlpha());
@@ -225,6 +223,8 @@
         } else {
             mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false);
         }
+
+        updateGenericBouncerVisibility();
         updateAlpha();
         updatePauseAuth();
         return true;
@@ -241,7 +241,7 @@
         }
 
         if (mUdfpsRequested && !getNotificationShadeVisible()
-                && (!mIsBouncerVisible
+                && (!mIsGenericBouncerShowing
                 || mInputBouncerHiddenAmount != KeyguardBouncer.EXPANSION_VISIBLE)
                 && mKeyguardStateController.isShowing()) {
             return false;
@@ -267,13 +267,8 @@
             return true;
         }
 
-        if (mInputBouncerHiddenAmount < .5f || mIsBouncerVisible) {
-            if (!getStatusBarStateController().isDozing()) {
-                return true;
-            } else {
-                Log.e(TAG, "Bouncer state claims visible on doze hiddenAmount="
-                        + mInputBouncerHiddenAmount + " bouncerVisible=" + mIsBouncerVisible);
-            }
+        if (mInputBouncerHiddenAmount < .5f) {
+            return true;
         }
 
         return false;
@@ -351,6 +346,21 @@
         mView.setUnpausedAlpha(alpha);
     }
 
+    /**
+     * Updates mIsGenericBouncerShowing (whether any bouncer is showing) and updates the
+     * mInputBouncerHiddenAmount to reflect whether the input bouncer is fully showing or not.
+     */
+    private void updateGenericBouncerVisibility() {
+        mIsGenericBouncerShowing = mKeyguardViewManager.isBouncerShowing(); // includes altBouncer
+        final boolean altBouncerShowing = mKeyguardViewManager.isShowingAlternateAuth();
+        if (altBouncerShowing || !mKeyguardViewManager.bouncerIsOrWillBeShowing()) {
+            mInputBouncerHiddenAmount = 1f;
+        } else if (mIsGenericBouncerShowing) {
+            // input bouncer is fully showing
+            mInputBouncerHiddenAmount = 0f;
+        }
+    }
+
     private final StatusBarStateController.StateListener mStateListener =
             new StatusBarStateController.StateListener() {
         @Override
@@ -434,14 +444,13 @@
                     updatePauseAuth();
                 }
 
+                /**
+                 * Only called on primary auth bouncer changes, not on whether the UDFPS bouncer
+                 * visibility changes.
+                 */
                 @Override
                 public void onBouncerVisibilityChanged() {
-                    mIsBouncerVisible = mKeyguardViewManager.isBouncerShowing();
-                    if (!mIsBouncerVisible) {
-                        mInputBouncerHiddenAmount = 1f;
-                    } else if (mKeyguardViewManager.isBouncerShowing()) {
-                        mInputBouncerHiddenAmount = 0f;
-                    }
+                    updateGenericBouncerVisibility();
                     updateAlpha();
                     updatePauseAuth();
                 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 8016ea5..6758b76 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -1270,6 +1270,8 @@
         pw.println("  mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
         pw.println("  mAfterKeyguardGoneRunnables: " + mAfterKeyguardGoneRunnables);
         pw.println("  mPendingWakeupAction: " + mPendingWakeupAction);
+        pw.println("  isBouncerShowing(): " + isBouncerShowing());
+        pw.println("  bouncerIsOrWillBeShowing(): " + bouncerIsOrWillBeShowing());
 
         if (mBouncer != null) {
             mBouncer.dump(pw);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
index 186f2bb..1296417 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
@@ -205,6 +205,7 @@
 
         captureAltAuthInterceptor();
         when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
+        when(mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()).thenReturn(true);
         mAltAuthInterceptor.onBouncerVisibilityChanged();
 
         assertTrue(mController.shouldPauseAuth());
