diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt index e0b9f01bf6621..289398f695e60 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt @@ -23,6 +23,7 @@ import android.content.Context import android.graphics.Point import android.hardware.biometrics.BiometricFingerprintConstants import android.hardware.biometrics.BiometricSourceType +import android.util.DisplayMetrics import androidx.annotation.VisibleForTesting import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback @@ -39,11 +40,11 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.CircleReveal import com.android.systemui.statusbar.LiftReveal import com.android.systemui.statusbar.LightRevealEffect +import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.statusbar.commandline.Command import com.android.systemui.statusbar.commandline.CommandRegistry import com.android.systemui.statusbar.phone.BiometricUnlockController -import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController @@ -62,7 +63,6 @@ import javax.inject.Provider */ @CentralSurfacesScope class AuthRippleController @Inject constructor( - private val centralSurfaces: CentralSurfaces, private val sysuiContext: Context, private val authController: AuthController, private val configurationController: ConfigurationController, @@ -73,9 +73,11 @@ class AuthRippleController @Inject constructor( private val notificationShadeWindowController: NotificationShadeWindowController, private val udfpsControllerProvider: Provider, private val statusBarStateController: StatusBarStateController, + private val displayMetrics: DisplayMetrics, private val featureFlags: FeatureFlags, private val logger: KeyguardLogger, private val biometricUnlockController: BiometricUnlockController, + private val lightRevealScrim: LightRevealScrim, rippleView: AuthRippleView? ) : ViewController(rippleView), @@ -153,8 +155,8 @@ class AuthRippleController @Inject constructor( it.y, 0, Math.max( - Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x), - Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y) + Math.max(it.x, displayMetrics.widthPixels - it.x), + Math.max(it.y, displayMetrics.heightPixels - it.y) ) ) logger.showingUnlockRippleAt(it.x, it.y, "FP sensor radius: $udfpsRadius") @@ -168,8 +170,8 @@ class AuthRippleController @Inject constructor( it.y, 0, Math.max( - Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x), - Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y) + Math.max(it.x, displayMetrics.widthPixels - it.x), + Math.max(it.y, displayMetrics.heightPixels - it.y) ) ) logger.showingUnlockRippleAt(it.x, it.y, "Face unlock ripple") @@ -184,11 +186,10 @@ class AuthRippleController @Inject constructor( // This code path is not used if the KeyguardTransitionRepository is managing the light // reveal scrim. if (!featureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) { - val lightRevealScrim = centralSurfaces.lightRevealScrim if (statusBarStateController.isDozing || biometricUnlockController.isWakeAndUnlock) { circleReveal?.let { - lightRevealScrim?.revealAmount = 0f - lightRevealScrim?.revealEffect = it + lightRevealScrim.revealAmount = 0f + lightRevealScrim.revealEffect = it startLightRevealScrimOnKeyguardFadingAway = true } } @@ -208,8 +209,7 @@ class AuthRippleController @Inject constructor( } if (keyguardStateController.isKeyguardFadingAway) { - val lightRevealScrim = centralSurfaces.lightRevealScrim - if (startLightRevealScrimOnKeyguardFadingAway && lightRevealScrim != null) { + if (startLightRevealScrimOnKeyguardFadingAway) { lightRevealScrimAnimator?.cancel() lightRevealScrimAnimator = ValueAnimator.ofFloat(.1f, 1f).apply { interpolator = Interpolators.LINEAR_OUT_SLOW_IN diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt index b0b9ab240988f..a1fecf411e780 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt @@ -19,6 +19,7 @@ package com.android.systemui.shade import android.view.LayoutInflater import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout import dagger.Module import dagger.Provides @@ -59,5 +60,13 @@ abstract class ShadeModule { ): NotificationPanelView { return notificationShadeWindowView.findViewById(R.id.notification_panel) } + + @Provides + @SysUISingleton + fun providesLightRevealScrim( + notificationShadeWindowView: NotificationShadeWindowView, + ): LightRevealScrim { + return notificationShadeWindowView.findViewById(R.id.light_reveal_scrim) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index e66a8b16173fc..48f647121fe4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -460,7 +460,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @VisibleForTesting DozeServiceHost mDozeServiceHost; - private LightRevealScrim mLightRevealScrim; + private final LightRevealScrim mLightRevealScrim; private PowerButtonReveal mPowerButtonReveal; private boolean mWakeUpComingFromTouch; @@ -810,6 +810,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { IDreamManager dreamManager, Lazy cameraLauncherLazy, Lazy lightRevealScrimViewModelLazy, + LightRevealScrim lightRevealScrim, AlternateBouncerInteractor alternateBouncerInteractor, UserTracker userTracker, Provider fingerprintManager @@ -932,6 +933,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { wiredChargingRippleController.registerCallbacks(); mLightRevealScrimViewModelLazy = lightRevealScrimViewModelLazy; + mLightRevealScrim = lightRevealScrim; // Based on teamfood flag, turn predictive back dispatch on at runtime. if (mFeatureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_SYSUI)) { @@ -1326,8 +1328,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { }); mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront); - mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim); - if (mFeatureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) { LightRevealScrimViewBinder.bind( mLightRevealScrim, mLightRevealScrimViewModelLazy.get()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt index 7d9ccb642e477..6b5679a2a92a9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt @@ -21,6 +21,7 @@ import android.hardware.biometrics.BiometricSourceType import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper +import android.util.DisplayMetrics import androidx.test.filters.SmallTest import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession import com.android.keyguard.KeyguardUpdateMonitor @@ -35,7 +36,6 @@ import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.statusbar.commandline.CommandRegistry import com.android.systemui.statusbar.phone.BiometricUnlockController -import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.leak.RotationUtils @@ -66,7 +66,6 @@ class AuthRippleControllerTest : SysuiTestCase() { private lateinit var staticMockSession: MockitoSession private lateinit var controller: AuthRippleController - @Mock private lateinit var mCentralSurfaces: CentralSurfaces @Mock private lateinit var rippleView: AuthRippleView @Mock private lateinit var commandRegistry: CommandRegistry @Mock private lateinit var configurationController: ConfigurationController @@ -92,6 +91,8 @@ class AuthRippleControllerTest : SysuiTestCase() { @Mock private lateinit var fpSensorProp: FingerprintSensorPropertiesInternal + private val displayMetrics = DisplayMetrics() + @Captor private lateinit var biometricUnlockListener: ArgumentCaptor @@ -109,7 +110,6 @@ class AuthRippleControllerTest : SysuiTestCase() { `when`(udfpsControllerProvider.get()).thenReturn(udfpsController) controller = AuthRippleController( - mCentralSurfaces, context, authController, configurationController, @@ -120,13 +120,14 @@ class AuthRippleControllerTest : SysuiTestCase() { notificationShadeWindowController, udfpsControllerProvider, statusBarStateController, + displayMetrics, featureFlags, KeyguardLogger(logcatLogBuffer(AuthRippleController.TAG)), biometricUnlockController, + lightRevealScrim, rippleView, ) controller.init() - `when`(mCentralSurfaces.lightRevealScrim).thenReturn(lightRevealScrim) } @After diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 219e6a995680f..9de69b042781b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -138,6 +138,7 @@ import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.shade.ShadeLogger; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.KeyguardIndicationController; +import com.android.systemui.statusbar.LightRevealScrim; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationLockscreenUserManager; @@ -231,6 +232,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @Mock private IStatusBarService mBarService; @Mock private IDreamManager mDreamManager; @Mock private LightRevealScrimViewModel mLightRevealScrimViewModel; + @Mock private LightRevealScrim mLightRevealScrim; @Mock private ScrimController mScrimController; @Mock private DozeScrimController mDozeScrimController; @Mock private Lazy mBiometricUnlockControllerLazy; @@ -345,6 +347,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mFeatureFlags.set(Flags.WM_SHADE_ALLOW_BACK_GESTURE, true); // For the Shade to animate during the Back gesture, we must enable the animation flag. mFeatureFlags.set(Flags.WM_SHADE_ANIMATE_BACK_GESTURE, true); + mFeatureFlags.set(Flags.LIGHT_REVEAL_MIGRATION, true); IThermalService thermalService = mock(IThermalService.class); mPowerManager = new PowerManager(mContext, mPowerManagerService, thermalService, @@ -538,6 +541,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mDreamManager, mCameraLauncherLazy, () -> mLightRevealScrimViewModel, + mLightRevealScrim, mAlternateBouncerInteractor, mUserTracker, () -> mFingerprintManager