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

Commit 4eb430b7 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Add data layer for the DeviceEntryIcon" into main

parents bad60b8d 1ba67b49
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