Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95ba0af9 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge changes from topics "caitlinshk-csg-authripplecontroller",...

Merge changes from topics "caitlinshk-csg-authripplecontroller", "caitlinshk-csg-lightrevealscrim" into udc-dev

* changes:
  [Central Surfaces] Make AuthRipple(view&controller) a singleton.
  [Central Surfaces] Remove AuthRippleController's dependency on CS.
parents 992c7033 fa5de702
Loading
Loading
Loading
Loading
+19 −13
Original line number Original line Diff line number Diff line
@@ -23,14 +23,17 @@ import android.content.Context
import android.graphics.Point
import android.graphics.Point
import android.hardware.biometrics.BiometricFingerprintConstants
import android.hardware.biometrics.BiometricFingerprintConstants
import android.hardware.biometrics.BiometricSourceType
import android.hardware.biometrics.BiometricSourceType
import android.util.DisplayMetrics
import androidx.annotation.VisibleForTesting
import androidx.annotation.VisibleForTesting
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.logging.KeyguardLogger
import com.android.keyguard.logging.KeyguardLogger
import com.android.settingslib.Utils
import com.android.settingslib.Utils
import com.android.settingslib.udfps.UdfpsOverlayParams
import com.android.settingslib.udfps.UdfpsOverlayParams
import com.android.systemui.CoreStartable
import com.android.systemui.R
import com.android.systemui.R
import com.android.systemui.animation.Interpolators
import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.keyguard.WakefulnessLifecycle
@@ -39,12 +42,11 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.CircleReveal
import com.android.systemui.statusbar.CircleReveal
import com.android.systemui.statusbar.LiftReveal
import com.android.systemui.statusbar.LiftReveal
import com.android.systemui.statusbar.LightRevealEffect
import com.android.systemui.statusbar.LightRevealEffect
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.commandline.Command
import com.android.systemui.statusbar.commandline.Command
import com.android.systemui.statusbar.commandline.CommandRegistry
import com.android.systemui.statusbar.commandline.CommandRegistry
import com.android.systemui.statusbar.phone.BiometricUnlockController
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.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.ViewController
import com.android.systemui.util.ViewController
@@ -60,9 +62,8 @@ import javax.inject.Provider
 *
 *
 * The ripple uses the accent color of the current theme.
 * The ripple uses the accent color of the current theme.
 */
 */
