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

Commit dbaac4e3 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Remove ModernAlternateBouncer flag & legacyAltBouncer code

Test: atest StatusBarKeyguardViewManagerTest
AlternateBouncerInteractorTest SideFpsControllerTest
UdfpsKeyguardViewControllerWIthCoroutinesTest
Test: manually show alternate bouncer with sfps and udfps
over the lockscreen, occluding app, notification shade and
see altBouncer functions as desired
Fixes: 260619425

Change-Id: Ib1e5d07ab44482fc42c1a1bcfc45207d4b0a9aad
parent aee5c182
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -59,8 +59,6 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main
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.recents.OverviewProxyService
import com.android.systemui.util.concurrency.DelayableExecutor
@@ -90,7 +88,6 @@ constructor(
    @Main private val handler: Handler,
    private val alternateBouncerInteractor: AlternateBouncerInteractor,
    @Application private val scope: CoroutineScope,
    private val featureFlags: FeatureFlags,
    dumpManager: DumpManager
) : Dumpable {
    private val requests: HashSet<SideFpsUiRequestSource> = HashSet()
@@ -191,7 +188,6 @@ constructor(

    private fun listenForAlternateBouncerVisibility() {
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true)
        if (featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)) {
        scope.launch {
            alternateBouncerInteractor.isVisible.collect { isVisible: Boolean ->
                if (isVisible) {
@@ -202,7 +198,6 @@ constructor(
            }
        }
    }
    }

    /** Shows the side fps overlay if not already shown. */
    fun show(
+2 −24
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.stack.StackStateAnimator
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
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.SystemUIDialogManager
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
@@ -82,8 +81,6 @@ constructor(
    ) {
    private val useExpandedOverlay: Boolean =
        featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)
    private val isModernAlternateBouncerEnabled: Boolean =
        featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)
    private var showingUdfpsBouncer = false
    private var udfpsRequested = false
    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 =
        object : StatusBarStateController.StateListener {
@@ -251,7 +248,7 @@ constructor(
            // that may make the view visible again.
            repeatOnLifecycle(Lifecycle.State.CREATED) {
                listenForBouncerExpansion(this)
                if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this)
                listenForAlternateBouncerVisibility(this)
            }
        }
    }
@@ -295,7 +292,6 @@ constructor(
        view.updatePadding()
        updateAlpha()
        updatePauseAuth()
        keyguardViewManager.setLegacyAlternateBouncer(legacyAlternateBouncer)
        keyguardViewManager.setOccludingAppBiometricUI(occludingAppBiometricUI)
        lockScreenShadeTransitionController.udfpsKeyguardViewController = this
        activityLaunchAnimator.addListener(activityLaunchAnimatorListener)
@@ -309,7 +305,6 @@ constructor(
        faceDetectRunning = false
        keyguardStateController.removeCallback(keyguardStateControllerCallback)
        statusBarStateController.removeCallback(stateListener)
        keyguardViewManager.removeLegacyAlternateBouncer(legacyAlternateBouncer)
        keyguardViewManager.removeOccludingAppBiometricUI(occludingAppBiometricUI)
        keyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false)
        configurationController.removeCallback(configurationListener)
@@ -323,7 +318,6 @@ constructor(

    override fun dump(pw: PrintWriter, args: Array<String>) {
        super.dump(pw, args)
        pw.println("isModernAlternateBouncerEnabled=$isModernAlternateBouncerEnabled")
        pw.println("showingUdfpsAltBouncer=$showingUdfpsBouncer")
        pw.println(
            "altBouncerInteractor#isAlternateBouncerVisible=" +
@@ -473,22 +467,6 @@ constructor(
    private fun updateScaleFactor() {
        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 {
        const val TAG = "UdfpsKeyguardViewController"
    }
+0 −7
Original line number Diff line number Diff line
@@ -169,13 +169,6 @@ object Flags {
    @JvmField
    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. */
    // TODO(b/262838215): Tracking bug
    @JvmField val FACE_AUTH_REFACTOR = unreleasedFlag(220, "face_auth_refactor")
+15 −56
Original line number Diff line number Diff line
@@ -16,15 +16,11 @@

package com.android.systemui.keyguard.domain.interactor

import com.android.keyguard.KeyguardUpdateMonitor
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.DeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
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.util.time.SystemClock
import javax.inject.Inject
@@ -41,13 +37,7 @@ constructor(
    private val biometricSettingsRepository: BiometricSettingsRepository,
    private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository,
    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
    val isVisible: Flow<Boolean> = bouncerRepository.alternateBouncerVisible

@@ -68,21 +58,8 @@ constructor(
     * @return whether alternateBouncer is visible
     */
    fun show(): Boolean {
        return when {
            isModernAlternateBouncerEnabled -> {
        bouncerRepository.setAlternateVisible(canShowAlternateBouncerForFingerprint())
                isVisibleState()
            }
            canShowAlternateBouncerForFingerprint() -> {
                if (legacyAlternateBouncer?.showAlternateBouncer() == true) {
                    legacyAlternateBouncerVisibleTime = systemClock.uptimeMillis()
                    true
                } else {
                    false
                }
            }
            else -> false
        }
        return isVisibleState()
    }

    /**
@@ -94,21 +71,13 @@ constructor(
     */
    fun hide(): Boolean {
        receivedDownTouch = false
        return if (isModernAlternateBouncerEnabled) {
        val wasAlternateBouncerVisible = isVisibleState()
        bouncerRepository.setAlternateVisible(false)
            wasAlternateBouncerVisible && !isVisibleState()
        } else {
            legacyAlternateBouncer?.hideAlternateBouncer() ?: false
        }
        return wasAlternateBouncerVisible && !isVisibleState()
    }

    fun isVisibleState(): Boolean {
        return if (isModernAlternateBouncerEnabled) {
            bouncerRepository.alternateBouncerVisible.value
        } else {
            legacyAlternateBouncer?.isShowingAlternateBouncer ?: false
        }
        return bouncerRepository.alternateBouncerVisible.value
    }

    fun setAlternateBouncerUIAvailable(isAvailable: Boolean) {
@@ -116,18 +85,13 @@ constructor(
    }

    fun canShowAlternateBouncerForFingerprint(): Boolean {
        return if (isModernAlternateBouncerEnabled) {
            bouncerRepository.alternateBouncerUIAvailable.value &&
        return bouncerRepository.alternateBouncerUIAvailable.value &&
            biometricSettingsRepository.isFingerprintEnrolled.value &&
            biometricSettingsRepository.isStrongBiometricAllowed.value &&
            biometricSettingsRepository.isFingerprintEnabledByDevicePolicy.value &&
            !deviceEntryFingerprintAuthRepository.isLockedOut.value &&
            !keyguardStateController.isUnlocked &&
            !statusBarStateController.isDozing
        } else {
            legacyAlternateBouncer != null &&
                keyguardUpdateMonitor.isUnlockingWithBiometricAllowed(true)
        }
    }

    /**
@@ -135,12 +99,8 @@ constructor(
     * alternate bouncer and show the primary bouncer.
     */
    fun hasAlternateBouncerShownWithMinTime(): Boolean {
        return if (isModernAlternateBouncerEnabled) {
            (systemClock.uptimeMillis() - bouncerRepository.lastAlternateBouncerVisibleTime) >
        return (systemClock.uptimeMillis() - bouncerRepository.lastAlternateBouncerVisibleTime) >
            MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS
        } else {
            systemClock.uptimeMillis() - legacyAlternateBouncerVisibleTime > 200
        }
    }

    private fun maybeHide() {
@@ -151,6 +111,5 @@ constructor(

    companion object {
        private const val MIN_VISIBILITY_DURATION_UNTIL_TOUCHES_DISMISS_ALTERNATE_BOUNCER_MS = 200L
        private const val NOT_VISIBLE = -1L
    }
}
+0 −54
Original line number Diff line number Diff line
@@ -281,7 +281,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
    private boolean mLastScreenOffAnimationPlaying;
    private float mQsExpansion;
    final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>();
    private boolean mIsModernAlternateBouncerEnabled;
    private boolean mIsBackAnimationEnabled;
    private final boolean mUdfpsNewTouchDetectionEnabled;
    private final UdfpsOverlayInteractor mUdfpsOverlayInteractor;
@@ -363,7 +362,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        mPrimaryBouncerView = primaryBouncerView;
        mFoldAodAnimationController = sysUIUnfoldComponent
                .map(SysUIUnfoldComponent::getFoldAodAnimationController).orElse(null);
        mIsModernAlternateBouncerEnabled = featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER);
        mAlternateBouncerInteractor = alternateBouncerInteractor;
        mIsBackAnimationEnabled =
                featureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM);
@@ -395,35 +393,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        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,
@@ -1386,7 +1355,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb

    public void dump(PrintWriter pw) {
        pw.println("StatusBarKeyguardViewManager:");
        pw.println("  mIsModernAlternateBouncerEnabled: " + mIsModernAlternateBouncerEnabled);
        pw.println("  mRemoteInputActive: " + mRemoteInputActive);
        pw.println("  mDozing: " + mDozing);
        pw.println("  mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
@@ -1584,28 +1552,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
                || 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
     * the regular pin/pattern/password bouncer.
Loading