1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.biometrics.dagger
18 
19 import com.android.settingslib.udfps.UdfpsUtils
20 import com.android.systemui.biometrics.data.repository.FacePropertyRepository
21 import com.android.systemui.biometrics.data.repository.FacePropertyRepositoryImpl
22 import com.android.systemui.biometrics.data.repository.FaceSettingsRepository
23 import com.android.systemui.biometrics.data.repository.FaceSettingsRepositoryImpl
24 import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository
25 import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepositoryImpl
26 import com.android.systemui.biometrics.data.repository.PromptRepository
27 import com.android.systemui.biometrics.data.repository.PromptRepositoryImpl
28 import com.android.systemui.biometrics.data.repository.DisplayStateRepository
29 import com.android.systemui.biometrics.data.repository.DisplayStateRepositoryImpl
30 import com.android.systemui.biometrics.domain.interactor.CredentialInteractor
31 import com.android.systemui.biometrics.domain.interactor.CredentialInteractorImpl
32 import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor
33 import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractorImpl
34 import com.android.systemui.biometrics.domain.interactor.LogContextInteractor
35 import com.android.systemui.biometrics.domain.interactor.LogContextInteractorImpl
36 import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractor
37 import com.android.systemui.biometrics.domain.interactor.SideFpsOverlayInteractorImpl
38 import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor
39 import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractorImpl
40 import com.android.systemui.dagger.SysUISingleton
41 import com.android.systemui.util.concurrency.ThreadFactory
42 import dagger.Binds
43 import dagger.Module
44 import dagger.Provides
45 import java.util.concurrent.Executor
46 import javax.inject.Qualifier
47 
48 /** Dagger module for all things biometric. */
49 @Module
50 interface BiometricsModule {
51 
52     @Binds
53     @SysUISingleton
54     fun faceSettings(impl: FaceSettingsRepositoryImpl): FaceSettingsRepository
55 
56     @Binds
57     @SysUISingleton
58     fun faceSensors(impl: FacePropertyRepositoryImpl): FacePropertyRepository
59 
60     @Binds
61     @SysUISingleton
62     fun biometricPromptRepository(impl: PromptRepositoryImpl): PromptRepository
63 
64     @Binds
65     @SysUISingleton
66     fun fingerprintRepository(impl: FingerprintPropertyRepositoryImpl):
67             FingerprintPropertyRepository
68 
69     @Binds
70     @SysUISingleton
71     fun displayStateRepository(impl: DisplayStateRepositoryImpl): DisplayStateRepository
72 
73     @Binds
74     @SysUISingleton
75     fun providesPromptSelectorInteractor(impl: PromptSelectorInteractorImpl):
76             PromptSelectorInteractor
77 
78     @Binds
79     @SysUISingleton
80     fun providesCredentialInteractor(impl: CredentialInteractorImpl): CredentialInteractor
81 
82     @Binds
83     @SysUISingleton
84     fun providesDisplayStateInteractor(impl: DisplayStateInteractorImpl): DisplayStateInteractor
85 
86     @Binds
87     @SysUISingleton
88     fun bindsLogContextInteractor(impl: LogContextInteractorImpl): LogContextInteractor
89 
90     @Binds
91     @SysUISingleton
92     fun providesSideFpsOverlayInteractor(impl: SideFpsOverlayInteractorImpl):
93             SideFpsOverlayInteractor
94 
95     companion object {
96         /** Background [Executor] for HAL related operations. */
97         @Provides
98         @SysUISingleton
99         @JvmStatic
100         @BiometricsBackground
101         fun providesPluginExecutor(threadFactory: ThreadFactory): Executor =
102             threadFactory.buildExecutorOnNewThread("biometrics")
103 
104         @Provides
105         fun providesUdfpsUtils(): UdfpsUtils = UdfpsUtils()
106     }
107 }
108 
109 /**
110  * Background executor for HAL operations that are latency sensitive but too slow to run on the main
111  * thread. Prefer the shared executors, such as [com.android.systemui.dagger.qualifiers.Background]
112  * when a HAL is not directly involved.
113  */
114 @Qualifier
115 @MustBeDocumented
116 @Retention(AnnotationRetention.RUNTIME)
117 annotation class BiometricsBackground
118