@CentralSurfacesScope
@SysUISingleton
class AuthRippleController @Inject constructor(
class AuthRippleController @Inject constructor(
    private val centralSurfaces: CentralSurfaces,
    private val sysuiContext: Context,
    private val sysuiContext: Context,
    private val authController: AuthController,
    private val authController: AuthController,
    private val configurationController: ConfigurationController,
    private val configurationController: ConfigurationController,
@@ -73,12 +74,15 @@ class AuthRippleController @Inject constructor(
    private val notificationShadeWindowController: NotificationShadeWindowController,
    private val notificationShadeWindowController: NotificationShadeWindowController,
    private val udfpsControllerProvider: Provider<UdfpsController>,
    private val udfpsControllerProvider: Provider<UdfpsController>,
    private val statusBarStateController: StatusBarStateController,
    private val statusBarStateController: StatusBarStateController,
    private val displayMetrics: DisplayMetrics,
    private val featureFlags: FeatureFlags,
    private val featureFlags: FeatureFlags,
    private val logger: KeyguardLogger,
    private val logger: KeyguardLogger,
    private val biometricUnlockController: BiometricUnlockController,
    private val biometricUnlockController: BiometricUnlockController,
    private val lightRevealScrim: LightRevealScrim,
    rippleView: AuthRippleView?
    rippleView: AuthRippleView?
) :
) :
    ViewController<AuthRippleView>(rippleView),
    ViewController<AuthRippleView>(rippleView),
    CoreStartable,
    KeyguardStateController.Callback,
    KeyguardStateController.Callback,
    WakefulnessLifecycle.Observer {
    WakefulnessLifecycle.Observer {


@@ -92,6 +96,10 @@ class AuthRippleController @Inject constructor(
    private var udfpsController: UdfpsController? = null
    private var udfpsController: UdfpsController? = null
    private var udfpsRadius: Float = -1f
    private var udfpsRadius: Float = -1f


    override fun start() {
        init()
    }

    @VisibleForTesting
    @VisibleForTesting
    public override fun onViewAttached() {
    public override fun onViewAttached() {
        authController.addCallback(authControllerCallback)
        authController.addCallback(authControllerCallback)
@@ -153,8 +161,8 @@ class AuthRippleController @Inject constructor(
                        it.y,
                        it.y,
                        0,
                        0,
                        Math.max(
                        Math.max(
                                Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x),
                                Math.max(it.x, displayMetrics.widthPixels - it.x),
                                Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y)
                                Math.max(it.y, displayMetrics.heightPixels - it.y)
                        )
                        )
                )
                )
                logger.showingUnlockRippleAt(it.x, it.y, "FP sensor radius: $udfpsRadius")
                logger.showingUnlockRippleAt(it.x, it.y, "FP sensor radius: $udfpsRadius")
@@ -168,8 +176,8 @@ class AuthRippleController @Inject constructor(
                        it.y,
                        it.y,
                        0,
                        0,
                        Math.max(
                        Math.max(
                                Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x),
                                Math.max(it.x, displayMetrics.widthPixels - it.x),
                                Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y)
                                Math.max(it.y, displayMetrics.heightPixels - it.y)
                        )
                        )
                )
                )
                logger.showingUnlockRippleAt(it.x, it.y, "Face unlock ripple")
                logger.showingUnlockRippleAt(it.x, it.y, "Face unlock ripple")
