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

Commit 9bcb8f18 authored by Beverly Tai's avatar Beverly Tai Committed by Automerger Merge Worker
Browse files

Merge "Immediately stop running face auth if the display is OFF" into...

Merge "Immediately stop running face auth if the display is OFF" into udc-qpr-dev am: c507b7de am: 301604bb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24295108



Change-Id: I891f5e731851d3fc1874e6b36943511e9832608f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 665251b0 301604bb
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -38,4 +38,6 @@
         protected. -->
         protected. -->
    <bool name="flag_battery_shield_icon">false</bool>
    <bool name="flag_battery_shield_icon">false</bool>


    <!-- Whether face auth will immediately stop when the display state is OFF -->
    <bool name="flag_stop_face_auth_on_display_off">false</bool>
</resources>
</resources>
+4 −1
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.keyguard.InternalFaceAuthReasons.AUTH_REQUEST_DURING_CANCELLA
import com.android.keyguard.InternalFaceAuthReasons.BIOMETRIC_ENABLED
import com.android.keyguard.InternalFaceAuthReasons.BIOMETRIC_ENABLED
import com.android.keyguard.InternalFaceAuthReasons.CAMERA_LAUNCHED
import com.android.keyguard.InternalFaceAuthReasons.CAMERA_LAUNCHED
import com.android.keyguard.InternalFaceAuthReasons.DEVICE_WOKEN_UP_ON_REACH_GESTURE
import com.android.keyguard.InternalFaceAuthReasons.DEVICE_WOKEN_UP_ON_REACH_GESTURE
import com.android.keyguard.InternalFaceAuthReasons.DISPLAY_OFF
import com.android.keyguard.InternalFaceAuthReasons.DREAM_STARTED
import com.android.keyguard.InternalFaceAuthReasons.DREAM_STARTED
import com.android.keyguard.InternalFaceAuthReasons.DREAM_STOPPED
import com.android.keyguard.InternalFaceAuthReasons.DREAM_STOPPED
import com.android.keyguard.InternalFaceAuthReasons.ENROLLMENTS_CHANGED
import com.android.keyguard.InternalFaceAuthReasons.ENROLLMENTS_CHANGED
@@ -131,6 +132,7 @@ private object InternalFaceAuthReasons {
    const val NON_STRONG_BIOMETRIC_ALLOWED_CHANGED =
    const val NON_STRONG_BIOMETRIC_ALLOWED_CHANGED =
        "Face auth stopped because non strong biometric allowed changed"
        "Face auth stopped because non strong biometric allowed changed"
    const val POSTURE_CHANGED = "Face auth started/stopped due to device posture changed."
    const val POSTURE_CHANGED = "Face auth started/stopped due to device posture changed."
    const val DISPLAY_OFF = "Face auth stopped due to display state OFF."
}
}


