Merge "Remove ModernAlternateBouncer flag & legacyAltBouncer code" into udc-dev

This commit is contained in:
Beverly Tai
2023-03-27 15:29:45 +00:00
committed by Android (Google) Code Review
9 changed files with 23 additions and 220 deletions

View File

@@ -59,8 +59,6 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.recents.OverviewProxyService import com.android.systemui.recents.OverviewProxyService
import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.concurrency.DelayableExecutor
@@ -90,7 +88,6 @@ constructor(
@Main private val handler: Handler, @Main private val handler: Handler,
private val alternateBouncerInteractor: AlternateBouncerInteractor, private val alternateBouncerInteractor: AlternateBouncerInteractor,
@Application private val scope: CoroutineScope, @Application private val scope: CoroutineScope,
private val featureFlags: FeatureFlags,
dumpManager: DumpManager dumpManager: DumpManager
) : Dumpable { ) : Dumpable {
private val requests: HashSet<SideFpsUiRequestSource> = HashSet() private val requests: HashSet<SideFpsUiRequestSource> = HashSet()
@@ -191,7 +188,6 @@ constructor(
private fun listenForAlternateBouncerVisibility() { private fun listenForAlternateBouncerVisibility() {
alternateBouncerInteractor.setAlternateBouncerUIAvailable(true) alternateBouncerInteractor.setAlternateBouncerUIAvailable(true)
if (featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)) {
scope.launch { scope.launch {
alternateBouncerInteractor.isVisible.collect { isVisible: Boolean -> alternateBouncerInteractor.isVisible.collect { isVisible: Boolean ->
if (isVisible) { if (isVisible) {
@@ -202,7 +198,6 @@ constructor(
} }
} }
} }
}
/** Shows the side fps overlay if not already shown. */ /** Shows the side fps overlay if not already shown. */
fun show( fun show(

View File

@@ -42,7 +42,6 @@ import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.stack.StackStateAnimator import com.android.systemui.statusbar.notification.stack.StackStateAnimator
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.KeyguardViewManagerCallback import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.KeyguardViewManagerCallback
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.LegacyAlternateBouncer
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.OccludingAppBiometricUI import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.OccludingAppBiometricUI
import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.SystemUIDialogManager
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
@@ -82,8 +81,6 @@ constructor(
) { ) {
private val useExpandedOverlay: Boolean = private val useExpandedOverlay: Boolean =
featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION) featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)
private val isModernAlternateBouncerEnabled: Boolean =
featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)
private var showingUdfpsBouncer = false private var showingUdfpsBouncer = false
private var udfpsRequested = false private var udfpsRequested = false
private var qsExpansion = 0f private var qsExpansion = 0f
@@ -107,7 +104,7 @@ constructor(
) )
} }
} }
private var inputBouncerExpansion = 0f // only used for modernBouncer private var inputBouncerExpansion = 0f
private val stateListener: StatusBarStateController.StateListener = private val stateListener: StatusBarStateController.StateListener =
object : StatusBarStateController.StateListener { object : StatusBarStateController.StateListener {
@@ -251,7 +248,7 @@ constructor(
// that may make the view visible again. // that may make the view visible again.
repeatOnLifecycle(Lifecycle.State.CREATED) { repeatOnLifecycle(Lifecycle.State.CREATED) {
listenForBouncerExpansion(this) listenForBouncerExpansion(this)
if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this) listenForAlternateBouncerVisibility(this)
} }
} }
} }
@@ -295,7 +292,6 @@ constructor(
view.updatePadding() view.updatePadding()
updateAlpha() updateAlpha()
updatePauseAuth() updatePauseAuth()
keyguardViewManager.setLegacyAlternateBouncer(legacyAlternateBouncer)
keyguardViewManager.setOccludingAppBiometricUI(occludingAppBiometricUI) keyguardViewManager.setOccludingAppBiometricUI(occludingAppBiometricUI)
lockScreenShadeTransitionController.udfpsKeyguardViewController = this lockScreenShadeTransitionController.udfpsKeyguardViewController = this
activityLaunchAnimator.addListener(activityLaunchAnimatorListener) activityLaunchAnimator.addListener(activityLaunchAnimatorListener)
@@ -309,7 +305,6 @@ constructor(
faceDetectRunning = false faceDetectRunning = false
keyguardStateController.removeCallback(keyguardStateControllerCallback) keyguardStateController.removeCallback(keyguardStateControllerCallback)
statusBarStateController.removeCallback(stateListener) statusBarStateController.removeCallback(stateListener)
keyguardViewManager.removeLegacyAlternateBouncer(legacyAlternateBouncer)
keyguardViewManager.removeOccludingAppBiometricUI(occludingAppBiometricUI) keyguardViewManager.removeOccludingAppBiometricUI(occludingAppBiometricUI)
keyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false) keyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false)
configurationController.removeCallback(configurationListener) configurationController.removeCallback(configurationListener)
@@ -323,7 +318,6 @@ constructor(
override fun dump(pw: PrintWriter, args: Array<String>) { override fun dump(pw: PrintWriter, args: Array<String>) {
super.dump(pw, args) super.dump(pw, args)
pw.println("isModernAlternateBouncerEnabled=$isModernAlternateBouncerEnabled")
pw.println("showingUdfpsAltBouncer=$showingUdfpsBouncer") pw.println("showingUdfpsAltBouncer=$showingUdfpsBouncer")
pw.println( pw.println(
"altBouncerInteractor#isAlternateBouncerVisible=" + "altBouncerInteractor#isAlternateBouncerVisible=" +
@@ -473,22 +467,6 @@ constructor(
private fun updateScaleFactor() { private fun updateScaleFactor() {
udfpsController.mOverlayParams?.scaleFactor?.let { view.setScaleFactor(it) } udfpsController.mOverlayParams?.scaleFactor?.let { view.setScaleFactor(it) }
} }
private val legacyAlternateBouncer: LegacyAlternateBouncer =
object : LegacyAlternateBouncer {
override fun showAlternateBouncer(): Boolean {
return showUdfpsBouncer(true)
}
override fun hideAlternateBouncer(): Boolean {
return showUdfpsBouncer(false)
}
override fun isShowingAlternateBouncer(): Boolean {
return showingUdfpsBouncer
}
}
companion object { companion object {
const val TAG = "UdfpsKeyguardViewController" const val TAG = "UdfpsKeyguardViewController"
} }

View File

@@ -169,13 +169,6 @@ object Flags {
@JvmField @JvmField
val LIGHT_REVEAL_MIGRATION = unreleasedFlag(218, "light_reveal_migration", teamfood = false) val LIGHT_REVEAL_MIGRATION = unreleasedFlag(218, "light_reveal_migration", teamfood = false)
/**
* Whether to use the new alternate bouncer architecture, a refactor of and eventual replacement
* of the Alternate/Authentication Bouncer. No visual UI changes.
*/
// TODO(b/260619425): Tracking Bug
@JvmField val MODERN_ALTERNATE_BOUNCER = releasedFlag(219, "modern_alternate_bouncer")
/** Flag to control the migration of face auth to modern architecture. */ /** Flag to control the migration of face auth to modern architecture. */
// TODO(b/262838215): Tracking bug // TODO(b/262838215): Tracking bug
@JvmField val FACE_AUTH_REFACTOR = unreleasedFlag(220, "face_auth_refactor") @JvmField val FACE_AUTH_REFACTOR = unreleasedFlag(220, "face_auth_refactor")

View File

@@ -16,15 +16,11 @@
package com.android.systemui.keyguard.domain.interactor package com.android.systemui.keyguard.domain.interactor
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.LegacyAlternateBouncer
import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.time.SystemClock import com.android.systemui.util.time.SystemClock
import javax.inject.Inject import javax.inject.Inject
@@ -41,13 +37,7 @@ constructor(
private val biometricSettingsRepository: BiometricSettingsRepository, private val biometricSettingsRepository: BiometricSettingsRepository,
private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository, private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository,
private val systemClock: SystemClock, private val systemClock: SystemClock,
private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
featureFlags: FeatureFlags,
) { ) {
val isModernAlternateBouncerEnabled = featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)
var legacyAlternateBouncer: LegacyAlternateBouncer? = null
var legacyAlternateBouncerVisibleTime: Long = NOT_VISIBLE
var receivedDownTouch = false var receivedDownTouch = false
val isVisible: Flow<Boolean> = bouncerRepository.alternateBouncerVisible val isVisible: Flow<Boolean> = bouncerRepository.alternateBouncerVisible
@@ -68,21 +58,8 @@ constructor(
* @return whether alternateBouncer is visible * @return whether alternateBouncer is visible
*/ */
fun show(): Boolean { fun show(): Boolean {
return when {
isModernAlternateBouncerEnabled -> {
bouncerRepository.setAlternateVisible(canShowAlternateBouncerForFingerprint()) bouncerRepository.setAlternateVisible(canShowAlternateBouncerForFingerprint())
isVisibleState() return isVisibleState()
}
canShowAlternateBouncerForFingerprint() -> {
if (legacyAlternateBouncer?.showAlternateBouncer() == true) {
legacyAlternateBouncerVisibleTime = systemClock.uptimeMillis()
true
} else {
false
}
}
else -> false
}
} }
/** /**
@@ -94,21 +71,13 @@ constructor(
*/ */
fun hide(): Boolean { fun hide(): Boolean {
receivedDownTouch = false receivedDownTouch = false
return if (isModernAlternateBouncerEnabled) {
val wasAlternateBouncerVisible = isVisibleState() val wasAlternateBouncerVisible = isVisibleState()
bouncerRepository.setAlternateVisible(false) bouncerRepository.setAlternateVisible(false)
wasAlternateBouncerVisible && !isVisibleState() return wasAlternateBouncerVisible && !isVisibleState()
} else {
legacyAlternateBouncer?.hideAlternateBouncer() ?: false
}
} }
fun isVisibleState(): Boolean { fun isVisibleState(): Boolean {
return if (isModernAlternateBouncerEnabled) { return bouncerRepository.alternateBouncerVisible.value
bouncerRepository.alternateBouncerVisible.value
} else {
legacyAlternateBouncer?.isShowingAlternateBouncer ?: false
}
} }
fun setAlternateBouncerUIAvailable(isAvailable: Boolean) { fun setAlternateBouncerUIAvailable(isAvailable: Boolean) {
@@ -116,18 +85,13 @@ constructor(
} }
fun canShowAlternateBouncerForFingerprint(): Boolean { fun canShowAlternateBouncerForFingerprint(): Boolean {
return if (isModernAlternateBouncerEnabled) { return bouncerRepository.alternateBouncerUIAvailable.value &&
bouncerRepository.alternateBouncerUIAvailable.value &&
biometricSettingsRepository.isFingerprintEnrolled.value && biometricSettingsRepository.isFingerprintEnrolled.value &&
biometricSettingsRepository.isStrongBiometricAllowed.value && biometricSettingsRepository.isStrongBiometricAllowed.value &&
biometricSettingsRepository.isFingerprintEnabledByDevicePolicy.value && biometricSettingsRepository.isFingerprintEnabledByDevicePolicy.value &&
!deviceEntryFingerprintAuthRepository.isLockedOut.value && !deviceEntryFingerprintAuthRepository.isLockedOut.value &&
!keyguardStateController.isUnlocked && !keyguardStateController.isUnlocked &&
!statusBarStateController.isDozing !statusBarStateController.isDozing
} else {
legacyAlternateBouncer != null &&
keyguardUpdateMonitor.isUnlockingWithBiometricAllowed(true)
}
} }
/** /**
@@ -135,12 +99,8 @@ constructor(
* alternate bouncer and show the primary bouncer. * alternate bouncer and show the primary bouncer.
*/ */
fun hasAlternateBouncerShownWithMinTime(): Boolean { fun hasAlternateBouncerShownWithMinTime(): Boolean {
return if (isModernAlternateBouncerEnabled) { return (systemClock.uptimeMillis() - bouncerRepository.lastAlternateBouncerVisibleTime) >
(systemClock.uptimeMillis() - bouncerRepository.lastAlternateBouncerVisibleTime) >
MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS
} else {
systemClock.uptimeMillis() - legacyAlternateBouncerVisibleTime > 200
}
} }
private fun maybeHide() { private fun maybeHide() {
@@ -151,6 +111,5 @@ constructor(
companion object { companion object {
private const val MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS = 200L private const val MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS = 200L
private const val NOT_VISIBLE = -1L
} }
} }

View File

@@ -281,7 +281,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private boolean mLastScreenOffAnimationPlaying; private boolean mLastScreenOffAnimationPlaying;
private float mQsExpansion; private float mQsExpansion;
final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>(); final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>();
private boolean mIsModernAlternateBouncerEnabled;
private boolean mIsBackAnimationEnabled; private boolean mIsBackAnimationEnabled;
private final boolean mUdfpsNewTouchDetectionEnabled; private final boolean mUdfpsNewTouchDetectionEnabled;
private final UdfpsOverlayInteractor mUdfpsOverlayInteractor; private final UdfpsOverlayInteractor mUdfpsOverlayInteractor;
@@ -363,7 +362,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mPrimaryBouncerView = primaryBouncerView; mPrimaryBouncerView = primaryBouncerView;
mFoldAodAnimationController = sysUIUnfoldComponent mFoldAodAnimationController = sysUIUnfoldComponent
.map(SysUIUnfoldComponent::getFoldAodAnimationController).orElse(null); .map(SysUIUnfoldComponent::getFoldAodAnimationController).orElse(null);
mIsModernAlternateBouncerEnabled = featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER);
mAlternateBouncerInteractor = alternateBouncerInteractor; mAlternateBouncerInteractor = alternateBouncerInteractor;
mIsBackAnimationEnabled = mIsBackAnimationEnabled =
featureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM); featureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM);
@@ -395,35 +393,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
registerListeners(); registerListeners();
} }
/**
* Sets the given legacy alternate bouncer to null if it's the current alternate bouncer. Else,
* does nothing. Only used if modern alternate bouncer is NOT enabled.
*/
public void removeLegacyAlternateBouncer(
@NonNull LegacyAlternateBouncer alternateBouncerLegacy) {
if (!mIsModernAlternateBouncerEnabled) {
if (Objects.equals(mAlternateBouncerInteractor.getLegacyAlternateBouncer(),
alternateBouncerLegacy)) {
mAlternateBouncerInteractor.setLegacyAlternateBouncer(null);
hideAlternateBouncer(true);
}
}
}
/**
* Sets a new legacy alternate bouncer. Only used if modern alternate bouncer is NOT enabled.
*/
public void setLegacyAlternateBouncer(@NonNull LegacyAlternateBouncer alternateBouncerLegacy) {
if (!mIsModernAlternateBouncerEnabled) {
if (!Objects.equals(mAlternateBouncerInteractor.getLegacyAlternateBouncer(),
alternateBouncerLegacy)) {
mAlternateBouncerInteractor.setLegacyAlternateBouncer(alternateBouncerLegacy);
hideAlternateBouncer(true);
}
}
}
/** /**
* Sets the given OccludingAppBiometricUI to null if it's the current auth interceptor. Else, * Sets the given OccludingAppBiometricUI to null if it's the current auth interceptor. Else,
@@ -1386,7 +1355,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
public void dump(PrintWriter pw) { public void dump(PrintWriter pw) {
pw.println("StatusBarKeyguardViewManager:"); pw.println("StatusBarKeyguardViewManager:");
pw.println(" mIsModernAlternateBouncerEnabled: " + mIsModernAlternateBouncerEnabled);
pw.println(" mRemoteInputActive: " + mRemoteInputActive); pw.println(" mRemoteInputActive: " + mRemoteInputActive);
pw.println(" mDozing: " + mDozing); pw.println(" mDozing: " + mDozing);
pw.println(" mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction); pw.println(" mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
@@ -1584,28 +1552,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|| mode == KeyguardSecurityModel.SecurityMode.SimPuk; || mode == KeyguardSecurityModel.SecurityMode.SimPuk;
} }
/**
* @deprecated Delegate used to send show and hide events to an alternate bouncer.
*/
public interface LegacyAlternateBouncer {
/**
* Show alternate authentication bouncer.
* @return whether alternate auth method was newly shown
*/
boolean showAlternateBouncer();
/**
* Hide alternate authentication bouncer
* @return whether the alternate auth method was newly hidden
*/
boolean hideAlternateBouncer();
/**
* @return true if the alternate auth bouncer is showing
*/
boolean isShowingAlternateBouncer();
}
/** /**
* Delegate used to send show and hide events to an alternate authentication method instead of * Delegate used to send show and hide events to an alternate authentication method instead of
* the regular pin/pattern/password bouncer. * the regular pin/pattern/password bouncer.

View File

@@ -51,13 +51,10 @@ import android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
import android.view.WindowMetrics import android.view.WindowMetrics
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.airbnb.lottie.LottieAnimationView import com.airbnb.lottie.LottieAnimationView
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.R import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestableContext import com.android.systemui.SysuiTestableContext
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags.MODERN_ALTERNATE_BOUNCER
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
@@ -113,7 +110,6 @@ class SideFpsControllerTest : SysuiTestCase() {
private lateinit var keyguardBouncerRepository: FakeKeyguardBouncerRepository private lateinit var keyguardBouncerRepository: FakeKeyguardBouncerRepository
private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor
private val featureFlags = FakeFeatureFlags()
private val executor = FakeExecutor(FakeSystemClock()) private val executor = FakeExecutor(FakeSystemClock())
private lateinit var overlayController: ISidefpsController private lateinit var overlayController: ISidefpsController
private lateinit var sideFpsController: SideFpsController private lateinit var sideFpsController: SideFpsController
@@ -134,7 +130,6 @@ class SideFpsControllerTest : SysuiTestCase() {
@Before @Before
fun setup() { fun setup() {
featureFlags.set(MODERN_ALTERNATE_BOUNCER, true)
keyguardBouncerRepository = FakeKeyguardBouncerRepository() keyguardBouncerRepository = FakeKeyguardBouncerRepository()
alternateBouncerInteractor = alternateBouncerInteractor =
AlternateBouncerInteractor( AlternateBouncerInteractor(
@@ -144,8 +139,6 @@ class SideFpsControllerTest : SysuiTestCase() {
FakeBiometricSettingsRepository(), FakeBiometricSettingsRepository(),
FakeDeviceEntryFingerprintAuthRepository(), FakeDeviceEntryFingerprintAuthRepository(),
FakeSystemClock(), FakeSystemClock(),
mock(KeyguardUpdateMonitor::class.java),
featureFlags,
) )
context.addMockSystemService(DisplayManager::class.java, displayManager) context.addMockSystemService(DisplayManager::class.java, displayManager)
@@ -246,7 +239,6 @@ class SideFpsControllerTest : SysuiTestCase() {
handler, handler,
alternateBouncerInteractor, alternateBouncerInteractor,
TestCoroutineScope(), TestCoroutineScope(),
featureFlags,
dumpManager, dumpManager,
) )

View File

@@ -147,7 +147,6 @@ public class UdfpsKeyguardViewControllerBaseTest extends SysuiTestCase {
protected UdfpsKeyguardViewController createUdfpsKeyguardViewController( protected UdfpsKeyguardViewController createUdfpsKeyguardViewController(
boolean useModernBouncer, boolean useExpandedOverlay) { boolean useModernBouncer, boolean useExpandedOverlay) {
mFeatureFlags.set(Flags.MODERN_ALTERNATE_BOUNCER, useModernBouncer);
mFeatureFlags.set(Flags.UDFPS_NEW_TOUCH_DETECTION, useExpandedOverlay); mFeatureFlags.set(Flags.UDFPS_NEW_TOUCH_DETECTION, useExpandedOverlay);
UdfpsKeyguardViewController controller = new UdfpsKeyguardViewController( UdfpsKeyguardViewController controller = new UdfpsKeyguardViewController(
mView, mView,

View File

@@ -21,9 +21,7 @@ import android.testing.AndroidTestingRunner
import android.testing.TestableLooper import android.testing.TestableLooper
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityModel
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.data.BouncerView import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
@@ -100,8 +98,6 @@ class UdfpsKeyguardViewControllerWithCoroutinesTest : UdfpsKeyguardViewControlle
mock(BiometricSettingsRepository::class.java), mock(BiometricSettingsRepository::class.java),
mock(DeviceEntryFingerprintAuthRepository::class.java), mock(DeviceEntryFingerprintAuthRepository::class.java),
mock(SystemClock::class.java), mock(SystemClock::class.java),
mock(KeyguardUpdateMonitor::class.java),
mock(FeatureFlags::class.java)
) )
return createUdfpsKeyguardViewController( return createUdfpsKeyguardViewController(
/* useModernBouncer */ true, /* useExpandedOverlay */ /* useModernBouncer */ true, /* useExpandedOverlay */

View File

@@ -18,11 +18,8 @@ package com.android.systemui.keyguard.domain.interactor
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.ViewMediatorCallback import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
@@ -40,10 +37,8 @@ import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
@@ -58,9 +53,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
@Mock private lateinit var statusBarStateController: StatusBarStateController @Mock private lateinit var statusBarStateController: StatusBarStateController
@Mock private lateinit var keyguardStateController: KeyguardStateController @Mock private lateinit var keyguardStateController: KeyguardStateController
@Mock private lateinit var systemClock: SystemClock @Mock private lateinit var systemClock: SystemClock
@Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
@Mock private lateinit var bouncerLogger: TableLogBuffer @Mock private lateinit var bouncerLogger: TableLogBuffer
private lateinit var featureFlags: FakeFeatureFlags
@Before @Before
fun setup() { fun setup() {
@@ -74,7 +67,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
) )
biometricSettingsRepository = FakeBiometricSettingsRepository() biometricSettingsRepository = FakeBiometricSettingsRepository()
deviceEntryFingerprintAuthRepository = FakeDeviceEntryFingerprintAuthRepository() deviceEntryFingerprintAuthRepository = FakeDeviceEntryFingerprintAuthRepository()
featureFlags = FakeFeatureFlags().apply { this.set(Flags.MODERN_ALTERNATE_BOUNCER, true) }
underTest = underTest =
AlternateBouncerInteractor( AlternateBouncerInteractor(
statusBarStateController, statusBarStateController,
@@ -83,8 +75,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
biometricSettingsRepository, biometricSettingsRepository,
deviceEntryFingerprintAuthRepository, deviceEntryFingerprintAuthRepository,
systemClock, systemClock,
keyguardUpdateMonitor,
featureFlags,
) )
} }
@@ -134,14 +124,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
assertFalse(underTest.canShowAlternateBouncerForFingerprint()) assertFalse(underTest.canShowAlternateBouncerForFingerprint())
} }
@Test
fun canShowAlternateBouncerForFingerprint_isDozing() {
givenCanShowAlternateBouncer()
whenever(statusBarStateController.isDozing).thenReturn(true)
assertFalse(underTest.canShowAlternateBouncerForFingerprint())
}
@Test @Test
fun show_whenCanShow() { fun show_whenCanShow() {
givenCanShowAlternateBouncer() givenCanShowAlternateBouncer()
@@ -182,42 +164,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
assertFalse(bouncerRepository.alternateBouncerVisible.value) assertFalse(bouncerRepository.alternateBouncerVisible.value)
} }
@Test
fun onUnlockedIsFalse_doesNotHide() {
// GIVEN alternate bouncer is showing
bouncerRepository.setAlternateVisible(true)
val keyguardStateControllerCallbackCaptor =
ArgumentCaptor.forClass(KeyguardStateController.Callback::class.java)
verify(keyguardStateController).addCallback(keyguardStateControllerCallbackCaptor.capture())
// WHEN isUnlocked=false
givenCanShowAlternateBouncer()
whenever(keyguardStateController.isUnlocked).thenReturn(false)
keyguardStateControllerCallbackCaptor.value.onUnlockedChanged()
// THEN the alternate bouncer is still visible
assertTrue(bouncerRepository.alternateBouncerVisible.value)
}
@Test
fun onUnlockedChangedIsTrue_hide() {
// GIVEN alternate bouncer is showing
bouncerRepository.setAlternateVisible(true)
val keyguardStateControllerCallbackCaptor =
ArgumentCaptor.forClass(KeyguardStateController.Callback::class.java)
verify(keyguardStateController).addCallback(keyguardStateControllerCallbackCaptor.capture())
// WHEN isUnlocked=true
givenCanShowAlternateBouncer()
whenever(keyguardStateController.isUnlocked).thenReturn(true)
keyguardStateControllerCallbackCaptor.value.onUnlockedChanged()
// THEN the alternate bouncer is hidden
assertFalse(bouncerRepository.alternateBouncerVisible.value)
}
private fun givenCanShowAlternateBouncer() { private fun givenCanShowAlternateBouncer() {
bouncerRepository.setAlternateBouncerUIAvailable(true) bouncerRepository.setAlternateBouncerUIAvailable(true)
biometricSettingsRepository.setFingerprintEnrolled(true) biometricSettingsRepository.setFingerprintEnrolled(true)
@@ -225,7 +171,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
biometricSettingsRepository.setFingerprintEnabledByDevicePolicy(true) biometricSettingsRepository.setFingerprintEnabledByDevicePolicy(true)
deviceEntryFingerprintAuthRepository.setLockedOut(false) deviceEntryFingerprintAuthRepository.setLockedOut(false)
whenever(keyguardStateController.isUnlocked).thenReturn(false) whenever(keyguardStateController.isUnlocked).thenReturn(false)
whenever(statusBarStateController.isDozing).thenReturn(false)
} }
private fun givenCannotShowAlternateBouncer() { private fun givenCannotShowAlternateBouncer() {