Skip to content
Snippets Groups Projects
Commit 619ae12c authored by Diya Bera's avatar Diya Bera Committed by Android (Google) Code Review
Browse files

Merge "Initialize biometric handler only when required" into main

parents 91c1c876 8120d6af
No related branches found
No related tags found
No related merge requests found
......@@ -791,14 +791,12 @@ public class AuthService extends SystemService {
private void registerAuthenticators() {
BiometricHandlerProvider handlerProvider = mInjector.getBiometricHandlerProvider();
handlerProvider.getFingerprintHandler().post(() ->
registerFingerprintSensors(mInjector.getFingerprintAidlInstances(),
mInjector.getFingerprintConfiguration(getContext()), getContext(),
mInjector.getFingerprintService()));
handlerProvider.getFaceHandler().post(() ->
registerFaceSensors(mInjector.getFaceAidlInstances(),
mInjector.getFaceConfiguration(getContext()), getContext(),
mInjector.getFaceService()));
registerFingerprintSensors(mInjector.getFingerprintAidlInstances(),
mInjector.getFingerprintConfiguration(getContext()), getContext(),
mInjector.getFingerprintService(), handlerProvider);
registerFaceSensors(mInjector.getFaceAidlInstances(),
mInjector.getFaceConfiguration(getContext()), getContext(),
mInjector.getFaceService(), handlerProvider);
registerIrisSensors(mInjector.getIrisConfiguration(getContext()));
}
......@@ -854,30 +852,38 @@ public class AuthService extends SystemService {
*/
private static void registerFaceSensors(final String[] faceAidlInstances,
final String[] hidlConfigStrings, final Context context,
final IFaceService faceService) {
final FaceSensorConfigurations mFaceSensorConfigurations =
new FaceSensorConfigurations(hidlConfigStrings != null
&& hidlConfigStrings.length > 0);
if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
mFaceSensorConfigurations.addHidlConfigs(hidlConfigStrings, context);
final IFaceService faceService, final BiometricHandlerProvider handlerProvider) {
if ((hidlConfigStrings == null || hidlConfigStrings.length == 0)
&& (faceAidlInstances == null || faceAidlInstances.length == 0)) {
Slog.d(TAG, "No face sensors.");
return;
}
if (faceAidlInstances != null && faceAidlInstances.length > 0) {
mFaceSensorConfigurations.addAidlConfigs(faceAidlInstances,
name -> IFace.Stub.asInterface(Binder.allowBlocking(
ServiceManager.waitForDeclaredService(name))));
}
handlerProvider.getFaceHandler().post(() -> {
final FaceSensorConfigurations mFaceSensorConfigurations =
new FaceSensorConfigurations(hidlConfigStrings != null
&& hidlConfigStrings.length > 0);
if (faceService != null) {
try {
faceService.registerAuthenticatorsLegacy(mFaceSensorConfigurations);
} catch (RemoteException e) {
Slog.e(TAG, "RemoteException when registering face authenticators", e);
if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
mFaceSensorConfigurations.addHidlConfigs(hidlConfigStrings, context);
}
} else if (mFaceSensorConfigurations.hasSensorConfigurations()) {
Slog.e(TAG, "Face configuration exists, but FaceService is null.");
}
if (faceAidlInstances != null && faceAidlInstances.length > 0) {
mFaceSensorConfigurations.addAidlConfigs(faceAidlInstances,
name -> IFace.Stub.asInterface(Binder.allowBlocking(
ServiceManager.waitForDeclaredService(name))));
}
if (faceService != null) {
try {
faceService.registerAuthenticatorsLegacy(mFaceSensorConfigurations);
} catch (RemoteException e) {
Slog.e(TAG, "RemoteException when registering face authenticators", e);
}
} else if (mFaceSensorConfigurations.hasSensorConfigurations()) {
Slog.e(TAG, "Face configuration exists, but FaceService is null.");
}
});
}
/**
......@@ -885,30 +891,40 @@ public class AuthService extends SystemService {
*/
private static void registerFingerprintSensors(final String[] fingerprintAidlInstances,
final String[] hidlConfigStrings, final Context context,
final IFingerprintService fingerprintService) {
final FingerprintSensorConfigurations mFingerprintSensorConfigurations =
new FingerprintSensorConfigurations(!(hidlConfigStrings != null
&& hidlConfigStrings.length > 0));
if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context);
final IFingerprintService fingerprintService,
final BiometricHandlerProvider handlerProvider) {
if ((hidlConfigStrings == null || hidlConfigStrings.length == 0)
&& (fingerprintAidlInstances == null || fingerprintAidlInstances.length == 0)) {
Slog.d(TAG, "No fingerprint sensors.");
return;
}
if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) {
mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances,
name -> IFingerprint.Stub.asInterface(Binder.allowBlocking(
ServiceManager.waitForDeclaredService(name))));
}
handlerProvider.getFingerprintHandler().post(() -> {
final FingerprintSensorConfigurations mFingerprintSensorConfigurations =
new FingerprintSensorConfigurations(!(hidlConfigStrings != null
&& hidlConfigStrings.length > 0));
if (fingerprintService != null) {
try {
fingerprintService.registerAuthenticatorsLegacy(mFingerprintSensorConfigurations);
} catch (RemoteException e) {
Slog.e(TAG, "RemoteException when registering fingerprint authenticators", e);
if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context);
}
} else if (mFingerprintSensorConfigurations.hasSensorConfigurations()) {
Slog.e(TAG, "Fingerprint configuration exists, but FingerprintService is null.");
}
if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) {
mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances,
name -> IFingerprint.Stub.asInterface(Binder.allowBlocking(
ServiceManager.waitForDeclaredService(name))));
}
if (fingerprintService != null) {
try {
fingerprintService.registerAuthenticatorsLegacy(
mFingerprintSensorConfigurations);
} catch (RemoteException e) {
Slog.e(TAG, "RemoteException when registering fingerprint authenticators", e);
}
} else if (mFingerprintSensorConfigurations.hasSensorConfigurations()) {
Slog.e(TAG, "Fingerprint configuration exists, but FingerprintService is null.");
}
});
}
/**
......
......@@ -16,6 +16,9 @@
package com.android.server.biometrics;
import static android.os.Process.THREAD_PRIORITY_DEFAULT;
import static android.os.Process.THREAD_PRIORITY_DISPLAY;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
......@@ -27,9 +30,9 @@ public class BiometricHandlerProvider {
private static final BiometricHandlerProvider sBiometricHandlerProvider =
new BiometricHandlerProvider();
private final Handler mBiometricsCallbackHandler;
private final Handler mFingerprintHandler;
private final Handler mFaceHandler;
private Handler mBiometricsCallbackHandler;
private Handler mFingerprintHandler;
private Handler mFaceHandler;
/**
* @return an instance of {@link BiometricHandlerProvider} which contains the three
......@@ -39,16 +42,16 @@ public class BiometricHandlerProvider {
return sBiometricHandlerProvider;
}
private BiometricHandlerProvider() {
mBiometricsCallbackHandler = getNewHandler("BiometricsCallbackHandler");
mFingerprintHandler = getNewHandler("FingerprintHandler");
mFaceHandler = getNewHandler("FaceHandler");
}
private BiometricHandlerProvider() {}
/**
* @return the handler to process all biometric callback operations
*/
public synchronized Handler getBiometricCallbackHandler() {
if (mBiometricsCallbackHandler == null) {
mBiometricsCallbackHandler = getNewHandler("BiometricsCallbackHandler",
THREAD_PRIORITY_DISPLAY);
}
return mBiometricsCallbackHandler;
}
......@@ -56,6 +59,9 @@ public class BiometricHandlerProvider {
* @return the handler to process all face related biometric operations
*/
public synchronized Handler getFaceHandler() {
if (mFaceHandler == null) {
mFaceHandler = getNewHandler("FaceHandler", THREAD_PRIORITY_DEFAULT);
}
return mFaceHandler;
}
......@@ -63,12 +69,15 @@ public class BiometricHandlerProvider {
* @return the handler to process all fingerprint related biometric operations
*/
public synchronized Handler getFingerprintHandler() {
if (mFingerprintHandler == null) {
mFingerprintHandler = getNewHandler("FingerprintHandler", THREAD_PRIORITY_DEFAULT);
}
return mFingerprintHandler;
}
private Handler getNewHandler(String tag) {
private Handler getNewHandler(String tag, int priority) {
if (Flags.deHidl()) {
HandlerThread handlerThread = new HandlerThread(tag);
HandlerThread handlerThread = new HandlerThread(tag, priority);
handlerThread.start();
return new Handler(handlerThread.getLooper());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment