Loading packages/SystemUI/res/values/flags.xml +3 −0 Original line number Diff line number Diff line Loading @@ -40,4 +40,7 @@ <!-- Whether face auth will immediately stop when the display state is OFF --> <bool name="flag_stop_face_auth_on_display_off">false</bool> <!-- Whether we want to stop pulsing while running the face scanning animation --> <bool name="flag_stop_pulsing_face_scanning_animation">true</bool> </resources> packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt +12 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.settingslib.Utils import com.android.systemui.biometrics.AuthController import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.util.asIndenting Loading @@ -54,6 +56,7 @@ class FaceScanningOverlay( val mainExecutor: Executor, val logger: ScreenDecorationsLogger, val authController: AuthController, val featureFlags: FeatureFlags, ) : ScreenDecorations.DisplayCutoutView(context, pos) { private var showScanningAnim = false private val rimPaint = Paint() Loading Loading @@ -294,6 +297,15 @@ class FaceScanningOverlay( } private fun createFaceScanningRimAnimator(): AnimatorSet { val dontPulse = featureFlags.isEnabled(Flags.STOP_PULSING_FACE_SCANNING_ANIMATION) if (dontPulse) { return AnimatorSet().apply { playSequentially( cameraProtectionAnimator, createRimAppearAnimator(), ) } } return AnimatorSet().apply { playSequentially( cameraProtectionAnimator, Loading packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt +5 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.FaceScanningOverlay import com.android.systemui.biometrics.AuthController import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import java.util.concurrent.Executor Loading @@ -47,6 +48,7 @@ class FaceScanningProviderFactory @Inject constructor( private val keyguardUpdateMonitor: KeyguardUpdateMonitor, @Main private val mainExecutor: Executor, private val logger: ScreenDecorationsLogger, private val featureFlags: FeatureFlags, ) : DecorProviderFactory() { private val display = context.display private val displayInfo = DisplayInfo() Loading Loading @@ -86,6 +88,7 @@ class FaceScanningProviderFactory @Inject constructor( keyguardUpdateMonitor, mainExecutor, logger, featureFlags, ) ) } Loading @@ -110,6 +113,7 @@ class FaceScanningOverlayProviderImpl( private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val mainExecutor: Executor, private val logger: ScreenDecorationsLogger, private val featureFlags: FeatureFlags, ) : BoundDecorProvider() { override val viewId: Int = com.android.systemui.R.id.face_scanning_anim Loading Loading @@ -144,6 +148,7 @@ class FaceScanningOverlayProviderImpl( mainExecutor, logger, authController, featureFlags ) view.id = viewId view.setColor(tintColor) Loading packages/SystemUI/src/com/android/systemui/flags/Flags.kt +6 −0 Original line number Diff line number Diff line Loading @@ -273,6 +273,12 @@ object Flags { @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(245, R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off") /** Flag to disable the face scanning animation pulsing. */ // TODO(b/295245791): Tracking bug. @JvmField val STOP_PULSING_FACE_SCANNING_ANIMATION = resourceBooleanFlag(246, R.bool.flag_stop_pulsing_face_scanning_animation, "stop_pulsing_face_scanning_animation") // 300 - power menu // TODO(b/254512600): Tracking Bug @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite") Loading packages/SystemUI/tests/src/com/android/systemui/FaceScanningProviderFactoryTest.kt +6 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.biometrics.AuthController import com.android.systemui.decor.FaceScanningProviderFactory import com.android.systemui.dump.logcatLogBuffer import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.util.mockito.whenever Loading Loading @@ -80,6 +82,8 @@ class FaceScanningProviderFactoryTest : SysuiTestCase() { R.bool.config_fillMainBuiltInDisplayCutout, true ) val featureFlags = FakeFeatureFlags() featureFlags.set(Flags.STOP_PULSING_FACE_SCANNING_ANIMATION, true) underTest = FaceScanningProviderFactory( authController, Loading @@ -87,7 +91,8 @@ class FaceScanningProviderFactoryTest : SysuiTestCase() { statusBarStateController, keyguardUpdateMonitor, mock(Executor::class.java), ScreenDecorationsLogger(logcatLogBuffer("FaceScanningProviderFactoryTest")) ScreenDecorationsLogger(logcatLogBuffer("FaceScanningProviderFactoryTest")), featureFlags, ) whenever(authController.faceSensorLocation).thenReturn(Point(10, 10)) Loading Loading
packages/SystemUI/res/values/flags.xml +3 −0 Original line number Diff line number Diff line Loading @@ -40,4 +40,7 @@ <!-- Whether face auth will immediately stop when the display state is OFF --> <bool name="flag_stop_face_auth_on_display_off">false</bool> <!-- Whether we want to stop pulsing while running the face scanning animation --> <bool name="flag_stop_pulsing_face_scanning_animation">true</bool> </resources>
packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt +12 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.settingslib.Utils import com.android.systemui.biometrics.AuthController import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.util.asIndenting Loading @@ -54,6 +56,7 @@ class FaceScanningOverlay( val mainExecutor: Executor, val logger: ScreenDecorationsLogger, val authController: AuthController, val featureFlags: FeatureFlags, ) : ScreenDecorations.DisplayCutoutView(context, pos) { private var showScanningAnim = false private val rimPaint = Paint() Loading Loading @@ -294,6 +297,15 @@ class FaceScanningOverlay( } private fun createFaceScanningRimAnimator(): AnimatorSet { val dontPulse = featureFlags.isEnabled(Flags.STOP_PULSING_FACE_SCANNING_ANIMATION) if (dontPulse) { return AnimatorSet().apply { playSequentially( cameraProtectionAnimator, createRimAppearAnimator(), ) } } return AnimatorSet().apply { playSequentially( cameraProtectionAnimator, Loading
packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt +5 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.FaceScanningOverlay import com.android.systemui.biometrics.AuthController import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import java.util.concurrent.Executor Loading @@ -47,6 +48,7 @@ class FaceScanningProviderFactory @Inject constructor( private val keyguardUpdateMonitor: KeyguardUpdateMonitor, @Main private val mainExecutor: Executor, private val logger: ScreenDecorationsLogger, private val featureFlags: FeatureFlags, ) : DecorProviderFactory() { private val display = context.display private val displayInfo = DisplayInfo() Loading Loading @@ -86,6 +88,7 @@ class FaceScanningProviderFactory @Inject constructor( keyguardUpdateMonitor, mainExecutor, logger, featureFlags, ) ) } Loading @@ -110,6 +113,7 @@ class FaceScanningOverlayProviderImpl( private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val mainExecutor: Executor, private val logger: ScreenDecorationsLogger, private val featureFlags: FeatureFlags, ) : BoundDecorProvider() { override val viewId: Int = com.android.systemui.R.id.face_scanning_anim Loading Loading @@ -144,6 +148,7 @@ class FaceScanningOverlayProviderImpl( mainExecutor, logger, authController, featureFlags ) view.id = viewId view.setColor(tintColor) Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.kt +6 −0 Original line number Diff line number Diff line Loading @@ -273,6 +273,12 @@ object Flags { @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(245, R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off") /** Flag to disable the face scanning animation pulsing. */ // TODO(b/295245791): Tracking bug. @JvmField val STOP_PULSING_FACE_SCANNING_ANIMATION = resourceBooleanFlag(246, R.bool.flag_stop_pulsing_face_scanning_animation, "stop_pulsing_face_scanning_animation") // 300 - power menu // TODO(b/254512600): Tracking Bug @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite") Loading
packages/SystemUI/tests/src/com/android/systemui/FaceScanningProviderFactoryTest.kt +6 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.biometrics.AuthController import com.android.systemui.decor.FaceScanningProviderFactory import com.android.systemui.dump.logcatLogBuffer import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.log.ScreenDecorationsLogger import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.util.mockito.whenever Loading Loading @@ -80,6 +82,8 @@ class FaceScanningProviderFactoryTest : SysuiTestCase() { R.bool.config_fillMainBuiltInDisplayCutout, true ) val featureFlags = FakeFeatureFlags() featureFlags.set(Flags.STOP_PULSING_FACE_SCANNING_ANIMATION, true) underTest = FaceScanningProviderFactory( authController, Loading @@ -87,7 +91,8 @@ class FaceScanningProviderFactoryTest : SysuiTestCase() { statusBarStateController, keyguardUpdateMonitor, mock(Executor::class.java), ScreenDecorationsLogger(logcatLogBuffer("FaceScanningProviderFactoryTest")) ScreenDecorationsLogger(logcatLogBuffer("FaceScanningProviderFactoryTest")), featureFlags, ) whenever(authController.faceSensorLocation).thenReturn(Point(10, 10)) Loading