[CS] Add NoopDeviceEntryFaceAuthRepository.

This is a precursor to ag/23672734, which makes
NotificationStackScrollLayoutController (NSSLC) a singleton.

NSSLC has DeviceEntryFaceAuthRepository as a transitive dependency
(NSSLC injects Optional<NotificationListVM>, which injects
NotificationShelfVM, which injects NotificationShelfInteractor, which
injects DeviceEntryFaceAuthRepository).

Previously, NotificationStackScrollLayoutController and its dependencies
were part of CentralSurfacesComponent, which was only created by
CentralSurfacesImpl which already had DeviceEntryFaceAuthRepository.
Making NSSLC a singleton requires moving those dependencies into
NotificationsModule, which is included in more than just
CentralSurfacesImpl -- specifically, the ARC project.

ARC currently doesn't provide any implementation of
DeviceEntryFaceAuthRepository. By adding this no-op implementation, ARC
can provide that dependency (ARC already includes the
KeyguardFaceAuthNotSupportedModule).

Bug: 277762009
Test: compiles
Change-Id: I68f9db9ed27c99109cab55a66fa3d9d3b7bb27c2
This commit is contained in:
Caitlin Shkuratov
2023-06-16 14:39:20 +00:00
parent 6f4622fdb7
commit 80c14a30f2
2 changed files with 78 additions and 0 deletions

View File

@@ -16,6 +16,8 @@
package com.android.systemui.keyguard.dagger
import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.NoopDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor
import com.android.systemui.keyguard.domain.interactor.NoopKeyguardFaceAuthInteractor
import dagger.Binds
@@ -32,4 +34,9 @@ import dagger.Module
interface KeyguardFaceAuthNotSupportedModule {
@Binds
fun keyguardFaceAuthInteractor(impl: NoopKeyguardFaceAuthInteractor): KeyguardFaceAuthInteractor
@Binds
fun deviceEntryFaceAuthRepository(
impl: NoopDeviceEntryFaceAuthRepository
): DeviceEntryFaceAuthRepository
}

View File

@@ -0,0 +1,71 @@
/*
* 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.keyguard.data.repository
import com.android.keyguard.FaceAuthUiEvent
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.shared.model.AuthenticationStatus
import com.android.systemui.keyguard.shared.model.DetectionStatus
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.emptyFlow
/**
* Implementation of the repository that noops all face auth operations.
*
* This is required for SystemUI variants that do not support face authentication but still inject
* other SysUI components that depend on [DeviceEntryFaceAuthRepository].
*/
@SysUISingleton
class NoopDeviceEntryFaceAuthRepository @Inject constructor() : DeviceEntryFaceAuthRepository {
override val isAuthenticated: Flow<Boolean>
get() = emptyFlow()
private val _canRunFaceAuth = MutableStateFlow(false)
override val canRunFaceAuth: StateFlow<Boolean> = _canRunFaceAuth
override val authenticationStatus: Flow<AuthenticationStatus>
get() = emptyFlow()
override val detectionStatus: Flow<DetectionStatus>
get() = emptyFlow()
private val _isLockedOut = MutableStateFlow(false)
override val isLockedOut: StateFlow<Boolean> = _isLockedOut
private val _isAuthRunning = MutableStateFlow(false)
override val isAuthRunning: StateFlow<Boolean> = _isAuthRunning
override val isBypassEnabled: Flow<Boolean>
get() = emptyFlow()
/**
* Trigger face authentication.
*
* [uiEvent] provided should be logged whenever face authentication runs. Invocation should be
* ignored if face authentication is already running. Results should be propagated through
* [authenticationStatus]
*
* Run only face detection when [fallbackToDetection] is true and [canRunFaceAuth] is false.
*/
override suspend fun authenticate(uiEvent: FaceAuthUiEvent, fallbackToDetection: Boolean) {}
/** Stop currently running face authentication or detection. */
override fun cancel() {}
}