/**
/**
@@ -221,7 +223,8 @@ constructor(private val id: Int, val reason: String, var extraInfo: Int = 0) :
    FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED(1255, STRONG_AUTH_ALLOWED_CHANGED),
    FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED(1255, STRONG_AUTH_ALLOWED_CHANGED),
    @UiEvent(doc = NON_STRONG_BIOMETRIC_ALLOWED_CHANGED)
    @UiEvent(doc = NON_STRONG_BIOMETRIC_ALLOWED_CHANGED)
    FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED(1256, NON_STRONG_BIOMETRIC_ALLOWED_CHANGED),
    FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED(1256, NON_STRONG_BIOMETRIC_ALLOWED_CHANGED),
    @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION);
    @UiEvent(doc = ACCESSIBILITY_ACTION) FACE_AUTH_ACCESSIBILITY_ACTION(1454, ACCESSIBILITY_ACTION),
    @UiEvent(doc = DISPLAY_OFF) FACE_AUTH_DISPLAY_OFF(1461, DISPLAY_OFF);


    override fun getId(): Int = this.id
    override fun getId(): Int = this.id


+7 −3
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ data class KeyguardFaceListenModel(
    override var userId: Int = 0,
    override var userId: Int = 0,
    override var listening: Boolean = false,
    override var listening: Boolean = false,
    // keep sorted
    // keep sorted
    var allowedDisplayState: Boolean = false,
    var alternateBouncerShowing: Boolean = false,
    var alternateBouncerShowing: Boolean = false,
    var authInterruptActive: Boolean = false,
    var authInterruptActive: Boolean = false,
    var biometricSettingEnabledForUser: Boolean = false,
    var biometricSettingEnabledForUser: Boolean = false,
@@ -57,6 +58,8 @@ data class KeyguardFaceListenModel(
            userId.toString(),
            userId.toString(),
            listening.toString(),
            listening.toString(),
            // keep sorted
            // keep sorted
            allowedDisplayState.toString(),
            alternateBouncerShowing.toString(),
            authInterruptActive.toString(),
            authInterruptActive.toString(),
            biometricSettingEnabledForUser.toString(),
            biometricSettingEnabledForUser.toString(),
            bouncerFullyShown.toString(),
            bouncerFullyShown.toString(),
@@ -74,7 +77,6 @@ data class KeyguardFaceListenModel(
            supportsDetect.toString(),
            supportsDetect.toString(),
            switchingUser.toString(),
            switchingUser.toString(),
            systemUser.toString(),
            systemUser.toString(),
            alternateBouncerShowing.toString(),
            udfpsFingerDown.toString(),
            udfpsFingerDown.toString(),
            userNotTrustedOrDetectionIsNeeded.toString(),
            userNotTrustedOrDetectionIsNeeded.toString(),
        )
        )
@@ -96,7 +98,9 @@ data class KeyguardFaceListenModel(
                userId = model.userId
                userId = model.userId
                listening = model.listening
                listening = model.listening
                // keep sorted
                // keep sorted
                allowedDisplayState = model.allowedDisplayState
                alternateBouncerShowing = model.alternateBouncerShowing
                alternateBouncerShowing = model.alternateBouncerShowing
                authInterruptActive = model.authInterruptActive
                biometricSettingEnabledForUser = model.biometricSettingEnabledForUser
                biometricSettingEnabledForUser = model.biometricSettingEnabledForUser
                bouncerFullyShown = model.bouncerFullyShown
                bouncerFullyShown = model.bouncerFullyShown
                faceAndFpNotAuthenticated = model.faceAndFpNotAuthenticated
                faceAndFpNotAuthenticated = model.faceAndFpNotAuthenticated
@@ -105,7 +109,6 @@ data class KeyguardFaceListenModel(
                faceLockedOut = model.faceLockedOut
                faceLockedOut = model.faceLockedOut
                goingToSleep = model.goingToSleep
                goingToSleep = model.goingToSleep
                keyguardAwake = model.keyguardAwake
                keyguardAwake = model.keyguardAwake
                goingToSleep = model.goingToSleep
                keyguardGoingAway = model.keyguardGoingAway
                keyguardGoingAway = model.keyguardGoingAway
                listeningForFaceAssistant = model.listeningForFaceAssistant
                listeningForFaceAssistant = model.listeningForFaceAssistant
                occludingAppRequestingFaceAuth = model.occludingAppRequestingFaceAuth
                occludingAppRequestingFaceAuth = model.occludingAppRequestingFaceAuth
@@ -140,6 +143,8 @@ data class KeyguardFaceListenModel(
                "userId",
                "userId",
                "listening",
                "listening",
                // keep sorted
                // keep sorted
                "allowedDisplayState",
                "alternateBouncerShowing",
                "authInterruptActive",
                "authInterruptActive",
                "biometricSettingEnabledForUser",
                "biometricSettingEnabledForUser",
                "bouncerFullyShown",
                "bouncerFullyShown",
@@ -157,7 +162,6 @@ data class KeyguardFaceListenModel(
                "supportsDetect",
                "supportsDetect",
                "switchingUser",
                "switchingUser",
                "systemUser",
                "systemUser",
                "udfpsBouncerShowing",
                "udfpsFingerDown",
                "udfpsFingerDown",
                "userNotTrustedOrDetectionIsNeeded",
                "userNotTrustedOrDetectionIsNeeded",
            )
            )
+35 −2
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STR
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.keyguard.FaceAuthReasonKt.apiRequestReasonToUiEvent;
import static com.android.keyguard.FaceAuthReasonKt.apiRequestReasonToUiEvent;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_DISPLAY_OFF;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_NON_STRONG_BIOMETRIC_ALLOWED_CHANGED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_DREAM_STARTED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_DREAM_STARTED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED;
@@ -135,6 +136,7 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseBooleanArray;
import android.view.Display;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Nullable;
@@ -175,6 +177,7 @@ import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.WeatherData;
import com.android.systemui.plugins.WeatherData;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners;
import com.android.systemui.shared.system.TaskStackChangeListeners;
@@ -335,6 +338,25 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            }
            }
        }
        }
    };
    };
    private final DisplayTracker.Callback mDisplayCallback = new DisplayTracker.Callback() {
        @Override
        public void onDisplayChanged(int displayId) {
            if (displayId != Display.DEFAULT_DISPLAY) {
                return;
            }

            if (mDisplayTracker.getDisplay(mDisplayTracker.getDefaultDisplayId()).getState()
                    == Display.STATE_OFF) {
                mAllowedDisplayStateForFaceAuth = false;
                updateFaceListeningState(
                        BIOMETRIC_ACTION_STOP,
                        FACE_AUTH_DISPLAY_OFF
                );
            } else {
                mAllowedDisplayStateForFaceAuth = true;
            }
        }
    };
    private final FaceWakeUpTriggersConfig mFaceWakeUpTriggersConfig;
    private final FaceWakeUpTriggersConfig mFaceWakeUpTriggersConfig;


    HashMap<Integer, SimData> mSimDatas = new HashMap<>();
    HashMap<Integer, SimData> mSimDatas = new HashMap<>();
@@ -355,6 +377,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private boolean mOccludingAppRequestingFp;
    private boolean mOccludingAppRequestingFp;
    private boolean mOccludingAppRequestingFace;
    private boolean mOccludingAppRequestingFace;
    private boolean mSecureCameraLaunched;
    private boolean mSecureCameraLaunched;
    private boolean mAllowedDisplayStateForFaceAuth = true;
    @VisibleForTesting
    @VisibleForTesting
    protected boolean mTelephonyCapable;
    protected boolean mTelephonyCapable;
    private boolean mAllowFingerprintOnCurrentOccludingActivity;
    private boolean mAllowFingerprintOnCurrentOccludingActivity;
@@ -403,6 +426,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private KeyguardFaceAuthInteractor mFaceAuthInteractor;
    private KeyguardFaceAuthInteractor mFaceAuthInteractor;
    private final TaskStackChangeListeners mTaskStackChangeListeners;
    private final TaskStackChangeListeners mTaskStackChangeListeners;
    private final IActivityTaskManager mActivityTaskManager;
    private final IActivityTaskManager mActivityTaskManager;
    private final DisplayTracker mDisplayTracker;
    private final LockPatternUtils mLockPatternUtils;
    private final LockPatternUtils mLockPatternUtils;
    @VisibleForTesting
    @VisibleForTesting
    @DevicePostureInt
    @DevicePostureInt
@@ -2187,6 +2211,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp");
        Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp");
        Assert.isMainThread();
        Assert.isMainThread();


        mAllowedDisplayStateForFaceAuth = true;
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
        if (mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(pmWakeReason)) {
        if (mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(pmWakeReason)) {
            FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason);
            FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason);
@@ -2342,7 +2367,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider,
            Optional<FingerprintInteractiveToAuthProvider> interactiveToAuthProvider,
            FeatureFlags featureFlags,
            FeatureFlags featureFlags,
            TaskStackChangeListeners taskStackChangeListeners,
            TaskStackChangeListeners taskStackChangeListeners,
            IActivityTaskManager activityTaskManagerService) {
            IActivityTaskManager activityTaskManagerService,
            DisplayTracker displayTracker) {
        mContext = context;
        mContext = context;
        mSubscriptionManager = subscriptionManager;
        mSubscriptionManager = subscriptionManager;
        mUserTracker = userTracker;
        mUserTracker = userTracker;
@@ -2390,6 +2416,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                .collect(Collectors.toSet());
                .collect(Collectors.toSet());
        mTaskStackChangeListeners = taskStackChangeListeners;
        mTaskStackChangeListeners = taskStackChangeListeners;
        mActivityTaskManager = activityTaskManagerService;
        mActivityTaskManager = activityTaskManagerService;
        mDisplayTracker = displayTracker;
        if (mFeatureFlags.isEnabled(Flags.STOP_FACE_AUTH_ON_DISPLAY_OFF)) {
            mDisplayTracker.addDisplayChangeCallback(mDisplayCallback, mainExecutor);
        }


        mHandler = new Handler(mainLooper) {
        mHandler = new Handler(mainLooper) {
            @Override
            @Override
@@ -3199,7 +3229,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                && (!mSecureCameraLaunched || mAlternateBouncerShowing)
                && (!mSecureCameraLaunched || mAlternateBouncerShowing)
                && faceAndFpNotAuthenticated
                && faceAndFpNotAuthenticated
                && !mGoingToSleep
                && !mGoingToSleep
                && isPostureAllowedForFaceAuth;
                && isPostureAllowedForFaceAuth
                && mAllowedDisplayStateForFaceAuth;


        // Aggregate relevant fields for debug logging.
        // Aggregate relevant fields for debug logging.
        logListenerModelData(
        logListenerModelData(
@@ -3207,6 +3238,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                    System.currentTimeMillis(),
                    System.currentTimeMillis(),
                    user,
                    user,
                    shouldListen,
                    shouldListen,
                    mAllowedDisplayStateForFaceAuth,
                    mAlternateBouncerShowing,
                    mAlternateBouncerShowing,
                    mAuthInterruptActive,
                    mAuthInterruptActive,
                    biometricEnabledForUser,
                    biometricEnabledForUser,
@@ -4400,6 +4432,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab


        mLockPatternUtils.unregisterStrongAuthTracker(mStrongAuthTracker);
        mLockPatternUtils.unregisterStrongAuthTracker(mStrongAuthTracker);
        mTrustManager.unregisterTrustListener(this);
        mTrustManager.unregisterTrustListener(this);
        mDisplayTracker.removeCallback(mDisplayCallback);


        mHandler.removeCallbacksAndMessages(null);
        mHandler.removeCallbacksAndMessages(null);
    }
    }
+5 −0
Original line number Original line Diff line number Diff line
@@ -290,6 +290,11 @@ object Flags {
                teamfood = true
                teamfood = true
            )
            )


    /** Stop running face auth when the display state changes to OFF. */
    // TODO(b/294221702): Tracking bug.
    @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(245,
            R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off")

    // 300 - power menu
    // 300 - power menu
    // TODO(b/254512600): Tracking Bug
    // TODO(b/254512600): Tracking Bug
    @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite")
    @JvmField val POWER_MENU_LITE = releasedFlag(300, "power_menu_lite")
Loading