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.
This commit is contained in:
committed by
Android (Google) Code Review
commit
95ba0af972
@@ -23,14 +23,17 @@ 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
|
||||
import com.android.keyguard.logging.KeyguardLogger
|
||||
import com.android.settingslib.Utils
|
||||
import com.android.settingslib.udfps.UdfpsOverlayParams
|
||||
import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.animation.Interpolators
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
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.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
|
||||
import com.android.systemui.util.ViewController
|
||||
@@ -60,9 +62,8 @@ import javax.inject.Provider
|
||||
*
|
||||
* The ripple uses the accent color of the current theme.
|
||||
*/
|
||||
@CentralSurfacesScope
|
||||
@SysUISingleton
|
||||
class AuthRippleController @Inject constructor(
|
||||
private val centralSurfaces: CentralSurfaces,
|
||||
private val sysuiContext: Context,
|
||||
private val authController: AuthController,
|
||||
private val configurationController: ConfigurationController,
|
||||
@@ -73,12 +74,15 @@ class AuthRippleController @Inject constructor(
|
||||
private val notificationShadeWindowController: NotificationShadeWindowController,
|
||||
private val udfpsControllerProvider: Provider<UdfpsController>,
|
||||
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<AuthRippleView>(rippleView),
|
||||
CoreStartable,
|
||||
KeyguardStateController.Callback,
|
||||
WakefulnessLifecycle.Observer {
|
||||
|
||||
@@ -92,6 +96,10 @@ class AuthRippleController @Inject constructor(
|
||||
private var udfpsController: UdfpsController? = null
|
||||
private var udfpsRadius: Float = -1f
|
||||
|
||||
override fun start() {
|
||||
init()
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public override fun onViewAttached() {
|
||||
authController.addCallback(authControllerCallback)
|
||||
@@ -153,8 +161,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 +176,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 +192,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 +215,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
|
||||
|
||||
@@ -17,15 +17,28 @@
|
||||
package com.android.systemui.shade
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import com.android.systemui.CoreStartable
|
||||
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.statusbar.LightRevealScrim
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.multibindings.ClassKey
|
||||
import dagger.multibindings.IntoMap
|
||||
|
||||
/** Module for classes related to the notification shade. */
|
||||
@Module
|
||||
abstract class ShadeModule {
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(AuthRippleController::class)
|
||||
abstract fun bindAuthRippleController(controller: AuthRippleController): CoreStartable
|
||||
|
||||
companion object {
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
@@ -59,5 +72,22 @@ 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)
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
protected PhoneStatusBarView mStatusBarView;
|
||||
private PhoneStatusBarViewController mPhoneStatusBarViewController;
|
||||
private PhoneStatusBarTransitions mStatusBarTransitions;
|
||||
private AuthRippleController mAuthRippleController;
|
||||
private final AuthRippleController mAuthRippleController;
|
||||
@WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
|
||||
protected final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
private final StatusBarInitializer mStatusBarInitializer;
|
||||
@@ -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;
|
||||
@@ -768,6 +768,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
ScrimController scrimController,
|
||||
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
|
||||
Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
|
||||
AuthRippleController authRippleController,
|
||||
DozeServiceHost dozeServiceHost,
|
||||
PowerManager powerManager,
|
||||
ScreenPinningRequest screenPinningRequest,
|
||||
@@ -810,6 +811,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
IDreamManager dreamManager,
|
||||
Lazy<CameraLauncher> cameraLauncherLazy,
|
||||
Lazy<LightRevealScrimViewModel> lightRevealScrimViewModelLazy,
|
||||
LightRevealScrim lightRevealScrim,
|
||||
AlternateBouncerInteractor alternateBouncerInteractor,
|
||||
UserTracker userTracker,
|
||||
Provider<FingerprintManager> fingerprintManager
|
||||
@@ -866,6 +868,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
mScreenPinningRequest = screenPinningRequest;
|
||||
mDozeScrimController = dozeScrimController;
|
||||
mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
|
||||
mAuthRippleController = authRippleController;
|
||||
mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy;
|
||||
mVolumeComponent = volumeComponent;
|
||||
mCommandQueue = commandQueue;
|
||||
@@ -932,6 +935,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 +1330,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());
|
||||
@@ -1667,8 +1669,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
mPresenter = mCentralSurfacesComponent.getNotificationPresenter();
|
||||
mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
|
||||
mNotificationShelfController = mCentralSurfacesComponent.getNotificationShelfController();
|
||||
mAuthRippleController = mCentralSurfacesComponent.getAuthRippleController();
|
||||
mAuthRippleController.init();
|
||||
|
||||
mHeadsUpManager.addListener(mCentralSurfacesComponent.getStatusBarHeadsUpChangeListener());
|
||||
|
||||
|
||||
@@ -121,11 +121,6 @@ public interface CentralSurfacesComponent {
|
||||
*/
|
||||
LockIconViewController getLockIconViewController();
|
||||
|
||||
/**
|
||||
* Creates an AuthRippleViewController. Must be init after creation.
|
||||
*/
|
||||
AuthRippleController getAuthRippleController();
|
||||
|
||||
/**
|
||||
* Creates a StatusBarHeadsUpChangeListener.
|
||||
*/
|
||||
|
||||
@@ -29,7 +29,6 @@ import com.android.keyguard.LockIconView;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.battery.BatteryMeterView;
|
||||
import com.android.systemui.battery.BatteryMeterViewController;
|
||||
import com.android.systemui.biometrics.AuthRippleView;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.flags.FeatureFlags;
|
||||
@@ -148,15 +147,6 @@ public abstract class StatusBarViewModule {
|
||||
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
|
||||
@Named(SHADE_HEADER)
|
||||
|
||||
@@ -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<BiometricUnlockController.BiometricUnlockEventsListener>
|
||||
@@ -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
|
||||
|
||||
@@ -101,6 +101,7 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController;
|
||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.biometrics.AuthRippleController;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.charging.WiredChargingRippleController;
|
||||
import com.android.systemui.classifier.FalsingCollectorFake;
|
||||
@@ -138,6 +139,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,10 +233,12 @@ 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<BiometricUnlockController> mBiometricUnlockControllerLazy;
|
||||
@Mock private BiometricUnlockController mBiometricUnlockController;
|
||||
@Mock private AuthRippleController mAuthRippleController;
|
||||
@Mock private NotificationListener mNotificationListener;
|
||||
@Mock private KeyguardViewMediator mKeyguardViewMediator;
|
||||
@Mock private NotificationLockscreenUserManager mLockscreenUserManager;
|
||||
@@ -345,6 +349,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,
|
||||
@@ -497,6 +502,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
|
||||
mScrimController,
|
||||
mLockscreenWallpaperLazy,
|
||||
mBiometricUnlockControllerLazy,
|
||||
mAuthRippleController,
|
||||
mDozeServiceHost,
|
||||
mPowerManager, mScreenPinningRequest,
|
||||
mDozeScrimController,
|
||||
@@ -538,6 +544,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
|
||||
mDreamManager,
|
||||
mCameraLauncherLazy,
|
||||
() -> mLightRevealScrimViewModel,
|
||||
mLightRevealScrim,
|
||||
mAlternateBouncerInteractor,
|
||||
mUserTracker,
|
||||
() -> mFingerprintManager
|
||||
|
||||
Reference in New Issue
Block a user