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

Commit 1ba67b49 authored by Beverly's avatar Beverly
Browse files

Add data layer for the DeviceEntryIcon

Adds support for:
  - AOD burnInOffsets
  - Current device entry state (locked/unlocked/listening for udfps)
  - Alpha changes based on transitions (except for AlternateBouncer)
  and shade/bouncer expansion

Does not yet handle:
  - UDFPS transition between AOD <=> LS (motion is missing)
  - AlternateBouncer UI, including alternate bouncer transitions
  - Sending UDFPS state to FingerprintManager
  - AuthRipple animation playing on icon longpress (if unlocked & udfps
    supported)

Removes two <>TransitionViewModelTests from the robo tests config
temporarily.

Flag: LEGACY REFACTOR_UDFPS_KEYGUARD_VIEWS DISABLED
Test: atest DeviceEntryUdfpsInteractorTest DeviceEntryStatusInteractorTest
Test: atest AodToGoneTransitionViewModelTest AodToLockscreenTransitionViewModelTest AodToOccludedTransitionViewModelTest DozingToLockscreenTransitionViewModelTest DreamingToLockscreenTransitionViewModelTest GoneToAodTransitionViewModelTest LockscreenToAodTransitionViewModelTest LockscreenToDreamingTransitionViewModelTest LockscreenToGoneTransitionViewModelTest LockscreenToOccludedTransitionViewModelTest LockscreenToPrimaryBouncerTransitionViewModelTest OccludedToLockscreenTransitionViewModelTest OccludedToAodTransitionViewModelTest PrimaryBouncerToAodTransitionViewModelTest PrimaryBouncerToLockscreenTransitionViewModelTest
Bug: 305234447

Change-Id: I2489562301e565c1dd7843a34fcfaa7db6e18c3a
parent 71f14180
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -294,8 +294,6 @@ filegroup {
        "tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/GoneToDreamingTransitionViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt",
        "tests/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToGoneTransitionViewModelTest.kt",
        // Keyguard helper
+5 −1
Original line number Diff line number Diff line
@@ -25,7 +25,11 @@ enum class FingerprintSensorType {
    UDFPS_ULTRASONIC,
    UDFPS_OPTICAL,
    POWER_BUTTON,
    HOME_BUTTON
    HOME_BUTTON;

    fun isUdfps(): Boolean {
        return (this == UDFPS_OPTICAL) || (this == UDFPS_ULTRASONIC)
    }
}

/** Convert [this] to corresponding [FingerprintSensorType] */
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
@@ -46,6 +47,7 @@ import kotlinx.coroutines.launch
 * Device entry occurs when the user successfully dismisses (or bypasses) the lockscreen, regardless
 * of the authentication method used.
 */
@ExperimentalCoroutinesApi
@SysUISingleton
class DeviceEntryInteractor
@Inject
+62 −0
Original line number Diff line number Diff line
/*
 * 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.deviceentry.domain.interactor

import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
import javax.inject.Inject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map

/** Encapsulates business logic for device entry under-display fingerprint state changes. */
@ExperimentalCoroutinesApi
@SysUISingleton
class DeviceEntryUdfpsInteractor
@Inject
constructor(
    // TODO (b/309655554): create & use interactors for these repositories
    fingerprintPropertyRepository: FingerprintPropertyRepository,
    fingerprintAuthRepository: DeviceEntryFingerprintAuthRepository,
    biometricSettingsRepository: BiometricSettingsRepository,
) {
    /** Whether the device supports an under display fingerprint sensor. */
    val isUdfpsSupported: Flow<Boolean> =
        fingerprintPropertyRepository.sensorType.map { it.isUdfps() }

    /** Whether the under-display fingerprint sensor is enrolled and enabled for device entry. */
    val isUdfpsEnrolledAndEnabled: Flow<Boolean> =
        combine(isUdfpsSupported, biometricSettingsRepository.isFingerprintEnrolledAndEnabled) {
            udfps,
            fpEnrolledAndEnabled ->
            udfps && fpEnrolledAndEnabled
        }
    /** Whether the under display fingerprint sensor is currently running. */
    val isListeningForUdfps =
        isUdfpsSupported.flatMapLatest { isUdfps ->
            if (isUdfps) {
                fingerprintAuthRepository.isRunning
            } else {
                flowOf(false)
            }
        }
}
+2 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionModule;
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger;
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl;
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransitionModule;
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.navigationbar.NavigationModeController;
@@ -94,6 +95,7 @@ import kotlinx.coroutines.CoroutineDispatcher;
        KeyguardStatusViewComponent.class,
        KeyguardUserSwitcherComponent.class},
        includes = {
            DeviceEntryIconTransitionModule.class,
            FalsingModule.class,
            KeyguardDataQuickAffordanceModule.class,
            KeyguardRepositoryModule.class,
Loading