@@ -184,11 +192,10 @@ class AuthRippleController @Inject constructor(
        // This code path is not used if the KeyguardTransitionRepository is managing the light
        // This code path is not used if the KeyguardTransitionRepository is managing the light
        // reveal scrim.
        // reveal scrim.
        if (!featureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
        if (!featureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
            val lightRevealScrim = centralSurfaces.lightRevealScrim
            if (statusBarStateController.isDozing || biometricUnlockController.isWakeAndUnlock) {
            if (statusBarStateController.isDozing || biometricUnlockController.isWakeAndUnlock) {
                circleReveal?.let {
                circleReveal?.let {
                    lightRevealScrim?.revealAmount = 0f
                    lightRevealScrim.revealAmount = 0f
                    lightRevealScrim?.revealEffect = it
                    lightRevealScrim.revealEffect = it
                    startLightRevealScrimOnKeyguardFadingAway = true
                    startLightRevealScrimOnKeyguardFadingAway = true
                }
                }
            }
            }
@@ -208,8 +215,7 @@ class AuthRippleController @Inject constructor(
        }
        }


        if (keyguardStateController.isKeyguardFadingAway) {
        if (keyguardStateController.isKeyguardFadingAway) {
            val lightRevealScrim = centralSurfaces.lightRevealScrim
            if (startLightRevealScrimOnKeyguardFadingAway) {
            if (startLightRevealScrimOnKeyguardFadingAway && lightRevealScrim != null) {
                lightRevealScrimAnimator?.cancel()
                lightRevealScrimAnimator?.cancel()
                lightRevealScrimAnimator = ValueAnimator.ofFloat(.1f, 1f).apply {
                lightRevealScrimAnimator = ValueAnimator.ofFloat(.1f, 1f).apply {
                    interpolator = Interpolators.LINEAR_OUT_SLOW_IN
                    interpolator = Interpolators.LINEAR_OUT_SLOW_IN
+30 −0
Original line number Original line Diff line number Diff line
@@ -17,15 +17,28 @@
package com.android.systemui.shade
package com.android.systemui.shade


import android.view.LayoutInflater
import android.view.LayoutInflater
import com.android.systemui.CoreStartable
import com.android.systemui.R
import com.android.systemui.R
import com.android.systemui.biometrics.AuthRippleController
import com.android.systemui.biometrics.AuthRippleView
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
import dagger.Binds
import dagger.Module
import dagger.Module
import dagger.Provides
import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap


/** Module for classes related to the notification shade. */
/** Module for classes related to the notification shade. */
@Module
@Module
abstract class ShadeModule {
abstract class ShadeModule {

    @Binds
    @IntoMap
    @ClassKey(AuthRippleController::class)
    abstract fun bindAuthRippleController(controller: AuthRippleController): CoreStartable

    companion object {
    companion object {
        @Provides
        @Provides
        @SysUISingleton
        @SysUISingleton
@@ -59,5 +72,22 @@ abstract class ShadeModule {
        ): NotificationPanelView {
        ): NotificationPanelView {
            return notificationShadeWindowView.findViewById(R.id.notification_panel)
            return notificationShadeWindowView.findViewById(R.id.notification_panel)
        }
        }

        @Provides
        @SysUISingleton
        fun providesLightRevealScrim(
            notificationShadeWindowView: NotificationShadeWindowView,
        ): LightRevealScrim {
            return notificationShadeWindowView.findViewById(R.id.light_reveal_scrim)
        }

        // TODO(b/277762009): Only allow this view's controller to inject the view. See above.
        @Provides
        @SysUISingleton
        fun providesAuthRippleView(
            notificationShadeWindowView: NotificationShadeWindowView,
        ): AuthRippleView? {
            return notificationShadeWindowView.findViewById(R.id.auth_ripple)
        }
    }
    }
}
}
+6 −6
Original line number Original line Diff line number Diff line
@@ -452,7 +452,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    protected PhoneStatusBarView mStatusBarView;
    protected PhoneStatusBarView mStatusBarView;
    private PhoneStatusBarViewController mPhoneStatusBarViewController;
    private PhoneStatusBarViewController mPhoneStatusBarViewController;
    private PhoneStatusBarTransitions mStatusBarTransitions;
    private PhoneStatusBarTransitions mStatusBarTransitions;
    private AuthRippleController mAuthRippleController;
    private final AuthRippleController mAuthRippleController;
    @WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
    @WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
    protected final NotificationShadeWindowController mNotificationShadeWindowController;
    protected final NotificationShadeWindowController mNotificationShadeWindowController;
    private final StatusBarInitializer mStatusBarInitializer;
    private final StatusBarInitializer mStatusBarInitializer;
@@ -460,7 +460,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @VisibleForTesting
    @VisibleForTesting
    DozeServiceHost mDozeServiceHost;
    DozeServiceHost mDozeServiceHost;
    private LightRevealScrim mLightRevealScrim;
    private final LightRevealScrim mLightRevealScrim;
    private PowerButtonReveal mPowerButtonReveal;
    private PowerButtonReveal mPowerButtonReveal;


    private boolean mWakeUpComingFromTouch;
    private boolean mWakeUpComingFromTouch;
@@ -768,6 +768,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
            ScrimController scrimController,
            ScrimController scrimController,
            Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
            Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
            AuthRippleController authRippleController,
            DozeServiceHost dozeServiceHost,
            DozeServiceHost dozeServiceHost,
            PowerManager powerManager,
            PowerManager powerManager,
            ScreenPinningRequest screenPinningRequest,
            ScreenPinningRequest screenPinningRequest,
@@ -810,6 +811,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
            IDreamManager dreamManager,
            IDreamManager dreamManager,
            Lazy<CameraLauncher> cameraLauncherLazy,
            Lazy<CameraLauncher> cameraLauncherLazy,
            Lazy<LightRevealScrimViewModel> lightRevealScrimViewModelLazy,
            Lazy<LightRevealScrimViewModel> lightRevealScrimViewModelLazy,
            LightRevealScrim lightRevealScrim,
            AlternateBouncerInteractor alternateBouncerInteractor,
            AlternateBouncerInteractor alternateBouncerInteractor,
            UserTracker userTracker,
            UserTracker userTracker,
            Provider<FingerprintManager> fingerprintManager
            Provider<FingerprintManager> fingerprintManager
@@ -866,6 +868,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mScreenPinningRequest = screenPinningRequest;
        mScreenPinningRequest = screenPinningRequest;
        mDozeScrimController = dozeScrimController;
        mDozeScrimController = dozeScrimController;
        mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
        mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
        mAuthRippleController = authRippleController;
        mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy;
        mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy;
        mVolumeComponent = volumeComponent;
        mVolumeComponent = volumeComponent;
        mCommandQueue = commandQueue;
        mCommandQueue = commandQueue;
@@ -932,6 +935,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        wiredChargingRippleController.registerCallbacks();
        wiredChargingRippleController.registerCallbacks();


        mLightRevealScrimViewModelLazy = lightRevealScrimViewModelLazy;
        mLightRevealScrimViewModelLazy = lightRevealScrimViewModelLazy;
        mLightRevealScrim = lightRevealScrim;


        // Based on teamfood flag, turn predictive back dispatch on at runtime.
        // Based on teamfood flag, turn predictive back dispatch on at runtime.
        if (mFeatureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_SYSUI)) {
        if (mFeatureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_SYSUI)) {
@@ -1326,8 +1330,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        });
        });
        mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront);
        mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront);


        mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);

        if (mFeatureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
        if (mFeatureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
            LightRevealScrimViewBinder.bind(
            LightRevealScrimViewBinder.bind(
                    mLightRevealScrim, mLightRevealScrimViewModelLazy.get());
                    mLightRevealScrim, mLightRevealScrimViewModelLazy.get());
@@ -1667,8 +1669,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mPresenter = mCentralSurfacesComponent.getNotificationPresenter();
        mPresenter = mCentralSurfacesComponent.getNotificationPresenter();
        mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
        mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
        mNotificationShelfController = mCentralSurfacesComponent.getNotificationShelfController();
        mNotificationShelfController = mCentralSurfacesComponent.getNotificationShelfController();
        mAuthRippleController = mCentralSurfacesComponent.getAuthRippleController();
        mAuthRippleController.init();


        mHeadsUpManager.addListener(mCentralSurfacesComponent.getStatusBarHeadsUpChangeListener());
        mHeadsUpManager.addListener(mCentralSurfacesComponent.getStatusBarHeadsUpChangeListener());


+0 −5
Original line number Original line Diff line number Diff line
@@ -121,11 +121,6 @@ public interface CentralSurfacesComponent {
     */
     */
    LockIconViewController getLockIconViewController();
    LockIconViewController getLockIconViewController();


    /**
     * Creates an AuthRippleViewController. Must be init after creation.
     */
    AuthRippleController getAuthRippleController();

    /**
    /**
     * Creates a StatusBarHeadsUpChangeListener.
     * Creates a StatusBarHeadsUpChangeListener.
     */
     */
+0 −10
Original line number Original line Diff line number Diff line
@@ -29,7 +29,6 @@ import com.android.keyguard.LockIconView;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.biometrics.AuthRippleView;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FeatureFlags;
@@ -148,15 +147,6 @@ public abstract class StatusBarViewModule {
        return notificationShadeWindowView.findViewById(R.id.lock_icon_view);
        return notificationShadeWindowView.findViewById(R.id.lock_icon_view);
    }
    }


    /** */
    @Provides
    @CentralSurfacesComponent.CentralSurfacesScope
    @Nullable
    public static AuthRippleView getAuthRippleView(
            NotificationShadeWindowView notificationShadeWindowView) {
        return notificationShadeWindowView.findViewById(R.id.auth_ripple);
    }

    /** */
    /** */
    @Provides
    @Provides
    @Named(SHADE_HEADER)
    @Named(SHADE_HEADER)
Loading