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

Commit 01c224cd authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "Remove dependency on ShadeExpansionStateManager from UdfpsAnimationViewController" into main

parents 28aef0fe d6636836
Loading
Loading
Loading
Loading
+33 −16
Original line number Diff line number Diff line
@@ -18,14 +18,21 @@ package com.android.systemui.biometrics
import android.animation.ValueAnimator
import android.graphics.PointF
import android.graphics.RectF
import com.android.systemui.Dumpable
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.animation.Interpolators
import com.android.systemui.Dumpable
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionListener
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.phone.SystemUIDialogManager
import com.android.systemui.util.ViewController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import java.io.PrintWriter

/**
@@ -41,7 +48,7 @@ import java.io.PrintWriter
abstract class UdfpsAnimationViewController<T : UdfpsAnimationView>(
    view: T,
    protected val statusBarStateController: StatusBarStateController,
    protected val shadeExpansionStateManager: ShadeExpansionStateManager,
    protected val primaryBouncerInteractor: PrimaryBouncerInteractor,
    protected val dialogManager: SystemUIDialogManager,
    private val dumpManager: DumpManager
) : ViewController<T>(view), Dumpable {
@@ -54,14 +61,6 @@ abstract class UdfpsAnimationViewController<T : UdfpsAnimationView>(
    private var dialogAlphaAnimator: ValueAnimator? = null
    private val dialogListener = SystemUIDialogManager.Listener { runDialogAlphaAnimator() }

    private val shadeExpansionListener = ShadeExpansionListener { event ->
        // Notification shade can be expanded but not visible (fraction: 0.0), for example
        // when a heads-up notification (HUN) is showing.
        notificationShadeVisible = event.expanded && event.fraction > 0f
        view.onExpansionChanged(event.fraction)
        updatePauseAuth()
    }

    /** If the notification shade is visible. */
    var notificationShadeVisible: Boolean = false

