diff options
| author | 2024-04-24 19:46:05 +0000 | |
|---|---|---|
| committer | 2024-04-24 19:46:05 +0000 | |
| commit | 64fed7b8d6453738f8873a211e5379e6675b762e (patch) | |
| tree | 5625e3a756168d1a907918b98b9cb1c8796721d3 | |
| parent | 41f79f5568fe42613d75b2797043b163cee4da81 (diff) | |
| parent | 9d0d1c554231208955509d1c39493e4a8da9d8ae (diff) | |
Merge "Deflag SidefpsController refactor" into main
37 files changed, 112 insertions, 2311 deletions
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 37f2fb2a538a..25bfb2ab91e7 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -962,24 +962,6 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing } } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** - * @hide - */ - @RequiresPermission(USE_BIOMETRIC_INTERNAL) - public void setSidefpsController(@NonNull ISidefpsController controller) { - if (mService == null) { - Slog.w(TAG, "setSidefpsController: no fingerprint service"); - return; - } - - try { - mService.setSidefpsController(controller); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - /** * Forwards BiometricStateListener to FingerprintService * @param listener new BiometricStateListener being added diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index 6a96ac4afca7..742fa570bad7 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -27,7 +27,6 @@ import android.hardware.fingerprint.IFingerprintClientActiveCallback; import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.hardware.fingerprint.IUdfpsOverlayController; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintAuthenticateOptions; import android.hardware.fingerprint.FingerprintEnrollOptions; @@ -200,10 +199,6 @@ interface IFingerprintService { @EnforcePermission("USE_BIOMETRIC_INTERNAL") void setUdfpsOverlayController(in IUdfpsOverlayController controller); - // Sets the controller for managing the SideFPS overlay. - @EnforcePermission("USE_BIOMETRIC_INTERNAL") - void setSidefpsController(in ISidefpsController controller); - // Registers AuthenticationStateListener. @EnforcePermission("USE_BIOMETRIC_INTERNAL") void registerAuthenticationStateListener(AuthenticationStateListener listener); diff --git a/core/java/android/hardware/fingerprint/ISidefpsController.aidl b/core/java/android/hardware/fingerprint/ISidefpsController.aidl deleted file mode 100644 index 684f18f3fd94..000000000000 --- a/core/java/android/hardware/fingerprint/ISidefpsController.aidl +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package android.hardware.fingerprint; - -/** - * Interface for interacting with the side fingerprint sensor (side-fps) overlay. - * @hide - */ -oneway interface ISidefpsController { - - // Shows the overlay for the given sensor with a reason from BiometricOverlayConstants. - void show(int sensorId, int reason); - - // Hides the overlay. - void hide(int sensorId); -} diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index ed2d20c001f6..aa70c45d3ff3 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -18,7 +18,6 @@ package com.android.keyguard import android.content.res.Configuration -import android.hardware.biometrics.BiometricRequestConstants import android.media.AudioManager import android.telephony.TelephonyManager import android.testing.TestableLooper.RunWithLooper @@ -41,8 +40,6 @@ import com.android.keyguard.domain.interactor.KeyguardKeyboardInteractor import com.android.systemui.Flags as AConfigFlags import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.FaceAuthAccessibilityDelegate -import com.android.systemui.biometrics.SideFpsController -import com.android.systemui.biometrics.SideFpsUiRequestSource import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.classifier.FalsingA11yDelegate @@ -70,7 +67,6 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.FakeSceneDataSource import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.DevicePostureController import com.android.systemui.statusbar.policy.DeviceProvisionedController @@ -87,7 +83,6 @@ import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.settings.GlobalSettings import com.google.common.truth.Truth -import java.util.Optional import junit.framework.Assert import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow @@ -143,7 +138,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { @Mock private lateinit var userSwitcherController: UserSwitcherController @Mock private lateinit var sessionTracker: SessionTracker @Mock private lateinit var keyguardViewController: KeyguardViewController - @Mock private lateinit var sideFpsController: SideFpsController @Mock private lateinit var keyguardPasswordViewControllerMock: KeyguardPasswordViewController @Mock private lateinit var falsingA11yDelegate: FalsingA11yDelegate @Mock private lateinit var telephonyManager: TelephonyManager @@ -214,9 +208,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { mSetFlagsRule.enableFlags( AConfigFlags.FLAG_REVAMPED_BOUNCER_MESSAGES, ) - mSetFlagsRule.disableFlags( - FLAG_SIDEFPS_CONTROLLER_REFACTOR, - ) if (!SceneContainerFlag.isEnabled) { mSetFlagsRule.disableFlags( AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR, @@ -273,7 +264,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { featureFlags, globalSettings, sessionTracker, - Optional.of(sideFpsController), falsingA11yDelegate, telephonyManager, viewMediatorCallback, @@ -781,24 +771,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { } @Test - fun sideFpsControllerShow() { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - underTest.updateSideFpsVisibility(/* isVisible= */ true) - verify(sideFpsController) - .show( - SideFpsUiRequestSource.PRIMARY_BOUNCER, - BiometricRequestConstants.REASON_AUTH_KEYGUARD - ) - } - - @Test - fun sideFpsControllerHide() { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - underTest.updateSideFpsVisibility(/* isVisible= */ false) - verify(sideFpsController).hide(SideFpsUiRequestSource.PRIMARY_BOUNCER) - } - - @Test fun setExpansion_setsAlpha() { underTest.setExpansion(KeyguardBouncerConstants.EXPANSION_VISIBLE) verify(view).alpha = 1f diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java index 289896e01a9d..f4ad7649a18f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -145,8 +145,6 @@ public class AuthControllerTest extends SysuiTestCase { @Mock private UdfpsController mUdfpsController; @Mock - private SideFpsController mSideFpsController; - @Mock private DisplayManager mDisplayManager; @Mock private WakefulnessLifecycle mWakefulnessLifecycle; @@ -1064,14 +1062,12 @@ public class AuthControllerTest extends SysuiTestCase { TestableAuthController(Context context) { super(context, null /* applicationCoroutineScope */, mExecution, mCommandQueue, mActivityTaskManager, mWindowManager, - mFingerprintManager, mFaceManager, () -> mUdfpsController, - () -> mSideFpsController, mDisplayManager, mWakefulnessLifecycle, - mPanelInteractionDetector, mUserManager, mLockPatternUtils, () -> mUdfpsLogger, - () -> mLogContextInteractor, - () -> mBiometricPromptCredentialInteractor, - () -> mPromptSelectionInteractor, () -> mCredentialViewModel, - () -> mPromptViewModel, mInteractionJankMonitor, mHandler, mBackgroundExecutor, - mUdfpsUtils, mVibratorHelper); + mFingerprintManager, mFaceManager, () -> mUdfpsController, mDisplayManager, + mWakefulnessLifecycle, mPanelInteractionDetector, mUserManager, + mLockPatternUtils, () -> mUdfpsLogger, () -> mLogContextInteractor, + () -> mBiometricPromptCredentialInteractor, () -> mPromptSelectionInteractor, + () -> mCredentialViewModel, () -> mPromptViewModel, mInteractionJankMonitor, + mHandler, mBackgroundExecutor, mUdfpsUtils, mVibratorHelper); } @Override diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt deleted file mode 100644 index 07e9815fb5a5..000000000000 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt +++ /dev/null @@ -1,898 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.biometrics - -import android.animation.Animator -import android.app.ActivityManager -import android.app.ActivityTaskManager -import android.content.ComponentName -import android.graphics.Insets -import android.graphics.Rect -import android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_KEYGUARD -import android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_SETTINGS -import android.hardware.biometrics.BiometricRequestConstants.REASON_UNKNOWN -import android.hardware.biometrics.SensorLocationInternal -import android.hardware.biometrics.SensorProperties -import android.hardware.display.DisplayManager -import android.hardware.display.DisplayManagerGlobal -import android.hardware.fingerprint.FingerprintManager -import android.hardware.fingerprint.FingerprintSensorProperties -import android.hardware.fingerprint.FingerprintSensorPropertiesInternal -import android.hardware.fingerprint.ISidefpsController -import android.os.Handler -import android.testing.TestableLooper -import android.view.Display -import android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS -import android.view.DisplayInfo -import android.view.LayoutInflater -import android.view.Surface -import android.view.View -import android.view.ViewPropertyAnimator -import android.view.WindowInsets -import android.view.WindowManager -import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION -import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY -import android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG -import android.view.WindowMetrics -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.SmallTest -import com.airbnb.lottie.LottieAnimationView -import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.SysuiTestCase -import com.android.systemui.SysuiTestableContext -import com.android.systemui.biometrics.data.repository.FakeDisplayStateRepository -import com.android.systemui.biometrics.data.repository.FakeFingerprintPropertyRepository -import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor -import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractorImpl -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository -import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor -import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor -import com.android.systemui.display.data.repository.FakeDisplayRepository -import com.android.systemui.dump.DumpManager -import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor -import com.android.systemui.plugins.statusbar.StatusBarStateController -import com.android.systemui.res.R -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR -import com.android.systemui.statusbar.policy.KeyguardStateController -import com.android.systemui.util.concurrency.FakeExecutor -import com.android.systemui.util.time.FakeSystemClock -import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.coroutines.test.TestCoroutineScope -import kotlinx.coroutines.test.TestScope -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentCaptor -import org.mockito.ArgumentMatchers.eq -import org.mockito.Captor -import org.mockito.Mock -import org.mockito.Mockito.any -import org.mockito.Mockito.anyFloat -import org.mockito.Mockito.anyInt -import org.mockito.Mockito.anyLong -import org.mockito.Mockito.mock -import org.mockito.Mockito.never -import org.mockito.Mockito.reset -import org.mockito.Mockito.times -import org.mockito.Mockito.verify -import org.mockito.Mockito.`when` as whenEver -import org.mockito.junit.MockitoJUnit - -private const val DISPLAY_ID = 2 -private const val SENSOR_ID = 1 - -private const val REAR_DISPLAY_MODE_DEVICE_STATE = 3 - -@SmallTest -@RunWith(AndroidJUnit4::class) -@TestableLooper.RunWithLooper -class SideFpsControllerTest : SysuiTestCase() { - - @JvmField @Rule var rule = MockitoJUnit.rule() - - @Mock lateinit var layoutInflater: LayoutInflater - @Mock lateinit var fingerprintManager: FingerprintManager - @Mock lateinit var windowManager: WindowManager - @Mock lateinit var activityTaskManager: ActivityTaskManager - @Mock lateinit var sideFpsView: View - @Mock lateinit var displayManager: DisplayManager - @Mock lateinit var handler: Handler - @Mock lateinit var dumpManager: DumpManager - @Mock lateinit var fpsUnlockTracker: FpsUnlockTracker - @Captor lateinit var overlayCaptor: ArgumentCaptor<View> - @Captor lateinit var overlayViewParamsCaptor: ArgumentCaptor<WindowManager.LayoutParams> - - private lateinit var displayRepository: FakeDisplayRepository - private lateinit var displayStateRepository: FakeDisplayStateRepository - private lateinit var keyguardBouncerRepository: FakeKeyguardBouncerRepository - private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor - private lateinit var displayStateInteractor: DisplayStateInteractor - - private val executor = FakeExecutor(FakeSystemClock()) - private val testScope = TestScope(StandardTestDispatcher()) - - private lateinit var overlayController: ISidefpsController - private lateinit var sideFpsController: SideFpsController - - enum class DeviceConfig { - X_ALIGNED, - Y_ALIGNED, - } - - private lateinit var deviceConfig: DeviceConfig - private lateinit var indicatorBounds: Rect - private lateinit var displayBounds: Rect - private lateinit var sensorLocation: SensorLocationInternal - private var displayWidth: Int = 0 - private var displayHeight: Int = 0 - private var boundsWidth: Int = 0 - private var boundsHeight: Int = 0 - - @Before - fun setup() { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - displayRepository = FakeDisplayRepository() - displayStateRepository = FakeDisplayStateRepository() - keyguardBouncerRepository = FakeKeyguardBouncerRepository() - alternateBouncerInteractor = - AlternateBouncerInteractor( - mock(StatusBarStateController::class.java), - mock(KeyguardStateController::class.java), - keyguardBouncerRepository, - FakeFingerprintPropertyRepository(), - FakeBiometricSettingsRepository(), - FakeSystemClock(), - mock(KeyguardUpdateMonitor::class.java), - { mock(DeviceEntryFingerprintAuthInteractor::class.java) }, - { mock(KeyguardInteractor::class.java) }, - { mock(KeyguardTransitionInteractor::class.java) }, - testScope.backgroundScope, - ) - displayStateInteractor = - DisplayStateInteractorImpl( - testScope.backgroundScope, - context, - executor, - displayStateRepository, - displayRepository, - ) - - context.addMockSystemService(DisplayManager::class.java, displayManager) - context.addMockSystemService(WindowManager::class.java, windowManager) - - whenEver(layoutInflater.inflate(R.layout.sidefps_view, null, false)).thenReturn(sideFpsView) - whenEver(sideFpsView.requireViewById<LottieAnimationView>(eq(R.id.sidefps_animation))) - .thenReturn(mock(LottieAnimationView::class.java)) - with(mock(ViewPropertyAnimator::class.java)) { - whenEver(sideFpsView.animate()).thenReturn(this) - whenEver(alpha(anyFloat())).thenReturn(this) - whenEver(setStartDelay(anyLong())).thenReturn(this) - whenEver(setDuration(anyLong())).thenReturn(this) - whenEver(setListener(any())).thenAnswer { - (it.arguments[0] as Animator.AnimatorListener).onAnimationEnd( - mock(Animator::class.java) - ) - this - } - } - } - - private fun testWithDisplay( - deviceConfig: DeviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation: Boolean = false, - initInfo: DisplayInfo.() -> Unit = {}, - windowInsets: WindowInsets = insetsForSmallNavbar(), - inRearDisplayMode: Boolean = false, - block: () -> Unit - ) { - this.deviceConfig = deviceConfig - - when (deviceConfig) { - DeviceConfig.X_ALIGNED -> { - displayWidth = 3000 - displayHeight = 1500 - sensorLocation = SensorLocationInternal("", 2500, 0, 0) - boundsWidth = 200 - boundsHeight = 100 - } - DeviceConfig.Y_ALIGNED -> { - displayWidth = 2500 - displayHeight = 2000 - sensorLocation = SensorLocationInternal("", 0, 300, 0) - boundsWidth = 100 - boundsHeight = 200 - } - } - - indicatorBounds = Rect(0, 0, boundsWidth, boundsHeight) - displayBounds = Rect(0, 0, displayWidth, displayHeight) - var locations = listOf(sensorLocation) - - whenEver(fingerprintManager.sensorPropertiesInternal) - .thenReturn( - listOf( - FingerprintSensorPropertiesInternal( - SENSOR_ID, - SensorProperties.STRENGTH_STRONG, - 5 /* maxEnrollmentsPerUser */, - listOf() /* componentInfo */, - FingerprintSensorProperties.TYPE_POWER_BUTTON, - true /* halControlsIllumination */, - true /* resetLockoutRequiresHardwareAuthToken */, - locations - ) - ) - ) - - val displayInfo = DisplayInfo() - displayInfo.initInfo() - - val dmGlobal = mock(DisplayManagerGlobal::class.java) - val display = Display(dmGlobal, DISPLAY_ID, displayInfo, DEFAULT_DISPLAY_ADJUSTMENTS) - - whenEver(dmGlobal.getDisplayInfo(eq(DISPLAY_ID))).thenReturn(displayInfo) - whenEver(windowManager.defaultDisplay).thenReturn(display) - whenEver(windowManager.maximumWindowMetrics) - .thenReturn(WindowMetrics(displayBounds, WindowInsets.CONSUMED)) - whenEver(windowManager.currentWindowMetrics) - .thenReturn(WindowMetrics(displayBounds, windowInsets)) - - val sideFpsControllerContext = context.createDisplayContext(display) as SysuiTestableContext - sideFpsControllerContext.orCreateTestableResources.addOverride( - com.android.internal.R.bool.config_reverseDefaultRotation, - isReverseDefaultRotation - ) - - val rearDisplayDeviceStates = - if (inRearDisplayMode) intArrayOf(REAR_DISPLAY_MODE_DEVICE_STATE) else intArrayOf() - sideFpsControllerContext.orCreateTestableResources.addOverride( - com.android.internal.R.array.config_rearDisplayDeviceStates, - rearDisplayDeviceStates - ) - - sideFpsController = - SideFpsController( - sideFpsControllerContext, - layoutInflater, - fingerprintManager, - windowManager, - activityTaskManager, - displayManager, - displayStateInteractor, - executor, - handler, - alternateBouncerInteractor, - TestCoroutineScope(), - dumpManager, - fpsUnlockTracker - ) - displayStateRepository.setIsInRearDisplayMode(inRearDisplayMode) - - overlayController = - ArgumentCaptor.forClass(ISidefpsController::class.java) - .apply { verify(fingerprintManager).setSidefpsController(capture()) } - .value - - block() - } - - @Test - fun testSubscribesToOrientationChangesWhenShowingOverlay() = testWithDisplay { - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(displayManager).registerDisplayListener(any(), eq(handler), anyLong()) - - overlayController.hide(SENSOR_ID) - executor.runAllReady() - verify(displayManager).unregisterDisplayListener(any()) - } - - @Test - fun testShowOverlayReasonWhenDisplayChanged() = testWithDisplay { - sideFpsController.show(SideFpsUiRequestSource.AUTO_SHOW, REASON_AUTH_KEYGUARD) - executor.runAllReady() - sideFpsController.orientationListener.onDisplayChanged(1 /* displayId */) - executor.runAllReady() - - assertThat(sideFpsController.orientationReasonListener.reason) - .isEqualTo(REASON_AUTH_KEYGUARD) - } - - @Test - fun testShowsAndHides() = testWithDisplay { - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).addView(overlayCaptor.capture(), any()) - - reset(windowManager) - overlayController.hide(SENSOR_ID) - executor.runAllReady() - - verify(windowManager, never()).addView(any(), any()) - verify(windowManager).removeView(eq(overlayCaptor.value)) - } - - @Test - fun testShowsOnce() = testWithDisplay { - repeat(5) { - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - } - - verify(windowManager).addView(any(), any()) - verify(windowManager, never()).removeView(any()) - } - - @Test - fun testHidesOnce() = testWithDisplay { - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - repeat(5) { - overlayController.hide(SENSOR_ID) - executor.runAllReady() - } - - verify(windowManager).addView(any(), any()) - verify(windowManager).removeView(any()) - } - - @Test fun testIgnoredForKeyguard() = testWithDisplay { testIgnoredFor(REASON_AUTH_KEYGUARD) } - - @Test - fun testShowsForMostSettings() = testWithDisplay { - whenEver(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpEnrollTask())) - testIgnoredFor(REASON_AUTH_SETTINGS, ignored = false) - } - - @Test - fun testIgnoredForVerySpecificSettings() = testWithDisplay { - whenEver(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpSettingsTask())) - testIgnoredFor(REASON_AUTH_SETTINGS) - } - - private fun testIgnoredFor(reason: Int, ignored: Boolean = true) { - overlayController.show(SENSOR_ID, reason) - executor.runAllReady() - - verify(windowManager, if (ignored) never() else times(1)).addView(any(), any()) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_0() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_0 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_90() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_90 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_180() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_180 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarCollapsedDownForXAlignedSensor_180() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_180 }, - windowInsets = insetsForSmallNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun hidesSfpsIndicatorWhenOccludingTaskbarForXAlignedSensor_180() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_180 }, - windowInsets = insetsForLargeNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = false) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_270() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_270 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_InReverseDefaultRotation_0() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_0 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_InReverseDefaultRotation_90() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_90 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarCollapsedDownForXAlignedSensor_InReverseDefaultRotation_90() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_90 }, - windowInsets = insetsForSmallNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun hidesSfpsIndicatorWhenOccludingTaskbarForXAlignedSensor_InReverseDefaultRotation_90() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_90 }, - windowInsets = insetsForLargeNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = false) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_InReverseDefaultRotation_180() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_180 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForXAlignedSensor_InReverseDefaultRotation_270() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_270 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_0() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_0 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_90() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_90 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_180() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_180 }, - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_270 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarCollapsedDownForYAlignedSensor_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_270 }, - windowInsets = insetsForSmallNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun hidesSfpsIndicatorWhenOccludingTaskbarForYAlignedSensor_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_270 }, - windowInsets = insetsForLargeNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = false) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_InReverseDefaultRotation_0() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_0 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_InReverseDefaultRotation_90() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_90 }, - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_InReverseDefaultRotation_180() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_180 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun showsSfpsIndicatorWithTaskbarCollapsedDownForYAlignedSensor_InReverseDefaultRotation_180() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_180 }, - windowInsets = insetsForSmallNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun hidesSfpsIndicatorWhenOccludingTaskbarForYAlignedSensor_InReverseDefaultRotation_180() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_180 }, - windowInsets = insetsForLargeNavbar() - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = false) - } - - @Test - fun showsSfpsIndicatorWithTaskbarForYAlignedSensor_InReverseDefaultRotation_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_270 } - ) { - verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible = true) - } - - @Test - fun verifiesSfpsIndicatorNotAddedInRearDisplayMode_0() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_0 }, - inRearDisplayMode = true, - ) { - verifySfpsIndicator_notAdded_InRearDisplayMode() - } - - @Test - fun verifiesSfpsIndicatorNotAddedInRearDisplayMode_90() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_90 }, - inRearDisplayMode = true, - ) { - verifySfpsIndicator_notAdded_InRearDisplayMode() - } - - @Test - fun verifiesSfpsIndicatorNotAddedInRearDisplayMode_180() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_180 }, - inRearDisplayMode = true, - ) { - verifySfpsIndicator_notAdded_InRearDisplayMode() - } - - @Test - fun verifiesSfpsIndicatorNotAddedInRearDisplayMode_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_270 }, - inRearDisplayMode = true, - ) { - verifySfpsIndicator_notAdded_InRearDisplayMode() - } - - private fun verifySfpsIndicatorVisibilityOnTaskbarUpdate(sfpsViewVisible: Boolean) { - sideFpsController.overlayOffsets = sensorLocation - } - - private fun verifySfpsIndicator_notAdded_InRearDisplayMode() { - sideFpsController.overlayOffsets = sensorLocation - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager, never()).addView(any(), any()) - } - - fun alternateBouncerVisibility_showAndHideSideFpsUI() = testWithDisplay { - // WHEN alternate bouncer is visible - keyguardBouncerRepository.setAlternateVisible(true) - executor.runAllReady() - - // THEN side fps shows UI - verify(windowManager).addView(any(), any()) - verify(windowManager, never()).removeView(any()) - - // WHEN alternate bouncer is no longer visible - keyguardBouncerRepository.setAlternateVisible(false) - executor.runAllReady() - - // THEN side fps UI is hidden - verify(windowManager).removeView(any()) - } - - /** - * {@link SideFpsController#updateOverlayParams} calculates indicator placement for ROTATION_0, - * and uses RotateUtils.rotateBounds to map to the correct indicator location given the device - * rotation. Assuming RotationUtils.rotateBounds works correctly, tests for indicator placement - * in other rotations have been omitted. - */ - @Test - fun verifiesIndicatorPlacementForXAlignedSensor_0() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_0 } - ) { - sideFpsController.overlayOffsets = sensorLocation - - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - assertThat(overlayViewParamsCaptor.value.x).isEqualTo(sensorLocation.sensorLocationX) - assertThat(overlayViewParamsCaptor.value.y).isEqualTo(0) - } - - /** - * {@link SideFpsController#updateOverlayParams} calculates indicator placement for ROTATION_270 - * in reverse default rotation. It then uses RotateUtils.rotateBounds to map to the correct - * indicator location given the device rotation. Assuming RotationUtils.rotateBounds works - * correctly, tests for indicator placement in other rotations have been omitted. - */ - @Test - fun verifiesIndicatorPlacementForXAlignedSensor_InReverseDefaultRotation_270() = - testWithDisplay( - deviceConfig = DeviceConfig.X_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_270 } - ) { - sideFpsController.overlayOffsets = sensorLocation - - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - assertThat(overlayViewParamsCaptor.value.x).isEqualTo(sensorLocation.sensorLocationX) - assertThat(overlayViewParamsCaptor.value.y).isEqualTo(0) - } - - /** - * {@link SideFpsController#updateOverlayParams} calculates indicator placement for ROTATION_0, - * and uses RotateUtils.rotateBounds to map to the correct indicator location given the device - * rotation. Assuming RotationUtils.rotateBounds works correctly, tests for indicator placement - * in other rotations have been omitted. - */ - @Test - fun verifiesIndicatorPlacementForYAlignedSensor_0() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = false, - { rotation = Surface.ROTATION_0 } - ) { - sideFpsController.overlayOffsets = sensorLocation - - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - assertThat(overlayViewParamsCaptor.value.x).isEqualTo(displayWidth - boundsWidth) - assertThat(overlayViewParamsCaptor.value.y).isEqualTo(sensorLocation.sensorLocationY) - } - - /** - * {@link SideFpsController#updateOverlayParams} calculates indicator placement for ROTATION_270 - * in reverse default rotation. It then uses RotateUtils.rotateBounds to map to the correct - * indicator location given the device rotation. Assuming RotationUtils.rotateBounds works - * correctly, tests for indicator placement in other rotations have been omitted. - */ - @Test - fun verifiesIndicatorPlacementForYAlignedSensor_InReverseDefaultRotation_270() = - testWithDisplay( - deviceConfig = DeviceConfig.Y_ALIGNED, - isReverseDefaultRotation = true, - { rotation = Surface.ROTATION_270 } - ) { - sideFpsController.overlayOffsets = sensorLocation - - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - assertThat(overlayViewParamsCaptor.value.x).isEqualTo(displayWidth - boundsWidth) - assertThat(overlayViewParamsCaptor.value.y).isEqualTo(sensorLocation.sensorLocationY) - } - - @Test - fun hasSideFpsSensor_withSensorProps_returnsTrue() = testWithDisplay { - // By default all those tests assume the side fps sensor is available. - assertThat(fingerprintManager.hasSideFpsSensor()).isTrue() - } - - @Test - fun hasSideFpsSensor_withoutSensorProps_returnsFalse() { - whenEver(fingerprintManager.sensorPropertiesInternal).thenReturn(null) - - assertThat(fingerprintManager.hasSideFpsSensor()).isFalse() - } - - @Test - fun testLayoutParams_isKeyguardDialogType() = - testWithDisplay(deviceConfig = DeviceConfig.Y_ALIGNED) { - sideFpsController.overlayOffsets = sensorLocation - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - - val lpType = overlayViewParamsCaptor.value.type - - assertThat((lpType and TYPE_KEYGUARD_DIALOG) != 0).isTrue() - } - - @Test - fun testLayoutParams_hasNoMoveAnimationWindowFlag() = - testWithDisplay(deviceConfig = DeviceConfig.Y_ALIGNED) { - sideFpsController.overlayOffsets = sensorLocation - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - - val lpFlags = overlayViewParamsCaptor.value.privateFlags - - assertThat((lpFlags and PRIVATE_FLAG_NO_MOVE_ANIMATION) != 0).isTrue() - } - - @Test - fun testLayoutParams_hasTrustedOverlayWindowFlag() = - testWithDisplay(deviceConfig = DeviceConfig.Y_ALIGNED) { - sideFpsController.overlayOffsets = sensorLocation - sideFpsController.updateOverlayParams(windowManager.defaultDisplay, indicatorBounds) - overlayController.show(SENSOR_ID, REASON_UNKNOWN) - executor.runAllReady() - - verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) - - val lpFlags = overlayViewParamsCaptor.value.privateFlags - - assertThat((lpFlags and PRIVATE_FLAG_TRUSTED_OVERLAY) != 0).isTrue() - } - - @Test - fun primaryBouncerRequestAnimatesAlphaIn() = testWithDisplay { - sideFpsController.show(SideFpsUiRequestSource.PRIMARY_BOUNCER, REASON_AUTH_KEYGUARD) - executor.runAllReady() - verify(sideFpsView).animate() - } - - @Test - fun alternateBouncerRequestsDoesNotAnimateAlphaIn() = testWithDisplay { - sideFpsController.show(SideFpsUiRequestSource.ALTERNATE_BOUNCER, REASON_AUTH_KEYGUARD) - executor.runAllReady() - verify(sideFpsView, never()).animate() - } - - @Test - fun autoShowRequestsDoesNotAnimateAlphaIn() = testWithDisplay { - sideFpsController.show(SideFpsUiRequestSource.AUTO_SHOW, REASON_AUTH_KEYGUARD) - executor.runAllReady() - verify(sideFpsView, never()).animate() - } -} - -private fun insetsForSmallNavbar() = insetsWithBottom(60) - -private fun insetsForLargeNavbar() = insetsWithBottom(100) - -private fun insetsWithBottom(bottom: Int) = - WindowInsets.Builder() - .setInsets(WindowInsets.Type.navigationBars(), Insets.of(0, 0, 0, bottom)) - .build() - -private fun fpEnrollTask() = settingsTask(".biometrics.fingerprint.FingerprintEnrollEnrolling") - -private fun fpSettingsTask() = settingsTask(".biometrics.fingerprint.FingerprintSettings") - -private fun settingsTask(cls: String) = - ActivityManager.RunningTaskInfo().apply { - topActivity = ComponentName.createRelative("com.android.settings", cls) - } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt index 63f6c2033ee1..546a6b7a43a2 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt @@ -36,8 +36,6 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInt import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.plugins.ActivityStarter -import com.android.systemui.res.R -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any @@ -343,90 +341,6 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { assertThat(underTest.willDismissWithAction()).isFalse() } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility() { - updateSideFpsVisibilityParameters( - isVisible = true, - sfpsEnabled = true, - fpsDetectionRunning = true, - isUnlockingWithFpAllowed = true, - isAnimatingAway = false - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(true) - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility_notVisible() { - updateSideFpsVisibilityParameters( - isVisible = false, - sfpsEnabled = true, - fpsDetectionRunning = true, - isUnlockingWithFpAllowed = true, - isAnimatingAway = false - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(false) - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility_sfpsNotEnabled() { - updateSideFpsVisibilityParameters( - isVisible = true, - sfpsEnabled = false, - fpsDetectionRunning = true, - isUnlockingWithFpAllowed = true, - isAnimatingAway = false - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(false) - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility_fpsDetectionNotRunning() { - updateSideFpsVisibilityParameters( - isVisible = true, - sfpsEnabled = true, - fpsDetectionRunning = false, - isUnlockingWithFpAllowed = true, - isAnimatingAway = false - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(false) - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility_UnlockingWithFpNotAllowed() { - updateSideFpsVisibilityParameters( - isVisible = true, - sfpsEnabled = true, - fpsDetectionRunning = true, - isUnlockingWithFpAllowed = false, - isAnimatingAway = false - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(false) - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun testSideFpsVisibility_AnimatingAway() { - updateSideFpsVisibilityParameters( - isVisible = true, - sfpsEnabled = true, - fpsDetectionRunning = true, - isUnlockingWithFpAllowed = true, - isAnimatingAway = true - ) - underTest.updateSideFpsVisibility() - verify(repository).setSideFpsShowing(false) - } - @Test fun delayBouncerWhenFaceAuthPossible() { mainHandler.setMode(FakeHandler.Mode.QUEUEING) @@ -491,22 +405,4 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { verify(repository).setPrimaryShowingSoon(false) } } - - private fun updateSideFpsVisibilityParameters( - isVisible: Boolean, - sfpsEnabled: Boolean, - fpsDetectionRunning: Boolean, - isUnlockingWithFpAllowed: Boolean, - isAnimatingAway: Boolean - ) { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - whenever(repository.primaryBouncerShow.value).thenReturn(isVisible) - resources.addOverride(R.bool.config_show_sidefps_hint_on_bouncer, sfpsEnabled) - whenever(keyguardUpdateMonitor.isFingerprintDetectionRunning) - .thenReturn(fpsDetectionRunning) - whenever(keyguardUpdateMonitor.isUnlockingWithFingerprintAllowed) - .thenReturn(isUnlockingWithFpAllowed) - whenever(repository.primaryBouncerStartingDisappearAnimation.value) - .thenReturn(if (isAnimatingAway) Runnable {} else null) - } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt index cddbd1f78dd5..1a435013e7a9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt @@ -33,7 +33,6 @@ import com.android.systemui.coroutines.collectValues import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.utils.os.FakeHandler @@ -66,9 +65,7 @@ class KeyguardBouncerViewModelTest : SysuiTestCase() { @Mock private lateinit var faceAuthInteractor: DeviceEntryFaceAuthInteractor lateinit var bouncerInteractor: PrimaryBouncerInteractor - private val mainHandler by lazy { - FakeHandler(Looper.getMainLooper()) - } + private val mainHandler by lazy { FakeHandler(Looper.getMainLooper()) } val repository = FakeKeyguardBouncerRepository() lateinit var underTest: KeyguardBouncerViewModel @@ -108,46 +105,6 @@ class KeyguardBouncerViewModelTest : SysuiTestCase() { job.cancel() } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun shouldUpdateSideFps_show() = runTest { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - var count = 0 - val job = underTest.shouldUpdateSideFps.onEach { count++ }.launchIn(this) - repository.setPrimaryShow(true) - // Run the tasks that are pending at this point of virtual time. - runCurrent() - assertThat(count).isEqualTo(1) - job.cancel() - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun shouldUpdateSideFps_hide() = runTest { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - repository.setPrimaryShow(true) - var count = 0 - val job = underTest.shouldUpdateSideFps.onEach { count++ }.launchIn(this) - repository.setPrimaryShow(false) - // Run the tasks that are pending at this point of virtual time. - runCurrent() - assertThat(count).isEqualTo(1) - job.cancel() - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Test - fun sideFpsShowing() = runTest { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - var sideFpsIsShowing = false - val job = underTest.sideFpsShowing.onEach { sideFpsIsShowing = it }.launchIn(this) - repository.setSideFpsShowing(true) - // Run the tasks that are pending at this point of virtual time. - runCurrent() - assertThat(sideFpsIsShowing).isEqualTo(true) - job.cancel() - } - @Test fun isShowing() = runTest { var isShowing: Boolean? = null diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index e8e1cab4b932..4ddf3c994b35 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -39,7 +39,6 @@ import android.content.Intent; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; -import android.hardware.biometrics.BiometricRequestConstants; import android.media.AudioManager; import android.metrics.LogMaker; import android.os.SystemClock; @@ -73,9 +72,6 @@ import com.android.keyguard.dagger.KeyguardBouncerScope; import com.android.settingslib.utils.ThreadUtils; import com.android.systemui.Gefingerpoken; import com.android.systemui.biometrics.FaceAuthAccessibilityDelegate; -import com.android.systemui.biometrics.SideFpsController; -import com.android.systemui.biometrics.SideFpsUiRequestSource; -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor; import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; import com.android.systemui.classifier.FalsingA11yDelegate; @@ -103,15 +99,14 @@ import com.android.systemui.util.settings.GlobalSettings; import dagger.Lazy; +import kotlinx.coroutines.Job; + import java.io.File; import java.util.Arrays; -import java.util.Optional; import javax.inject.Inject; import javax.inject.Provider; -import kotlinx.coroutines.Job; - /** Controller for {@link KeyguardSecurityContainer} */ @KeyguardBouncerScope public class KeyguardSecurityContainerController extends ViewController<KeyguardSecurityContainer> @@ -135,7 +130,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final GlobalSettings mGlobalSettings; private final FeatureFlags mFeatureFlags; private final SessionTracker mSessionTracker; - private final Optional<SideFpsController> mSideFpsController; private final FalsingA11yDelegate mFalsingA11yDelegate; private final DeviceEntryFaceAuthInteractor mDeviceEntryFaceAuthInteractor; private final BouncerMessageInteractor mBouncerMessageInteractor; @@ -457,7 +451,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard FeatureFlags featureFlags, GlobalSettings globalSettings, SessionTracker sessionTracker, - Optional<SideFpsController> sideFpsController, FalsingA11yDelegate falsingA11yDelegate, TelephonyManager telephonyManager, ViewMediatorCallback viewMediatorCallback, @@ -491,11 +484,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mFeatureFlags = featureFlags; mGlobalSettings = globalSettings; mSessionTracker = sessionTracker; - if (SideFpsControllerRefactor.isEnabled()) { - mSideFpsController = Optional.empty(); - } else { - mSideFpsController = sideFpsController; - } mFalsingA11yDelegate = falsingA11yDelegate; mTelephonyManager = telephonyManager; mViewMediatorCallback = viewMediatorCallback; @@ -578,28 +566,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mView.clearFocus(); } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** - * Shows and hides the side finger print sensor animation. - * - * @param isVisible sets whether we show or hide the side fps animation - */ - public void updateSideFpsVisibility(boolean isVisible) { - SideFpsControllerRefactor.assertInLegacyMode(); - if (!mSideFpsController.isPresent()) { - return; - } - - if (isVisible) { - mSideFpsController.get().show( - SideFpsUiRequestSource.PRIMARY_BOUNCER, - BiometricRequestConstants.REASON_AUTH_KEYGUARD - ); - } else { - mSideFpsController.get().hide(SideFpsUiRequestSource.PRIMARY_BOUNCER); - } - } - /** * Shows the primary security screen for the user. This will be either the multi-selector * or the user's security method. diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java index afea224f31eb..4bbc2d6dfaf9 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java @@ -16,23 +16,14 @@ package com.android.keyguard.dagger; -import static com.android.systemui.biometrics.SideFpsControllerKt.hasSideFpsSensor; - -import android.annotation.Nullable; -import android.hardware.fingerprint.FingerprintManager; import android.view.LayoutInflater; import android.view.ViewGroup; import com.android.keyguard.KeyguardSecurityContainer; import com.android.keyguard.KeyguardSecurityViewFlipper; -import com.android.systemui.res.R; -import com.android.systemui.biometrics.SideFpsController; -import com.android.systemui.dagger.qualifiers.RootView; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; - -import java.util.Optional; - -import javax.inject.Provider; +import com.android.systemui.dagger.qualifiers.RootView; +import com.android.systemui.res.R; import dagger.Module; import dagger.Provides; @@ -62,16 +53,4 @@ public interface KeyguardBouncerModule { KeyguardSecurityContainer containerView) { return containerView.findViewById(R.id.view_flipper); } - - /** Provides {@link SideFpsController} if the device has the side fingerprint sensor. */ - @Provides - @KeyguardBouncerScope - static Optional<SideFpsController> providesOptionalSidefpsController( - @Nullable FingerprintManager fingerprintManager, - Provider<SideFpsController> sidefpsControllerProvider) { - if (!hasSideFpsSensor(fingerprintManager)) { - return Optional.empty(); - } - return Optional.of(sidefpsControllerProvider.get()); - } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index d85b81d4d953..ca88d40df6af 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -71,7 +71,6 @@ import com.android.systemui.CoreStartable; import com.android.systemui.biometrics.domain.interactor.LogContextInteractor; import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor; import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor; -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor; import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams; import com.android.systemui.biometrics.ui.viewmodel.CredentialViewModel; import com.android.systemui.biometrics.ui.viewmodel.PromptViewModel; @@ -93,6 +92,9 @@ import dagger.Lazy; import kotlin.Unit; +import kotlinx.coroutines.CoroutineScope; +import kotlinx.coroutines.Job; + import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; @@ -106,9 +108,6 @@ import java.util.Set; import javax.inject.Inject; import javax.inject.Provider; -import kotlinx.coroutines.CoroutineScope; -import kotlinx.coroutines.Job; - /** * Receives messages sent from {@link com.android.server.biometrics.BiometricService} and shows the * appropriate biometric UI (e.g. BiometricDialogView). @@ -136,7 +135,6 @@ public class AuthController implements @Nullable private final FingerprintManager mFingerprintManager; @Nullable private final FaceManager mFaceManager; private final Provider<UdfpsController> mUdfpsControllerFactory; - private final Provider<SideFpsController> mSidefpsControllerFactory; private final CoroutineScope mApplicationCoroutineScope; private Job mBiometricContextListenerJob = null; @@ -163,7 +161,6 @@ public class AuthController implements @Nullable private UdfpsController mUdfpsController; @Nullable private UdfpsOverlayParams mUdfpsOverlayParams; @Nullable private IUdfpsRefreshRateRequestCallback mUdfpsRefreshRateRequestCallback; - @Nullable private SideFpsController mSideFpsController; @NonNull private Lazy<UdfpsLogger> mUdfpsLogger; @VisibleForTesting IBiometricSysuiReceiver mReceiver; @VisibleForTesting @NonNull final BiometricDisplayListener mOrientationListener; @@ -320,14 +317,7 @@ public class AuthController implements this, mUdfpsLogger.get())); mUdfpsBounds = mUdfpsProps.get(0).getLocation().getRect(); } - mSidefpsProps = !sidefpsProps.isEmpty() ? sidefpsProps : null; - if (mSidefpsProps != null) { - if (!SideFpsControllerRefactor.isEnabled()) { - mSideFpsController = mSidefpsControllerFactory.get(); - } - } - mFingerprintManager.registerBiometricStateListener(new BiometricStateListener() { @Override public void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments) { @@ -738,7 +728,6 @@ public class AuthController implements @Nullable FingerprintManager fingerprintManager, @Nullable FaceManager faceManager, Provider<UdfpsController> udfpsControllerFactory, - Provider<SideFpsController> sidefpsControllerFactory, @NonNull DisplayManager displayManager, @NonNull WakefulnessLifecycle wakefulnessLifecycle, @NonNull AuthDialogPanelInteractionDetector panelInteractionDetector, @@ -766,7 +755,6 @@ public class AuthController implements mFingerprintManager = fingerprintManager; mFaceManager = faceManager; mUdfpsControllerFactory = udfpsControllerFactory; - mSidefpsControllerFactory = sidefpsControllerFactory; mUdfpsLogger = udfpsLogger; mDisplayManager = displayManager; mWindowManager = windowManager; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt deleted file mode 100644 index 85f63e9f1974..000000000000 --- a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt +++ /dev/null @@ -1,537 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.systemui.biometrics - -import android.app.ActivityTaskManager -import android.content.Context -import android.content.res.Configuration -import android.graphics.Color -import android.graphics.PixelFormat -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter -import android.graphics.Rect -import android.hardware.biometrics.BiometricRequestConstants -import android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_KEYGUARD -import android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_SETTINGS -import android.hardware.biometrics.SensorLocationInternal -import android.hardware.display.DisplayManager -import android.hardware.fingerprint.FingerprintManager -import android.hardware.fingerprint.FingerprintSensorPropertiesInternal -import android.hardware.fingerprint.ISidefpsController -import android.os.Handler -import android.util.Log -import android.util.RotationUtils -import android.view.Display -import android.view.DisplayInfo -import android.view.Gravity -import android.view.LayoutInflater -import android.view.Surface -import android.view.View -import android.view.View.AccessibilityDelegate -import android.view.View.INVISIBLE -import android.view.View.VISIBLE -import android.view.ViewPropertyAnimator -import android.view.WindowManager -import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION -import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY -import android.view.accessibility.AccessibilityEvent -import androidx.annotation.RawRes -import com.airbnb.lottie.LottieAnimationView -import com.airbnb.lottie.LottieProperty -import com.airbnb.lottie.model.KeyPath -import com.android.app.animation.Interpolators -import com.android.app.tracing.traceSection -import com.android.internal.annotations.VisibleForTesting -import com.android.keyguard.KeyguardPINView -import com.android.systemui.Dumpable -import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor -import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor -import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.dagger.qualifiers.Application -import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor -import com.android.systemui.dump.DumpManager -import com.android.systemui.res.R -import com.android.systemui.util.boundsOnScreen -import com.android.systemui.util.concurrency.DelayableExecutor -import java.io.PrintWriter -import javax.inject.Inject -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.launch - -private const val TAG = "SideFpsController" - -/** - * Shows and hides the side fingerprint sensor (side-fps) overlay and handles side fps touch events. - */ -@SysUISingleton -class SideFpsController -@Inject -constructor( - private val context: Context, - private val layoutInflater: LayoutInflater, - fingerprintManager: FingerprintManager?, - private val windowManager: WindowManager, - private val activityTaskManager: ActivityTaskManager, - displayManager: DisplayManager, - private val displayStateInteractor: DisplayStateInteractor, - @Main private val mainExecutor: DelayableExecutor, - @Main private val handler: Handler, - private val alternateBouncerInteractor: AlternateBouncerInteractor, - @Application private val applicationScope: CoroutineScope, - dumpManager: DumpManager, - fpsUnlockTracker: FpsUnlockTracker -) : Dumpable { - private val requests: HashSet<SideFpsUiRequestSource> = HashSet() - - @VisibleForTesting - val sensorProps: FingerprintSensorPropertiesInternal = - fingerprintManager?.sideFpsSensorProperties - ?: throw IllegalStateException("no side fingerprint sensor") - - @VisibleForTesting - val orientationReasonListener = - OrientationReasonListener( - context, - displayManager, - handler, - sensorProps, - { reason -> onOrientationChanged(reason) }, - BiometricRequestConstants.REASON_UNKNOWN - ) - - @VisibleForTesting val orientationListener = orientationReasonListener.orientationListener - - private val isReverseDefaultRotation = - context.resources.getBoolean(com.android.internal.R.bool.config_reverseDefaultRotation) - - private var overlayShowAnimator: ViewPropertyAnimator? = null - - private var overlayView: View? = null - set(value) { - field?.let { oldView -> - val lottie = oldView.requireViewById(R.id.sidefps_animation) as LottieAnimationView - lottie.pauseAnimation() - lottie.removeAllLottieOnCompositionLoadedListener() - windowManager.removeView(oldView) - orientationListener.disable() - } - overlayShowAnimator?.cancel() - overlayShowAnimator = null - - field = value - field?.let { newView -> - if (requests.contains(SideFpsUiRequestSource.PRIMARY_BOUNCER)) { - newView.alpha = 0f - overlayShowAnimator = - newView - .animate() - .alpha(1f) - .setDuration(KeyguardPINView.ANIMATION_DURATION) - .setInterpolator(Interpolators.ALPHA_IN) - } - windowManager.addView(newView, overlayViewParams) - orientationListener.enable() - overlayShowAnimator?.start() - } - } - @VisibleForTesting var overlayOffsets: SensorLocationInternal = SensorLocationInternal.DEFAULT - - private val displayInfo = DisplayInfo() - - private val overlayViewParams = - WindowManager.LayoutParams( - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, - Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS, - PixelFormat.TRANSLUCENT - ) - .apply { - title = TAG - fitInsetsTypes = 0 // overrides default, avoiding status bars during layout - gravity = Gravity.TOP or Gravity.LEFT - layoutInDisplayCutoutMode = - WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS - privateFlags = PRIVATE_FLAG_TRUSTED_OVERLAY or PRIVATE_FLAG_NO_MOVE_ANIMATION - } - - init { - if (!SideFpsControllerRefactor.isEnabled) { - fpsUnlockTracker.startTracking() - fingerprintManager?.setSidefpsController( - object : ISidefpsController.Stub() { - override fun show( - sensorId: Int, - @BiometricRequestConstants.RequestReason reason: Int - ) = - if (reason.isReasonToAutoShow(activityTaskManager)) { - show(SideFpsUiRequestSource.AUTO_SHOW, reason) - } else { - hide(SideFpsUiRequestSource.AUTO_SHOW) - } - - override fun hide(sensorId: Int) = hide(SideFpsUiRequestSource.AUTO_SHOW) - } - ) - listenForAlternateBouncerVisibility() - - dumpManager.registerDumpable(this) - } - } - - private fun listenForAlternateBouncerVisibility() { - if (!DeviceEntryUdfpsRefactor.isEnabled) { - alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, "SideFpsController") - } - - applicationScope.launch { - alternateBouncerInteractor.isVisible.collect { isVisible: Boolean -> - if (isVisible) { - show(SideFpsUiRequestSource.ALTERNATE_BOUNCER, REASON_AUTH_KEYGUARD) - } else { - hide(SideFpsUiRequestSource.ALTERNATE_BOUNCER) - } - } - } - } - - /** Shows the side fps overlay if not already shown. */ - fun show( - request: SideFpsUiRequestSource, - @BiometricRequestConstants.RequestReason - reason: Int = BiometricRequestConstants.REASON_UNKNOWN - ) { - SideFpsControllerRefactor.assertInLegacyMode() - if (!displayStateInteractor.isInRearDisplayMode.value) { - requests.add(request) - mainExecutor.execute { - if (overlayView == null) { - traceSection( - "SideFpsController#show(request=${request.name}, reason=$reason)" - ) { - createOverlayForDisplay(reason) - } - } else { - Log.v(TAG, "overlay already shown") - } - } - } - } - - /** Hides the fps overlay if shown. */ - fun hide(request: SideFpsUiRequestSource) { - SideFpsControllerRefactor.assertInLegacyMode() - requests.remove(request) - mainExecutor.execute { - if (requests.isEmpty()) { - traceSection("SideFpsController#hide(${request.name})") { overlayView = null } - } - } - } - - /** Hide the arrow indicator. */ - fun hideIndicator() { - SideFpsControllerRefactor.assertInLegacyMode() - val lottieAnimationView = - overlayView?.findViewById(R.id.sidefps_animation) as LottieAnimationView? - lottieAnimationView?.visibility = INVISIBLE - } - - /** Show the arrow indicator. */ - fun showIndicator() { - SideFpsControllerRefactor.assertInLegacyMode() - val lottieAnimationView = - overlayView?.findViewById(R.id.sidefps_animation) as LottieAnimationView? - lottieAnimationView?.visibility = VISIBLE - } - - override fun dump(pw: PrintWriter, args: Array<out String>) { - pw.println("requests:") - for (requestSource in requests) { - pw.println(" $requestSource.name") - } - - pw.println("overlayView:") - pw.println(" width=${overlayView?.width}") - pw.println(" height=${overlayView?.height}") - pw.println(" boundsOnScreen=${overlayView?.boundsOnScreen}") - - pw.println("displayStateInteractor:") - pw.println(" isInRearDisplayMode=${displayStateInteractor?.isInRearDisplayMode?.value}") - - pw.println("sensorProps:") - pw.println(" displayId=${displayInfo.uniqueId}") - pw.println(" sensorType=${sensorProps?.sensorType}") - pw.println(" location=${sensorProps?.getLocation(displayInfo.uniqueId)}") - pw.println("lottieAnimationView:") - pw.println( - " visibility=${overlayView?.findViewById<View>(R.id.sidefps_animation)?.visibility}" - ) - - pw.println("overlayOffsets=$overlayOffsets") - pw.println("isReverseDefaultRotation=$isReverseDefaultRotation") - pw.println("currentRotation=${displayInfo.rotation}") - } - - private fun onOrientationChanged(@BiometricRequestConstants.RequestReason reason: Int) { - if (overlayView?.isAttachedToWindow == true) { - createOverlayForDisplay(reason) - } - } - - private fun createOverlayForDisplay(@BiometricRequestConstants.RequestReason reason: Int) { - val view = layoutInflater.inflate(R.layout.sidefps_view, null, false) - overlayView = view - val display = context.display!! - // b/284098873 `context.display.rotation` may not up-to-date, we use displayInfo.rotation - display.getDisplayInfo(displayInfo) - val offsets = - sensorProps.getLocation(display.uniqueId).let { location -> - if (location == null) { - Log.w(TAG, "No location specified for display: ${display.uniqueId}") - } - location ?: sensorProps.location - } - overlayOffsets = offsets - - val lottie = view.requireViewById(R.id.sidefps_animation) as LottieAnimationView - view.rotation = - display.asSideFpsAnimationRotation( - offsets.isYAligned(), - getRotationFromDefault(displayInfo.rotation) - ) - lottie.setAnimation( - display.asSideFpsAnimation( - offsets.isYAligned(), - getRotationFromDefault(displayInfo.rotation) - ) - ) - lottie.addLottieOnCompositionLoadedListener { - // Check that view is not stale, and that overlayView has not been hidden/removed - if (overlayView?.isAttachedToWindow == true && overlayView == view) { - updateOverlayParams(display, it.bounds) - } - } - orientationReasonListener.reason = reason - lottie.addOverlayDynamicColor(context, reason) - - /** - * Intercepts TYPE_WINDOW_STATE_CHANGED accessibility event, preventing Talkback from - * speaking @string/accessibility_fingerprint_label twice when sensor location indicator is - * in focus - */ - view.setAccessibilityDelegate( - object : AccessibilityDelegate() { - override fun dispatchPopulateAccessibilityEvent( - host: View, - event: AccessibilityEvent - ): Boolean { - return if ( - event.getEventType() === AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED - ) { - true - } else { - super.dispatchPopulateAccessibilityEvent(host, event) - } - } - } - ) - } - - @VisibleForTesting - fun updateOverlayParams(display: Display, bounds: Rect) { - val isNaturalOrientation = display.isNaturalOrientation() - val isDefaultOrientation = - if (isReverseDefaultRotation) !isNaturalOrientation else isNaturalOrientation - val size = windowManager.maximumWindowMetrics.bounds - - val displayWidth = if (isDefaultOrientation) size.width() else size.height() - val displayHeight = if (isDefaultOrientation) size.height() else size.width() - val boundsWidth = if (isDefaultOrientation) bounds.width() else bounds.height() - val boundsHeight = if (isDefaultOrientation) bounds.height() else bounds.width() - - val sensorBounds = - if (overlayOffsets.isYAligned()) { - Rect( - displayWidth - boundsWidth, - overlayOffsets.sensorLocationY, - displayWidth, - overlayOffsets.sensorLocationY + boundsHeight - ) - } else { - Rect( - overlayOffsets.sensorLocationX, - 0, - overlayOffsets.sensorLocationX + boundsWidth, - boundsHeight - ) - } - - RotationUtils.rotateBounds( - sensorBounds, - Rect(0, 0, displayWidth, displayHeight), - getRotationFromDefault(display.rotation) - ) - - overlayViewParams.x = sensorBounds.left - overlayViewParams.y = sensorBounds.top - - windowManager.updateViewLayout(overlayView, overlayViewParams) - } - - private fun getRotationFromDefault(rotation: Int): Int = - if (isReverseDefaultRotation) (rotation + 1) % 4 else rotation -} - -private val FingerprintManager?.sideFpsSensorProperties: FingerprintSensorPropertiesInternal? - get() = this?.sensorPropertiesInternal?.firstOrNull { it.isAnySidefpsType } - -/** Returns [True] when the device has a side fingerprint sensor. */ -fun FingerprintManager?.hasSideFpsSensor(): Boolean = this?.sideFpsSensorProperties != null - -@BiometricRequestConstants.RequestReason -private fun Int.isReasonToAutoShow(activityTaskManager: ActivityTaskManager): Boolean = - when (this) { - REASON_AUTH_KEYGUARD -> false - REASON_AUTH_SETTINGS -> - when (activityTaskManager.topClass()) { - // TODO(b/186176653): exclude fingerprint overlays from this list view - "com.android.settings.biometrics.fingerprint.FingerprintSettings" -> false - else -> true - } - else -> true - } - -private fun ActivityTaskManager.topClass(): String = - getTasks(1).firstOrNull()?.topActivity?.className ?: "" - -@RawRes -private fun Display.asSideFpsAnimation(yAligned: Boolean, rotationFromDefault: Int): Int = - when (rotationFromDefault) { - Surface.ROTATION_0 -> if (yAligned) R.raw.sfps_pulse else R.raw.sfps_pulse_landscape - Surface.ROTATION_180 -> if (yAligned) R.raw.sfps_pulse else R.raw.sfps_pulse_landscape - else -> if (yAligned) R.raw.sfps_pulse_landscape else R.raw.sfps_pulse - } - -private fun Display.asSideFpsAnimationRotation(yAligned: Boolean, rotationFromDefault: Int): Float = - when (rotationFromDefault) { - Surface.ROTATION_90 -> if (yAligned) 0f else 180f - Surface.ROTATION_180 -> 180f - Surface.ROTATION_270 -> if (yAligned) 180f else 0f - else -> 0f - } - -private fun SensorLocationInternal.isYAligned(): Boolean = sensorLocationY != 0 - -private fun Display.isNaturalOrientation(): Boolean = - rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 - -private fun LottieAnimationView.addOverlayDynamicColor( - context: Context, - @BiometricRequestConstants.RequestReason reason: Int -) { - fun update() { - val isKeyguard = reason == REASON_AUTH_KEYGUARD - if (isKeyguard) { - val color = - com.android.settingslib.Utils.getColorAttrDefaultColor( - context, - com.android.internal.R.attr.materialColorPrimaryFixed - ) - val outerRimColor = - com.android.settingslib.Utils.getColorAttrDefaultColor( - context, - com.android.internal.R.attr.materialColorPrimaryFixedDim - ) - val chevronFill = - com.android.settingslib.Utils.getColorAttrDefaultColor( - context, - com.android.internal.R.attr.materialColorOnPrimaryFixed - ) - addValueCallback(KeyPath(".blue600", "**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) - } - addValueCallback(KeyPath(".blue400", "**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter(outerRimColor, PorterDuff.Mode.SRC_ATOP) - } - addValueCallback(KeyPath(".black", "**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter(chevronFill, PorterDuff.Mode.SRC_ATOP) - } - } else { - if (!isDarkMode(context)) { - addValueCallback(KeyPath(".black", "**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP) - } - } - for (key in listOf(".blue600", ".blue400")) { - addValueCallback(KeyPath(key, "**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter( - context.getColor( - com.android.settingslib.color.R.color.settingslib_color_blue400 - ), - PorterDuff.Mode.SRC_ATOP - ) - } - } - } - } - - if (composition != null) { - update() - } else { - addLottieOnCompositionLoadedListener { update() } - } -} - -private fun isDarkMode(context: Context): Boolean { - val darkMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK - return darkMode == Configuration.UI_MODE_NIGHT_YES -} - -@VisibleForTesting -class OrientationReasonListener( - context: Context, - displayManager: DisplayManager, - handler: Handler, - sensorProps: FingerprintSensorPropertiesInternal, - onOrientationChanged: (reason: Int) -> Unit, - @BiometricRequestConstants.RequestReason var reason: Int -) { - val orientationListener = - BiometricDisplayListener( - context, - displayManager, - handler, - BiometricDisplayListener.SensorType.SideFingerprint(sensorProps) - ) { - onOrientationChanged(reason) - } -} - -/** - * The source of a request to show the side fps visual indicator. This is distinct from - * [BiometricRequestConstants] which corresponds with the reason fingerprint authentication is - * requested. - */ -enum class SideFpsUiRequestSource { - /** see [isReasonToAutoShow] */ - AUTO_SHOW, - /** Pin, pattern or password bouncer */ - PRIMARY_BOUNCER, - ALTERNATE_BOUNCER, -} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/shared/SideFpsControllerRefactor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/shared/SideFpsControllerRefactor.kt deleted file mode 100644 index 899b07e89964..000000000000 --- a/packages/SystemUI/src/com/android/systemui/biometrics/shared/SideFpsControllerRefactor.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.biometrics.shared - -import com.android.systemui.flags.FlagToken -import com.android.systemui.flags.RefactorFlagUtils -import com.android.systemui.shared.Flags - -/** Helper for reading or using the sidefps controller refactor flag state. */ -@Suppress("NOTHING_TO_INLINE") -object SideFpsControllerRefactor { - /** The aconfig flag name */ - const val FLAG_NAME = Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - - /** A token used for dependency declaration */ - val token: FlagToken - get() = FlagToken(FLAG_NAME, isEnabled) - - /** Is the refactor enabled */ - @JvmStatic - inline val isEnabled - get() = Flags.sidefpsControllerRefactor() - - /** - * Called to ensure code is only run when the flag is enabled. This protects users from the - * unintended behaviors caused by accidentally running new logic, while also crashing on an eng - * build to ensure that the refactor author catches issues in testing. - */ - @JvmStatic - inline fun isUnexpectedlyInLegacyMode() = - RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, FLAG_NAME) - - /** - * Called to ensure code is only run when the flag is disabled. This will throw an exception if - * the flag is enabled to ensure that the refactor author catches issues in testing. - */ - @JvmStatic - inline fun assertInLegacyMode() = RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME) -} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt index 9949e4c7d3d4..245817e78724 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt @@ -36,7 +36,6 @@ import com.android.systemui.biometrics.FpsUnlockTracker import com.android.systemui.biometrics.domain.interactor.BiometricStatusInteractor import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor import com.android.systemui.biometrics.domain.interactor.SideFpsSensorInteractor -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.biometrics.shared.model.AuthenticationReason.NotRunning import com.android.systemui.biometrics.shared.model.LottieCallback import com.android.systemui.biometrics.ui.viewmodel.SideFpsOverlayViewModel @@ -73,10 +72,6 @@ constructor( ) : CoreStartable { override fun start() { - if (!SideFpsControllerRefactor.isEnabled) { - return - } - applicationScope .launch { sfpsSensorInteractor.get().isAvailable.collect { isSfpsAvailable -> diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/KeyguardBouncerRepository.kt b/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/KeyguardBouncerRepository.kt index d0ff1858a1c9..346ea54361bc 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/KeyguardBouncerRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/data/repository/KeyguardBouncerRepository.kt @@ -18,7 +18,6 @@ package com.android.systemui.bouncer.data.repository import android.os.Build import android.util.Log -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN import com.android.systemui.bouncer.shared.model.BouncerDismissActionModel import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel @@ -89,7 +88,6 @@ interface KeyguardBouncerRepository { val resourceUpdateRequests: StateFlow<Boolean> val alternateBouncerVisible: StateFlow<Boolean> val alternateBouncerUIAvailable: StateFlow<Boolean> - val sideFpsShowing: StateFlow<Boolean> /** Action that should be run right after the bouncer is dismissed. */ var bouncerDismissActionModel: BouncerDismissActionModel? @@ -125,9 +123,6 @@ interface KeyguardBouncerRepository { fun setAlternateVisible(isVisible: Boolean) fun setAlternateBouncerUIAvailable(isAvailable: Boolean) - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - fun setSideFpsShowing(isShowing: Boolean) } @SysUISingleton @@ -196,8 +191,6 @@ constructor( private val _alternateBouncerUIAvailable = MutableStateFlow(false) override val alternateBouncerUIAvailable: StateFlow<Boolean> = _alternateBouncerUIAvailable.asStateFlow() - private val _sideFpsShowing = MutableStateFlow(false) - override val sideFpsShowing: StateFlow<Boolean> = _sideFpsShowing.asStateFlow() init { setUpLogging() @@ -269,12 +262,6 @@ constructor( _isBackButtonEnabled.value = isBackButtonEnabled } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - override fun setSideFpsShowing(isShowing: Boolean) { - SideFpsControllerRefactor.assertInLegacyMode() - _sideFpsShowing.value = isShowing - } - /** Sets up logs for state flows. */ private fun setUpLogging() { if (!Build.IS_DEBUGGABLE) { @@ -321,9 +308,6 @@ constructor( alternateBouncerUIAvailable .logDiffsForTable(buffer, "", "IsAlternateBouncerUIAvailable", false) .launchIn(applicationScope) - sideFpsShowing - .logDiffsForTable(buffer, "", "isSideFpsShowing", false) - .launchIn(applicationScope) } companion object { diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt index d88b3dcac598..a91635b2559d 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt @@ -18,18 +18,14 @@ package com.android.systemui.bouncer.domain.interactor import android.content.Context import android.content.res.ColorStateList -import android.hardware.biometrics.BiometricSourceType import android.os.Handler import android.os.Trace import android.util.Log import android.view.View -import com.android.keyguard.KeyguardConstants import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor -import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.DejankUtils import com.android.systemui.Flags -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN @@ -122,31 +118,9 @@ constructor( /** Allow for interaction when just about fully visible */ val isInteractable: Flow<Boolean> = bouncerExpansion.map { it > 0.9 } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - val sideFpsShowing: Flow<Boolean> = repository.sideFpsShowing private var currentUserActiveUnlockRunning = false - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** This callback needs to be a class field so it does not get garbage collected. */ - val keyguardUpdateMonitorCallback = - object : KeyguardUpdateMonitorCallback() { - override fun onBiometricRunningStateChanged( - running: Boolean, - biometricSourceType: BiometricSourceType? - ) { - updateSideFpsVisibility() - } - - override fun onStrongAuthStateChanged(userId: Int) { - updateSideFpsVisibility() - } - } - init { - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - if (!SideFpsControllerRefactor.isEnabled) { - keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback) - } applicationScope.launch { trustRepository.isCurrentUserActiveUnlockRunning.collect { currentUserActiveUnlockRunning = it @@ -357,36 +331,6 @@ constructor( repository.setPrimaryStartDisappearAnimation(runnable) } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** Determine whether to show the side fps animation. */ - fun updateSideFpsVisibility() { - SideFpsControllerRefactor.assertInLegacyMode() - val sfpsEnabled: Boolean = - context.resources.getBoolean(R.bool.config_show_sidefps_hint_on_bouncer) - val fpsDetectionRunning: Boolean = keyguardUpdateMonitor.isFingerprintDetectionRunning - val isUnlockingWithFpAllowed: Boolean = - keyguardUpdateMonitor.isUnlockingWithFingerprintAllowed - val toShow = - (isBouncerShowing() && - sfpsEnabled && - fpsDetectionRunning && - isUnlockingWithFpAllowed && - !isAnimatingAway()) - - if (KeyguardConstants.DEBUG) { - Log.d( - TAG, - ("sideFpsToShow=$toShow\n" + - "isBouncerShowing=${isBouncerShowing()}\n" + - "configEnabled=$sfpsEnabled\n" + - "fpsDetectionRunning=$fpsDetectionRunning\n" + - "isUnlockingWithFpAllowed=$isUnlockingWithFpAllowed\n" + - "isAnimatingAway=${isAnimatingAway()}") - ) - } - repository.setSideFpsShowing(toShow) - } - /** Returns whether bouncer is fully showing. */ fun isFullyShowing(): Boolean { return (repository.primaryBouncerShowingSoon.value || isBouncerShowing()) && diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt index cc387e98aa23..b76520b4ada1 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt @@ -27,7 +27,6 @@ import com.android.keyguard.KeyguardSecurityContainerController import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityView import com.android.keyguard.dagger.KeyguardBouncerComponent -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE import com.android.systemui.bouncer.ui.BouncerViewDelegate @@ -231,23 +230,6 @@ object KeyguardBouncerViewBinder { .collect { view.systemUiVisibility = it } } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - if (!SideFpsControllerRefactor.isEnabled) { - launch { - viewModel.shouldUpdateSideFps.collect { - viewModel.updateSideFpsVisibility() - } - } - } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - if (!SideFpsControllerRefactor.isEnabled) { - launch { - viewModel.sideFpsShowing.collect { - securityContainerController.updateSideFpsVisibility(it) - } - } - } awaitCancellation() } finally { viewModel.setBouncerViewDelegate(null) diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModel.kt index e1fea5f9c62a..3fef766ab250 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModel.kt @@ -17,7 +17,6 @@ package com.android.systemui.bouncer.ui.viewmodel import android.view.View -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel import com.android.systemui.bouncer.ui.BouncerView @@ -25,9 +24,7 @@ import com.android.systemui.bouncer.ui.BouncerViewDelegate import javax.inject.Inject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.merge /** Models UI state for the lock screen bouncer; handles user input. */ @ExperimentalCoroutinesApi @@ -64,19 +61,6 @@ constructor( /** Observe whether keyguard is authenticated already. */ val keyguardAuthenticated: Flow<Boolean> = interactor.keyguardAuthenticatedBiometrics - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** Observe whether the side fps is showing. */ - val sideFpsShowing: Flow<Boolean> = interactor.sideFpsShowing - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** Observe whether we should update fps is showing. */ - val shouldUpdateSideFps: Flow<Unit> = - merge( - interactor.isShowing.map {}, - interactor.startingToHide, - interactor.startingDisappearAnimation.filterNotNull().map {} - ) - /** Observe whether we want to update resources. */ fun notifyUpdateResources() { interactor.notifyUpdatedResources() @@ -92,12 +76,6 @@ constructor( interactor.onMessageShown() } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - fun updateSideFpsVisibility() { - SideFpsControllerRefactor.assertInLegacyMode() - interactor.updateSideFpsVisibility() - } - /** Observe whether back button is enabled. */ fun observeOnIsBackButtonEnabled(systemUiVisibility: () -> Int): Flow<Int> { return interactor.isBackButtonEnabled.map { enabled -> diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/SideFpsProgressBarViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/SideFpsProgressBarViewBinder.kt index 9a6dca3c4958..76edda3c334b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/SideFpsProgressBarViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/SideFpsProgressBarViewBinder.kt @@ -20,8 +20,6 @@ import android.animation.ValueAnimator import android.graphics.Point import com.android.systemui.CoreStartable import com.android.systemui.Flags -import com.android.systemui.biometrics.SideFpsController -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.ui.view.SideFpsProgressBar @@ -38,7 +36,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch -private const val spfsProgressBarCommand = "sfps-progress-bar" +private const val sfpsProgressBarCommand = "sfps-progress-bar" @SysUISingleton class SideFpsProgressBarViewBinder @@ -47,8 +45,6 @@ constructor( private val viewModel: SideFpsProgressBarViewModel, private val view: SideFpsProgressBar, @Application private val applicationScope: CoroutineScope, - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - private val sfpsController: dagger.Lazy<SideFpsController>, private val logger: SideFpsLogger, private val commandRegistry: CommandRegistry, ) : CoreStartable { @@ -61,7 +57,7 @@ constructor( // not required. var layoutJob: Job? = null var progressJob: Job? = null - commandRegistry.registerCommand(spfsProgressBarCommand) { SfpsProgressBarCommand() } + commandRegistry.registerCommand(sfpsProgressBarCommand) { SfpsProgressBarCommand() } applicationScope.launch { viewModel.isProlongedTouchRequiredForAuthentication.collectLatest { enabled -> logger.isProlongedTouchRequiredForAuthenticationChanged(enabled) @@ -109,17 +105,6 @@ constructor( ) { logger.sfpsProgressBarStateChanged(visible, location, fpDetectRunning, length, rotation) view.updateView(visible, location, length, thickness, rotation) - // We have to hide the SFPS indicator as the progress bar will - // be shown at the same location - if (!SideFpsControllerRefactor.isEnabled) { - if (visible) { - logger.hidingSfpsIndicator() - sfpsController.get().hideIndicator() - } else if (fpDetectRunning) { - logger.showingSfpsIndicator() - sfpsController.get().showIndicator() - } - } } inner class SfpsProgressBarCommand : Command { @@ -164,7 +149,7 @@ constructor( } override fun help(pw: PrintWriter) { - pw.println("Usage: adb shell cmd statusbar $spfsProgressBarCommand <command>") + pw.println("Usage: adb shell cmd statusbar $sfpsProgressBarCommand <command>") pw.println("Available commands:") pw.println(" show x y width height rotation") pw.println(" hide") diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt index d48b600c03ab..b3e845f00005 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt @@ -36,7 +36,6 @@ import com.android.systemui.biometrics.shared.model.AuthenticationReason.Setting import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.shared.model.AcquiredFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.testKosmos import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat @@ -65,8 +64,8 @@ class BiometricStatusRepositoryTest : SysuiTestCase() { @Before fun setUp() { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - underTest = BiometricStatusRepositoryImpl(kosmos.testScope.backgroundScope, biometricManager) + underTest = + BiometricStatusRepositoryImpl(kosmos.testScope.backgroundScope, biometricManager) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt index be5c7bc42d10..4cff3e6bfd23 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt @@ -29,7 +29,6 @@ import com.android.systemui.biometrics.shared.model.AuthenticationReason.Setting import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.shared.model.AcquiredFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -51,7 +50,6 @@ class BiometricStatusInteractorImplTest : SysuiTestCase() { @Before fun setup() { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) underTest = kosmos.biometricStatusInteractor } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt index a603be40b6b3..01d9df89cdab 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt @@ -78,7 +78,6 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.phone.dozeServiceHost import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.testKosmos @@ -175,8 +174,6 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() { @Before fun setup() { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - allowTestableLooperAsMainThread() // repeatWhenAttached requires the main thread mContext = spy(mContext) @@ -203,8 +200,11 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() { ) biometricStatusInteractor = - BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository, - fingerprintPropertyRepository) + BiometricStatusInteractorImpl( + activityTaskManager, + biometricStatusRepository, + fingerprintPropertyRepository + ) displayStateInteractor = DisplayStateInteractorImpl( diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt index 415da022cd32..05ec64ecadf7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt @@ -77,7 +77,6 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.phone.dozeServiceHost import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.testKosmos @@ -176,8 +175,6 @@ class SideFpsOverlayViewModelTest : SysuiTestCase() { @Before fun setup() { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - mContext = spy(mContext) val resources = mContext.resources diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt index dc7f372b5dfc..472d0458b77a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt @@ -42,7 +42,6 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.testKosmos import com.android.systemui.user.domain.interactor.SelectedUserInteractor @@ -86,8 +85,6 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() { @Before fun setup() { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR) - primaryBouncerInteractor = PrimaryBouncerInteractor( bouncerRepository, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt index 8010261934b1..4e3cbaef08e0 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/data/repository/FakeKeyguardBouncerRepository.kt @@ -1,6 +1,5 @@ package com.android.systemui.bouncer.data.repository -import com.android.systemui.biometrics.shared.SideFpsControllerRefactor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.shared.model.BouncerDismissActionModel import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel @@ -11,7 +10,6 @@ import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow @@ -52,8 +50,6 @@ class FakeKeyguardBouncerRepository @Inject constructor() : KeyguardBouncerRepos override var lastAlternateBouncerVisibleTime: Long = 0L private val _isAlternateBouncerUIAvailable = MutableStateFlow<Boolean>(false) override val alternateBouncerUIAvailable = _isAlternateBouncerUIAvailable.asStateFlow() - private val _sideFpsShowing: MutableStateFlow<Boolean> = MutableStateFlow(false) - override val sideFpsShowing: StateFlow<Boolean> = _sideFpsShowing.asStateFlow() override var bouncerDismissActionModel: BouncerDismissActionModel? = null override fun setPrimaryScrimmed(isScrimmed: Boolean) { @@ -115,12 +111,6 @@ class FakeKeyguardBouncerRepository @Inject constructor() : KeyguardBouncerRepos override fun setIsBackButtonEnabled(isBackButtonEnabled: Boolean) { _isBackButtonEnabled.value = isBackButtonEnabled } - - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - override fun setSideFpsShowing(isShowing: Boolean) { - SideFpsControllerRefactor.assertInLegacyMode() - _sideFpsShowing.value = isShowing - } } @Module diff --git a/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java b/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java index 3d20efc88c77..f5a2f347364f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java +++ b/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java @@ -16,12 +16,10 @@ package com.android.server.biometrics.sensors; -import static com.android.systemui.shared.Flags.sidefpsControllerRefactor; import android.annotation.NonNull; import android.annotation.Nullable; import android.hardware.biometrics.BiometricRequestConstants; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; import android.os.RemoteException; @@ -45,22 +43,6 @@ public final class SensorOverlays { @NonNull private final Optional<IUdfpsOverlayController> mUdfpsOverlayController; - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @NonNull private final Optional<ISidefpsController> mSidefpsController; - - /** - * Create an overlay controller for each modality. - * - * @param udfpsOverlayController under display fps or null if not present on device - * @param sidefpsController side fps or null if not present on device - */ - public SensorOverlays( - @Nullable IUdfpsOverlayController udfpsOverlayController, - @Nullable ISidefpsController sidefpsController) { - mUdfpsOverlayController = Optional.ofNullable(udfpsOverlayController); - mSidefpsController = Optional.ofNullable(sidefpsController); - } - /** * Create an overlay controller for each modality. * @@ -68,8 +50,6 @@ public final class SensorOverlays { */ public SensorOverlays(@Nullable IUdfpsOverlayController udfpsOverlayController) { mUdfpsOverlayController = Optional.ofNullable(udfpsOverlayController); - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - mSidefpsController = Optional.empty(); } /** @@ -81,16 +61,6 @@ public final class SensorOverlays { */ public void show(int sensorId, @BiometricRequestConstants.RequestReason int reason, @NonNull AcquisitionClient<?> client) { - if (!sidefpsControllerRefactor()) { - if (mSidefpsController.isPresent()) { - try { - mSidefpsController.get().show(sensorId, reason); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception when showing the side-fps overlay", e); - } - } - } - if (mUdfpsOverlayController.isPresent()) { final IUdfpsOverlayControllerCallback callback = new IUdfpsOverlayControllerCallback.Stub() { @@ -115,16 +85,6 @@ public final class SensorOverlays { * @param sensorId sensor id */ public void hide(int sensorId) { - if (!sidefpsControllerRefactor()) { - if (mSidefpsController.isPresent()) { - try { - mSidefpsController.get().hide(sensorId); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception when hiding the side-fps overlay", e); - } - } - } - if (mUdfpsOverlayController.isPresent()) { try { mUdfpsOverlayController.get().hideUdfpsOverlay(sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index deda93c77f8a..4c86f57a190b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -57,7 +57,6 @@ import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback import android.hardware.fingerprint.IFingerprintClientActiveCallback; import android.hardware.fingerprint.IFingerprintService; import android.hardware.fingerprint.IFingerprintServiceReceiver; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.Binder; import android.os.Build; @@ -974,17 +973,6 @@ public class FingerprintService extends SystemService { } } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) - @Override - public void setSidefpsController(@NonNull ISidefpsController controller) { - super.setSidefpsController_enforcePermission(); - - for (ServiceProvider provider : mRegistry.getProviders()) { - provider.setSidefpsController(controller); - } - } - @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) @Override public void onPowerPressed() { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index c2d11699b91f..a6cf2f4b31ae 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -28,7 +28,6 @@ import android.hardware.fingerprint.FingerprintEnrollOptions; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintServiceReceiver; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; @@ -137,13 +136,6 @@ public interface ServiceProvider extends void onPowerPressed(); - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - /** - * Sets side-fps controller - * @param controller side-fps controller - */ - void setSidefpsController(@NonNull ISidefpsController controller); - @NonNull ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, @NonNull String opPackageName); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java index 00a59114ad94..f9f56ee4d134 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java @@ -22,8 +22,6 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR import static android.hardware.fingerprint.FingerprintManager.getAcquiredString; import static android.hardware.fingerprint.FingerprintManager.getErrorString; -import static com.android.systemui.shared.Flags.sidefpsControllerRefactor; - import android.annotation.NonNull; import android.annotation.Nullable; import android.app.TaskStackListener; @@ -47,7 +45,6 @@ import android.hardware.biometrics.fingerprint.PointerContext; import android.hardware.fingerprint.FingerprintAuthenticateOptions; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; @@ -112,8 +109,6 @@ public class FingerprintAuthenticationClient boolean isStrongBiometric, @Nullable TaskStackListener taskStackListener, @Nullable IUdfpsOverlayController udfpsOverlayController, - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Nullable ISidefpsController sidefpsController, @NonNull AuthenticationStateListeners authenticationStateListeners, boolean allowBackgroundAuthentication, @NonNull FingerprintSensorPropertiesInternal sensorProps, @@ -138,11 +133,7 @@ public class FingerprintAuthenticationClient false /* shouldVibrate */, biometricStrength); setRequestId(requestId); - if (sidefpsControllerRefactor()) { - mSensorOverlays = new SensorOverlays(udfpsOverlayController); - } else { - mSensorOverlays = new SensorOverlays(udfpsOverlayController, sidefpsController); - } + mSensorOverlays = new SensorOverlays(udfpsOverlayController); mAuthenticationStateListeners = authenticationStateListeners; mIsStrongBiometric = isStrongBiometric; mSensorProps = sensorProps; @@ -199,11 +190,9 @@ public class FingerprintAuthenticationClient getRequestReason(), mIsStrongBiometric, getTargetUserId()).build() ); } - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); } else { mState = STATE_STARTED_PAUSED_ATTEMPTED; if (reportBiometricAuthAttempts()) { @@ -288,23 +277,18 @@ public class FingerprintAuthenticationClient resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); } @Override protected void startHalOperation() { resetIgnoreDisplayTouches(); mSensorOverlays.show(getSensorId(), getRequestReason(), this); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } - + mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); try { doAuthenticate(); } catch (RemoteException e) { @@ -369,11 +353,9 @@ public class FingerprintAuthenticationClient protected void stopHalOperation() { resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); unsubscribeBiometricContext(); if (mCancellationSignal != null) { @@ -475,11 +457,9 @@ public class FingerprintAuthenticationClient resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); mCallback.onClientFinished(this, false /* success */); } @@ -512,11 +492,9 @@ public class FingerprintAuthenticationClient resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build() + ); mCallback.onClientFinished(this, false /* success */); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java index b6c33baaf830..36af5dba909f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; -import static com.android.systemui.shared.Flags.sidefpsControllerRefactor; - import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; @@ -77,12 +75,7 @@ public class FingerprintDetectClient extends AcquisitionClient<AidlSession> setRequestId(requestId); mAuthenticationStateListeners = authenticationStateListeners; mIsStrongBiometric = isStrongBiometric; - if (sidefpsControllerRefactor()) { - mSensorOverlays = new SensorOverlays(udfpsOverlayController); - } else { - mSensorOverlays = new SensorOverlays( - udfpsOverlayController, null /* sideFpsController */); - } + mSensorOverlays = new SensorOverlays(udfpsOverlayController); mOptions = options; } @@ -96,12 +89,10 @@ public class FingerprintDetectClient extends AcquisitionClient<AidlSession> protected void stopHalOperation() { resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped( - new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, - BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped( + new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, + BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() + ); unsubscribeBiometricContext(); if (mCancellationSignal != null) { @@ -119,25 +110,19 @@ public class FingerprintDetectClient extends AcquisitionClient<AidlSession> resetIgnoreDisplayTouches(); mSensorOverlays.show(getSensorId(), BiometricRequestConstants.REASON_AUTH_KEYGUARD, this); - - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStarted( - new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT, - BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() - ); - } - + mAuthenticationStateListeners.onAuthenticationStarted( + new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT, + BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() + ); try { doDetectInteraction(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting finger detect", e); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped( - new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, - BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped( + new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, + BiometricRequestConstants.REASON_AUTH_KEYGUARD).build() + ); mCallback.onClientFinished(this, false /* success */); } } @@ -154,14 +139,12 @@ public class FingerprintDetectClient extends AcquisitionClient<AidlSession> } catch (RemoteException e) { Slog.e(TAG, "Unable to start detect interaction", e); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped( - new AuthenticationStoppedInfo.Builder( - BiometricSourceType.FINGERPRINT, - BiometricRequestConstants.REASON_AUTH_KEYGUARD - ).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped( + new AuthenticationStoppedInfo.Builder( + BiometricSourceType.FINGERPRINT, + BiometricRequestConstants.REASON_AUTH_KEYGUARD + ).build() + ); mCallback.onClientFinished(this, false /* success */); } }, ctx -> { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java index 3d170db34dd7..3a72d7e9a91a 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java @@ -22,8 +22,6 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR import static android.hardware.fingerprint.FingerprintManager.getAcquiredString; import static android.hardware.fingerprint.FingerprintManager.getErrorString; -import static com.android.systemui.shared.Flags.sidefpsControllerRefactor; - import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; @@ -43,7 +41,6 @@ import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintEnrollOptions; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.hardware.keymaster.HardwareAuthToken; import android.os.IBinder; @@ -106,8 +103,6 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, @NonNull FingerprintSensorPropertiesInternal sensorProps, @Nullable IUdfpsOverlayController udfpsOverlayController, - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Nullable ISidefpsController sidefpsController, @NonNull AuthenticationStateListeners authenticationStateListeners, int maxTemplatesPerUser, @FingerprintManager.EnrollReason int enrollReason, @NonNull FingerprintEnrollOptions options) { @@ -118,11 +113,7 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement BiometricFingerprintConstants.reasonToMetric(options.getEnrollReason())); setRequestId(requestId); mSensorProps = sensorProps; - if (sidefpsControllerRefactor()) { - mSensorOverlays = new SensorOverlays(udfpsOverlayController); - } else { - mSensorOverlays = new SensorOverlays(udfpsOverlayController, sidefpsController); - } + mSensorOverlays = new SensorOverlays(udfpsOverlayController); mAuthenticationStateListeners = authenticationStateListeners; mMaxTemplatesPerUser = maxTemplatesPerUser; @@ -161,13 +152,11 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement if (remaining == 0) { resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped( - new AuthenticationStoppedInfo.Builder( - BiometricSourceType.FINGERPRINT, - getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped( + new AuthenticationStoppedInfo.Builder( + BiometricSourceType.FINGERPRINT, + getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() + ); } } @@ -224,12 +213,10 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped( - new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, - getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped( + new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, + getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() + ); } @Override @@ -243,12 +230,10 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement resetIgnoreDisplayTouches(); mSensorOverlays.show(getSensorId(), getRequestReasonFromFingerprintEnrollReason(mEnrollReason), this); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo - .Builder(BiometricSourceType.FINGERPRINT, - getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo + .Builder(BiometricSourceType.FINGERPRINT, + getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() + ); BiometricNotificationUtils.cancelBadCalibrationNotification(getContext()); try { @@ -294,12 +279,10 @@ public class FingerprintEnrollClient extends EnrollClient<AidlSession> implement protected void stopHalOperation() { resetIgnoreDisplayTouches(); mSensorOverlays.hide(getSensorId()); - if (sidefpsControllerRefactor()) { - mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo - .Builder(BiometricSourceType.FINGERPRINT, - getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() - ); - } + mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo + .Builder(BiometricSourceType.FINGERPRINT, + getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build() + ); unsubscribeBiometricContext(); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index f485a65fe44d..6874c71267fb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -43,7 +43,6 @@ import android.hardware.fingerprint.FingerprintEnrollOptions; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintServiceReceiver; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.Binder; import android.os.Build; @@ -131,8 +130,6 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi @NonNull private final BiometricHandlerProvider mBiometricHandlerProvider; @Nullable private IFingerprint mDaemon; @Nullable private IUdfpsOverlayController mUdfpsOverlayController; - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Nullable private ISidefpsController mSidefpsController; private final AuthSessionCoordinator mAuthSessionCoordinator; @Nullable private AuthenticationStatsCollector mAuthenticationStatsCollector; @Nullable private IVirtualHal mVhal; @@ -509,8 +506,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi BiometricsProtoEnums.CLIENT_UNKNOWN, mAuthenticationStatsCollector), mBiometricContext, mFingerprintSensors.get(sensorId).getSensorProperties(), - mUdfpsOverlayController, mSidefpsController, - mAuthenticationStateListeners, maxTemplatesPerUser, enrollReason, options); + mUdfpsOverlayController, mAuthenticationStateListeners, maxTemplatesPerUser, + enrollReason, options); scheduleForSensor(sensorId, client, mBiometricStateCallback); }); return id; @@ -565,8 +562,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mAuthenticationStatsCollector), mBiometricContext, isStrongBiometric, mTaskStackListener, - mUdfpsOverlayController, mSidefpsController, - mAuthenticationStateListeners, allowBackgroundAuthentication, + mUdfpsOverlayController, mAuthenticationStateListeners, + allowBackgroundAuthentication, mFingerprintSensors.get(sensorId).getSensorProperties(), Utils.getCurrentStrength(sensorId), lockoutTracker); @@ -801,12 +798,6 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi } } - // TODO(b/288175061): remove with Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR - @Override - public void setSidefpsController(@NonNull ISidefpsController controller) { - mSidefpsController = controller; - } - @Override public void dumpProtoState(int sensorId, @NonNull ProtoOutputStream proto, boolean clearSchedulerBuffer) { diff --git a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java index 90b131a80b2e..3dc375c5436d 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java @@ -24,8 +24,6 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_NONE; import static android.hardware.biometrics.BiometricConstants.BIOMETRIC_ERROR_CANCELED; import static android.hardware.biometrics.BiometricConstants.BIOMETRIC_SUCCESS; -import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR; - import static junit.framework.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -452,7 +450,6 @@ public class AuthServiceTest { @Test public void testRegisterAuthenticationStateListener_callsFingerprintService() throws Exception { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); setInternalAndTestBiometricPermissions(mContext, true /* hasPermission */); mAuthService = new AuthService(mContext, mInjector); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/SensorOverlaysTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/SensorOverlaysTest.java index 74f8f086803f..d6eadf28d3f5 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/SensorOverlaysTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/SensorOverlaysTest.java @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors; -import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR; - import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -26,7 +24,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.hardware.biometrics.BiometricRequestConstants; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; @@ -52,21 +49,18 @@ public class SensorOverlaysTest { private static final long REQUEST_ID = 8; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); - @Mock private IUdfpsOverlayController mUdfpsOverlayController; - @Mock private ISidefpsController mSidefpsController; @Mock private AcquisitionClient<?> mAcquisitionClient; @Before public void setup() { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); when(mAcquisitionClient.getRequestId()).thenReturn(REQUEST_ID); when(mAcquisitionClient.hasRequestId()).thenReturn(true); } @Test public void noopWhenBothNull() { - final SensorOverlays useless = new SensorOverlays(null, null); + final SensorOverlays useless = new SensorOverlays(null); useless.show(SENSOR_ID, 2, null); useless.hide(SENSOR_ID); } @@ -74,34 +68,24 @@ public class SensorOverlaysTest { @Test public void testProvidesUdfps() { final List<IUdfpsOverlayController> udfps = new ArrayList<>(); - SensorOverlays sensorOverlays = new SensorOverlays(null, mSidefpsController); + SensorOverlays sensorOverlays = new SensorOverlays(null); sensorOverlays.ifUdfps(udfps::add); assertThat(udfps).isEmpty(); - sensorOverlays = new SensorOverlays(mUdfpsOverlayController, mSidefpsController); + sensorOverlays = new SensorOverlays(mUdfpsOverlayController); sensorOverlays.ifUdfps(udfps::add); assertThat(udfps).containsExactly(mUdfpsOverlayController); } @Test - public void testShow() throws Exception { - testShow(mUdfpsOverlayController, mSidefpsController); - } - - @Test public void testShowUdfps() throws Exception { - testShow(mUdfpsOverlayController, null); - } - - @Test - public void testShowSidefps() throws Exception { - testShow(null, mSidefpsController); + testShow(mUdfpsOverlayController); } - private void testShow(IUdfpsOverlayController udfps, ISidefpsController sidefps) + private void testShow(IUdfpsOverlayController udfps) throws Exception { - final SensorOverlays sensorOverlays = new SensorOverlays(udfps, sidefps); + final SensorOverlays sensorOverlays = new SensorOverlays(udfps); final int reason = BiometricRequestConstants.REASON_UNKNOWN; sensorOverlays.show(SENSOR_ID, reason, mAcquisitionClient); @@ -109,36 +93,20 @@ public class SensorOverlaysTest { verify(mUdfpsOverlayController).showUdfpsOverlay( eq(REQUEST_ID), eq(SENSOR_ID), eq(reason), any()); } - if (sidefps != null) { - verify(mSidefpsController).show(eq(SENSOR_ID), eq(reason)); - } - } - - @Test - public void testHide() throws Exception { - testHide(mUdfpsOverlayController, mSidefpsController); } @Test public void testHideUdfps() throws Exception { - testHide(mUdfpsOverlayController, null); + testHide(mUdfpsOverlayController); } - @Test - public void testHideSidefps() throws Exception { - testHide(null, mSidefpsController); - } - - private void testHide(IUdfpsOverlayController udfps, ISidefpsController sidefps) + private void testHide(IUdfpsOverlayController udfps) throws Exception { - final SensorOverlays sensorOverlays = new SensorOverlays(udfps, sidefps); + final SensorOverlays sensorOverlays = new SensorOverlays(udfps); sensorOverlays.hide(SENSOR_ID); if (udfps != null) { verify(mUdfpsOverlayController).hideUdfpsOverlay(eq(SENSOR_ID)); } - if (sidefps != null) { - verify(mSidefpsController).hide(eq(SENSOR_ID)); - } } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java index bd1681358291..40de1b253dea 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java @@ -23,8 +23,6 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE; import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_LOCKOUT_PERMANENT; -import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR; - import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -62,7 +60,6 @@ import android.hardware.biometrics.fingerprint.PointerContext; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintAuthenticateOptions; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; @@ -83,6 +80,7 @@ import com.android.server.biometrics.log.CallbackWithProbe; import com.android.server.biometrics.log.OperationContextExt; import com.android.server.biometrics.log.Probe; import com.android.server.biometrics.sensors.AuthSessionCoordinator; +import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; @@ -144,8 +142,6 @@ public class FingerprintAuthenticationClientTest { @Mock private IUdfpsOverlayController mUdfpsOverlayController; @Mock - private ISidefpsController mSideFpsController; - @Mock private AuthenticationStateListeners mAuthenticationStateListeners; @Mock private FingerprintSensorPropertiesInternal mSensorProps; @@ -190,7 +186,6 @@ public class FingerprintAuthenticationClientTest { @Before public void setup() { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); mContext.addMockSystemService(BiometricManager.class, mBiometricManager); mContext.getOrCreateTestableResources().addOverride( R.string.fingerprint_error_hw_not_available, "hw not available"); @@ -419,12 +414,12 @@ public class FingerprintAuthenticationClientTest { @Test public void showHideOverlay_cancel() throws RemoteException { - showHideOverlay(c -> c.cancel()); + showHideOverlay(AuthenticationClient::cancel); } @Test public void showHideOverlay_stop() throws RemoteException { - showHideOverlay(c -> c.stopHalOperation()); + showHideOverlay(FingerprintAuthenticationClient::stopHalOperation); } @Test @@ -439,57 +434,13 @@ public class FingerprintAuthenticationClientTest { } @Test - public void showHideOverlay_lockoutPerm() throws RemoteException { - showHideOverlay(c -> c.onLockoutPermanent()); - } - - private void showHideOverlay(Consumer<FingerprintAuthenticationClient> block) + public void showHideOverlay_lockoutPerm() throws RemoteException { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); - final FingerprintAuthenticationClient client = createClient(); - - client.start(mCallback); - - verify(mUdfpsOverlayController).showUdfpsOverlay(eq(REQUEST_ID), anyInt(), anyInt(), any()); - verify(mSideFpsController).show(anyInt(), anyInt()); - - block.accept(client); - - verify(mUdfpsOverlayController).hideUdfpsOverlay(anyInt()); - verify(mSideFpsController).hide(anyInt()); - verify(mHal, times(2)).setIgnoreDisplayTouches(false); - } - - @Test - public void showHideOverlay_cancel_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.cancel()); + showHideOverlay(FingerprintAuthenticationClient::onLockoutPermanent); } - @Test - public void showHideOverlay_stop_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.stopHalOperation()); - } - - @Test - public void showHideOverlay_error_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.onError(0, 0)); - verify(mCallback).onClientFinished(any(), eq(false)); - } - - @Test - public void showHideOverlay_lockout_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.onLockoutTimed(5000)); - } - - @Test - public void showHideOverlay_lockoutPerm_sidefpsControllerRemovalRefactor() - throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.onLockoutPermanent()); - } - - private void showHideOverlay_sidefpsControllerRemovalRefactor( + private void showHideOverlay( Consumer<FingerprintAuthenticationClient> block) throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); final FingerprintAuthenticationClient client = createClient(); client.start(mCallback); @@ -503,7 +454,6 @@ public class FingerprintAuthenticationClientTest { BiometricRequestConstants.REASON_AUTH_BP).build() ); - block.accept(client); verify(mUdfpsOverlayController).hideUdfpsOverlay(anyInt()); @@ -557,7 +507,6 @@ public class FingerprintAuthenticationClientTest { @Test public void testAuthenticationStateListeners_onError() throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); final FingerprintAuthenticationClient client = createClient(); client.start(mCallback); client.onError(FINGERPRINT_ERROR_HW_UNAVAILABLE, 0); @@ -583,7 +532,6 @@ public class FingerprintAuthenticationClientTest { @Test public void testAuthenticationStateListeners_onLockoutPermanent() throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); final FingerprintAuthenticationClient client = createClient(); client.start(mCallback); client.onLockoutPermanent(); @@ -737,17 +685,12 @@ public class FingerprintAuthenticationClientTest { .setUserId(USER_ID) .setSensorId(SENSOR_ID) .build(); - return new FingerprintAuthenticationClient(mContext, () -> aidl, mToken, - REQUEST_ID, listener, OP_ID, - false /* restricted */, options, 4 /* cookie */, - false /* requireConfirmation */, - mBiometricLogger, mBiometricContext, - true /* isStrongBiometric */, - null /* taskStackListener */, - mUdfpsOverlayController, mSideFpsController, mAuthenticationStateListeners, - allowBackgroundAuthentication, - mSensorProps, 0 /* biometricStrength */, - lockoutTracker) { + return new FingerprintAuthenticationClient(mContext, () -> aidl, mToken, REQUEST_ID, + listener, OP_ID, false /* restricted */, options, 4 /* cookie */, + false /* requireConfirmation */, mBiometricLogger, mBiometricContext, + true /* isStrongBiometric */, null /* taskStackListener */, mUdfpsOverlayController, + mAuthenticationStateListeners, allowBackgroundAuthentication, mSensorProps, + 0 /* biometricStrength */, lockoutTracker) { @Override protected ActivityTaskManager getActivityTaskManager() { return mActivityTaskManager; diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java index b26f8c8da85b..5c6513d19a5c 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java @@ -20,8 +20,6 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_TOO_FAST; import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_TIMEOUT; -import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR; - import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -33,7 +31,6 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -52,7 +49,6 @@ import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintEnrollOptions; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; -import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; @@ -71,6 +67,7 @@ import com.android.server.biometrics.log.BiometricLogger; import com.android.server.biometrics.log.CallbackWithProbe; import com.android.server.biometrics.log.OperationContextExt; import com.android.server.biometrics.log.Probe; +import com.android.server.biometrics.sensors.AcquisitionClient; import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; @@ -127,8 +124,6 @@ public class FingerprintEnrollClientTest { @Mock private IUdfpsOverlayController mUdfpsOverlayController; @Mock - private ISidefpsController mSideFpsController; - @Mock private AuthenticationStateListeners mAuthenticationStateListeners; @Mock private FingerprintSensorPropertiesInternal mSensorProps; @@ -287,12 +282,12 @@ public class FingerprintEnrollClientTest { @Test public void showHideOverlay_cancel() throws RemoteException { - showHideOverlay(c -> c.cancel()); + showHideOverlay(AcquisitionClient::cancel); } @Test public void showHideOverlay_stop() throws RemoteException { - showHideOverlay(c -> c.stopHalOperation()); + showHideOverlay(FingerprintEnrollClient::stopHalOperation); } @Test @@ -303,45 +298,7 @@ public class FingerprintEnrollClientTest { @Test public void showHideOverlay_result() throws RemoteException { - showHideOverlay(c -> c.onEnrollResult(new Fingerprint("", 1, 1), 0)); - } - - private void showHideOverlay(Consumer<FingerprintEnrollClient> block) - throws RemoteException { - mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); - final FingerprintEnrollClient client = createClient(); - - client.start(mCallback); - - verify(mUdfpsOverlayController).showUdfpsOverlay(eq(REQUEST_ID), anyInt(), anyInt(), any()); - verify(mSideFpsController).show(anyInt(), anyInt()); - - block.accept(client); - - verify(mUdfpsOverlayController).hideUdfpsOverlay(anyInt()); - verify(mSideFpsController).hide(anyInt()); - verify(mHal, times(2)).setIgnoreDisplayTouches(false); - } - - @Test - public void showHideOverlay_cancel_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.cancel()); - } - - @Test - public void showHideOverlay_stop_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.stopHalOperation()); - } - - @Test - public void showHideOverlay_error_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor(c -> c.onError(0, 0)); - verify(mCallback).onClientFinished(any(), eq(false)); - } - - @Test - public void showHideOverlay_result_sidefpsControllerRemovalRefactor() throws RemoteException { - showHideOverlay_sidefpsControllerRemovalRefactor( + showHideOverlay( c -> c.onEnrollResult(new Fingerprint("", 1, 1), 0)); } @@ -355,9 +312,8 @@ public class FingerprintEnrollClientTest { eq(BiometricsProtoEnums.ENROLLMENT_SOURCE_SUW)); } - private void showHideOverlay_sidefpsControllerRemovalRefactor( + private void showHideOverlay( Consumer<FingerprintEnrollClient> block) throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); final FingerprintEnrollClient client = createClient(); client.start(mCallback); @@ -414,7 +370,6 @@ public class FingerprintEnrollClientTest { @Test public void testAuthenticationStateListeners_onError() throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR); final FingerprintEnrollClient client = createClient(); client.start(mCallback); client.onError(FINGERPRINT_ERROR_TIMEOUT, 0); @@ -449,7 +404,7 @@ public class FingerprintEnrollClientTest { mClientMonitorCallbackConverter, 0 /* userId */, HAT, "owner", mBiometricUtils, 8 /* sensorId */, mBiometricLogger, mBiometricContext, mSensorProps, mUdfpsOverlayController, - mSideFpsController, mAuthenticationStateListeners, 6 /* maxTemplatesPerUser */, + mAuthenticationStateListeners, 6 /* maxTemplatesPerUser */, FingerprintManager.ENROLL_ENROLL, (new FingerprintEnrollOptions.Builder()) .setEnrollReason(ENROLL_SOURCE).build() ); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/HidlToAidlSensorAdapterTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/HidlToAidlSensorAdapterTest.java index 6c3bfe80510e..1db74b48ac8d 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/HidlToAidlSensorAdapterTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/HidlToAidlSensorAdapterTest.java @@ -217,7 +217,7 @@ public class HidlToAidlSensorAdapterTest { mContext, mHidlToAidlSensorAdapter.getLazySession(), null /* token */, 1 /* requestId */, null /* listener */, USER_ID, HAT, TAG, mBiometricUtils, SENSOR_ID, mLogger, mBiometricContext, - mHidlToAidlSensorAdapter.getSensorProperties(), null, null, + mHidlToAidlSensorAdapter.getSensorProperties(), null, mAuthenticationStateListeners, 5 /* maxTemplatesPerUser */, ENROLL_ENROLL, (new FingerprintEnrollOptions.Builder()).build())); mLooper.dispatchAll(); |