blob: 8ae6f87f4f8316066560addfc3be534edc63758d [file] [log] [blame]
/*
* Copyright (C) 2021 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.biometrics.dagger
import android.content.res.Resources
import com.android.internal.R
import com.android.systemui.CoreStartable
import com.android.systemui.biometrics.EllipseOverlapDetectorParams
import com.android.systemui.biometrics.UdfpsUtils
import com.android.systemui.biometrics.data.repository.BiometricStatusRepository
import com.android.systemui.biometrics.data.repository.BiometricStatusRepositoryImpl
import com.android.systemui.biometrics.data.repository.DisplayStateRepository
import com.android.systemui.biometrics.data.repository.DisplayStateRepositoryImpl
import com.android.systemui.biometrics.data.repository.FacePropertyRepository
import com.android.systemui.biometrics.data.repository.FacePropertyRepositoryImpl
import com.android.systemui.biometrics.data.repository.FaceSettingsRepository
import com.android.systemui.biometrics.data.repository.FaceSettingsRepositoryImpl
import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository
import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepositoryImpl
import com.android.systemui.biometrics.data.repository.PromptRepository
import com.android.systemui.biometrics.data.repository.PromptRepositoryImpl
import com.android.systemui.biometrics.udfps.BoundingBoxOverlapDetector
import com.android.systemui.biometrics.udfps.EllipseOverlapDetector
import com.android.systemui.biometrics.udfps.OverlapDetector
import com.android.systemui.biometrics.ui.binder.SideFpsOverlayViewBinder
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.util.concurrency.ThreadFactory
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import java.util.concurrent.Executor
import javax.inject.Qualifier
/** Dagger module for all things biometric. */
@Module
interface BiometricsModule {
@Binds
@IntoMap
@ClassKey(SideFpsOverlayViewBinder::class)
fun bindsSideFpsOverlayViewBinder(viewBinder: SideFpsOverlayViewBinder): CoreStartable
@Binds
@SysUISingleton
fun faceSettings(impl: FaceSettingsRepositoryImpl): FaceSettingsRepository
@Binds @SysUISingleton fun faceSensors(impl: FacePropertyRepositoryImpl): FacePropertyRepository
@Binds
@SysUISingleton
fun biometricPromptRepository(impl: PromptRepositoryImpl): PromptRepository
@Binds
@SysUISingleton
fun biometricStatusRepository(impl: BiometricStatusRepositoryImpl): BiometricStatusRepository
@Binds
@SysUISingleton
fun fingerprintRepository(
impl: FingerprintPropertyRepositoryImpl
): FingerprintPropertyRepository
@Binds
@SysUISingleton
fun displayStateRepository(impl: DisplayStateRepositoryImpl): DisplayStateRepository
companion object {
/** Background [Executor] for HAL related operations. */
@Provides
@SysUISingleton
@JvmStatic
@BiometricsBackground
fun providesPluginExecutor(threadFactory: ThreadFactory): Executor =
threadFactory.buildExecutorOnNewThread("biometrics")
@Provides fun providesUdfpsUtils(): UdfpsUtils = UdfpsUtils()
@Provides
@SysUISingleton
fun providesOverlapDetector(): OverlapDetector {
val selectedOption =
Resources.getSystem().getInteger(R.integer.config_selected_udfps_touch_detection)
val values =
Resources.getSystem()
.getStringArray(R.array.config_udfps_touch_detection_options)[selectedOption]
.split(",")
.map { it.toFloat() }
return if (values[0] == 1f) {
EllipseOverlapDetector(
EllipseOverlapDetectorParams(
minOverlap = values[3],
targetSize = values[2],
stepSize = values[4].toInt()
)
)
} else {
BoundingBoxOverlapDetector(values[2])
}
}
}
}
/**
* Background executor for HAL operations that are latency sensitive but too slow to run on the main
* thread. Prefer the shared executors, such as [com.android.systemui.dagger.qualifiers.Background]
* when a HAL is not directly involved.
*/
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class BiometricsBackground