@@ -88,6 +87,28 @@ abstract class UdfpsAnimationViewController<T : UdfpsAnimationView>(
        view.updateAlpha()
    }

    init {
        view.repeatWhenAttached {
            // repeatOnLifecycle CREATED (as opposed to STARTED) because the Bouncer expansion
            // can make the view not visible; and we still want to listen for events
            // that may make the view visible again.
            repeatOnLifecycle(Lifecycle.State.CREATED) {
                listenForBouncerExpansion(this)
            }
        }
    }

    @VisibleForTesting
    open suspend fun listenForBouncerExpansion(scope: CoroutineScope): Job {
        return scope.launch {
            primaryBouncerInteractor.bouncerExpansion.map { 1f - it }.collect { expansion: Float ->
                notificationShadeVisible = expansion > 0f
                view.onExpansionChanged(expansion)
                updatePauseAuth()
            }
        }
    }

    fun runDialogAlphaAnimator() {
        val hideAffordance = dialogManager.shouldHideAffordance()
        dialogAlphaAnimator?.cancel()
@@ -108,15 +129,11 @@ abstract class UdfpsAnimationViewController<T : UdfpsAnimationView>(
    }

    override fun onViewAttached() {
        val currentState =
            shadeExpansionStateManager.addExpansionListener(shadeExpansionListener)
        shadeExpansionListener.onPanelExpansionChanged(currentState)
        dialogManager.registerListener(dialogListener)
        dumpManager.registerDumpable(dumpTag, this)
    }

    override fun onViewDetached() {
        shadeExpansionStateManager.removeExpansionListener(shadeExpansionListener)
        dialogManager.unregisterListener(dialogListener)
        dumpManager.unregisterDumpable(dumpTag)
    }
+3 −3
Original line number Diff line number Diff line
@@ -15,9 +15,9 @@
 */
package com.android.systemui.biometrics

import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.phone.SystemUIDialogManager

/**
@@ -26,13 +26,13 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager
class UdfpsBpViewController(
    view: UdfpsBpView,
    statusBarStateController: StatusBarStateController,
    shadeExpansionStateManager: ShadeExpansionStateManager,
    primaryBouncerInteractor: PrimaryBouncerInteractor,
    systemUIDialogManager: SystemUIDialogManager,
    dumpManager: DumpManager
) : UdfpsAnimationViewController<UdfpsBpView>(
    view,
    statusBarStateController,
    shadeExpansionStateManager,
    primaryBouncerInteractor,
    systemUIDialogManager,
    dumpManager
) {
+36 −18
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_
import static android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_KEYGUARD;
import static android.hardware.biometrics.BiometricOverlayConstants.REASON_ENROLL_ENROLLING;
import static android.hardware.biometrics.BiometricOverlayConstants.REASON_ENROLL_FIND_SENSOR;

import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION;
import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION;
@@ -60,6 +59,7 @@ import android.view.accessibility.AccessibilityManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
@@ -92,7 +92,6 @@ import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.VibratorHelper;
@@ -118,6 +117,7 @@ import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Provider;

import kotlinx.coroutines.ExperimentalCoroutinesApi;
/**
 * Shows and hides the under-display fingerprint sensor (UDFPS) overlay, handles UDFPS touch events,
 * and toggles the UDFPS display mode.
@@ -149,7 +149,6 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    private final WindowManager mWindowManager;
    private final DelayableExecutor mFgExecutor;
    @NonNull private final Executor mBiometricExecutor;
    @NonNull private final ShadeExpansionStateManager mShadeExpansionStateManager;
    @NonNull private final StatusBarStateController mStatusBarStateController;
    @NonNull private final KeyguardStateController mKeyguardStateController;
    @NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
@@ -264,23 +263,44 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    }

    public class UdfpsOverlayController extends IUdfpsOverlayController.Stub {
        @OptIn(markerClass = ExperimentalCoroutinesApi.class)
        @Override
        public void showUdfpsOverlay(long requestId, int sensorId, int reason,
                @NonNull IUdfpsOverlayControllerCallback callback) {
            mFgExecutor.execute(() -> UdfpsController.this.showUdfpsOverlay(
                    new UdfpsControllerOverlay(mContext, mFingerprintManager, mInflater,
                            mWindowManager, mAccessibilityManager, mStatusBarStateController,
                            mShadeExpansionStateManager, mKeyguardViewManager,
                            mKeyguardUpdateMonitor, mDialogManager, mDumpManager,
                            mLockscreenShadeTransitionController, mConfigurationController,
                    new UdfpsControllerOverlay(
                        mContext,
                        mFingerprintManager,
                        mInflater,
                        mWindowManager,
                        mAccessibilityManager,
                        mStatusBarStateController,
                        mKeyguardViewManager,
                        mKeyguardUpdateMonitor,
                        mDialogManager,
                        mDumpManager,
                        mLockscreenShadeTransitionController,
                        mConfigurationController,
                        mKeyguardStateController,
                        mUnlockedScreenOffAnimationController,
                            mUdfpsDisplayMode, mSecureSettings, requestId, reason, callback,
                            (view, event, fromUdfpsView) -> onTouch(requestId, event,
                                    fromUdfpsView), mActivityLaunchAnimator, mFeatureFlags,
                            mPrimaryBouncerInteractor, mAlternateBouncerInteractor, mUdfpsUtils,
                        mUdfpsDisplayMode,
                        mSecureSettings,
                        requestId,
                        reason,
                        callback,
                        (view, event, fromUdfpsView) -> onTouch(
                            requestId,
                            event,
                            fromUdfpsView
                        ),
                        mActivityLaunchAnimator,
                        mFeatureFlags,
                        mPrimaryBouncerInteractor,
                        mAlternateBouncerInteractor,
                        mUdfpsUtils,
                        mUdfpsKeyguardAccessibilityDelegate,
                            mUdfpsKeyguardViewModels)));
                        mUdfpsKeyguardViewModels
                    )));
        }

        @Override
@@ -814,7 +834,6 @@ public class UdfpsController implements DozeReceiver, Dumpable {
            @NonNull WindowManager windowManager,
            @NonNull StatusBarStateController statusBarStateController,
            @Main DelayableExecutor fgExecutor,
            @NonNull ShadeExpansionStateManager shadeExpansionStateManager,
            @NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
            @NonNull DumpManager dumpManager,
            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -859,7 +878,6 @@ public class UdfpsController implements DozeReceiver, Dumpable {
        mFingerprintManager = checkNotNull(fingerprintManager);
        mWindowManager = windowManager;
        mFgExecutor = fgExecutor;
        mShadeExpansionStateManager = shadeExpansionStateManager;
        mStatusBarStateController = statusBarStateController;
        mKeyguardStateController = keyguardStateController;
        mKeyguardViewManager = statusBarKeyguardViewManager;
+4 −7
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ import com.android.systemui.flags.Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS
import com.android.systemui.keyguard.ui.adapter.UdfpsKeyguardViewControllerAdapter
import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.LockscreenShadeTransitionController
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.phone.SystemUIDialogManager
@@ -90,7 +89,6 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
        private val windowManager: WindowManager,
        private val accessibilityManager: AccessibilityManager,
        private val statusBarStateController: StatusBarStateController,
        private val shadeExpansionStateManager: ShadeExpansionStateManager,
        private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager,
        private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
        private val dialogManager: SystemUIDialogManager,
@@ -245,7 +243,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                        updateAccessibilityViewLocation(sensorBounds)
                    },
                    statusBarStateController,
                    shadeExpansionStateManager,
                    primaryBouncerInteractor,
                    dialogManager,
                    dumpManager
                )
@@ -256,7 +254,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                    UdfpsKeyguardViewController(
                        view.addUdfpsView(R.layout.udfps_keyguard_view),
                        statusBarStateController,
                        shadeExpansionStateManager,
                        primaryBouncerInteractor,
                        dialogManager,
                        dumpManager,
                        alternateBouncerInteractor,
@@ -268,7 +266,6 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                            updateSensorLocation(sensorBounds)
                        },
                        statusBarStateController,
                        shadeExpansionStateManager,
                        statusBarKeyguardViewManager,
                        keyguardUpdateMonitor,
                        dumpManager,
@@ -291,7 +288,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                UdfpsBpViewController(
                    view.addUdfpsView(R.layout.udfps_bp_view),
                    statusBarStateController,
                    shadeExpansionStateManager,
                    primaryBouncerInteractor,
                    dialogManager,
                    dumpManager
                )
@@ -301,7 +298,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                UdfpsFpmEmptyViewController(
                    view.addUdfpsView(R.layout.udfps_fpm_empty_view),
                    statusBarStateController,
                    shadeExpansionStateManager,
                    primaryBouncerInteractor,
                    dialogManager,
                    dumpManager
                )
+3 −3
Original line number Diff line number Diff line
@@ -15,9 +15,9 @@
 */
package com.android.systemui.biometrics

import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.phone.SystemUIDialogManager

/**
@@ -28,13 +28,13 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager
class UdfpsFpmEmptyViewController(
    view: UdfpsFpmEmptyView,
    statusBarStateController: StatusBarStateController,
    shadeExpansionStateManager: ShadeExpansionStateManager,
    primaryBouncerInteractor: PrimaryBouncerInteractor,
    systemUIDialogManager: SystemUIDialogManager,
    dumpManager: DumpManager
) : UdfpsAnimationViewController<UdfpsFpmEmptyView>(
    view,
    statusBarStateController,
    shadeExpansionStateManager,
    primaryBouncerInteractor,
    systemUIDialogManager,
    dumpManager
) {
Loading