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