Loading services/core/java/com/android/server/biometrics/AuthService.java +31 −14 Original line number Diff line number Diff line Loading @@ -216,6 +216,13 @@ public class AuthService extends SystemService { public String[] getFaceAidlInstances() { return ServiceManager.getDeclaredInstances(IFace.DESCRIPTOR); } /** * Allows to test with handlers. */ public BiometricHandlerProvider getBiometricHandlerProvider() { return BiometricHandlerProvider.getInstance(); } } private final class AuthServiceImpl extends IAuthService.Stub { Loading Loading @@ -772,7 +779,6 @@ public class AuthService extends SystemService { } if (com.android.server.biometrics.Flags.deHidl()) { Slog.d(TAG, "deHidl flag is on."); registerAuthenticators(); } else { // Registers HIDL and AIDL authenticators, but only HIDL configs need to be provided. Loading @@ -783,10 +789,16 @@ public class AuthService extends SystemService { } private void registerAuthenticators() { BiometricHandlerProvider handlerProvider = mInjector.getBiometricHandlerProvider(); handlerProvider.getFingerprintHandler().post(() -> registerFingerprintSensors(mInjector.getFingerprintAidlInstances(), mInjector.getFingerprintConfiguration(getContext())); mInjector.getFingerprintConfiguration(getContext()), getContext(), mInjector.getFingerprintService())); handlerProvider.getFaceHandler().post(() -> registerFaceSensors(mInjector.getFaceAidlInstances(), mInjector.getFaceConfiguration(getContext())); mInjector.getFaceConfiguration(getContext()), getContext(), mInjector.getFaceService())); registerIrisSensors(mInjector.getIrisConfiguration(getContext())); } Loading Loading @@ -837,15 +849,18 @@ public class AuthService extends SystemService { } } private void registerFaceSensors(final String[] faceAidlInstances, final String[] hidlConfigStrings) { /** * This method is invoked on {@link BiometricHandlerProvider.mFaceHandler}. */ 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, getContext()); mFaceSensorConfigurations.addHidlConfigs(hidlConfigStrings, context); } if (faceAidlInstances != null && faceAidlInstances.length > 0) { Loading @@ -854,7 +869,6 @@ public class AuthService extends SystemService { ServiceManager.waitForDeclaredService(name)))); } final IFaceService faceService = mInjector.getFaceService(); if (faceService != null) { try { faceService.registerAuthenticatorsLegacy(mFaceSensorConfigurations); Loading @@ -866,14 +880,18 @@ public class AuthService extends SystemService { } } private void registerFingerprintSensors(final String[] fingerprintAidlInstances, final String[] hidlConfigStrings) { /** * This method is invoked on {@link BiometricHandlerProvider.mFingerprintHandler}. */ 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, getContext()); mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); } if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) { Loading @@ -882,7 +900,6 @@ public class AuthService extends SystemService { ServiceManager.waitForDeclaredService(name)))); } final IFingerprintService fingerprintService = mInjector.getFingerprintService(); if (fingerprintService != null) { try { fingerprintService.registerAuthenticatorsLegacy(mFingerprintSensorConfigurations); Loading services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -60,8 +60,10 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintService; import android.hardware.iris.IIrisService; import android.os.Binder; import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; Loading Loading @@ -127,6 +129,8 @@ public class AuthServiceTest { AppOpsManager mAppOpsManager; @Mock private VirtualDeviceManagerInternal mVdmInternal; @Mock private BiometricHandlerProvider mBiometricHandlerProvider; @Captor private ArgumentCaptor<List<FingerprintSensorPropertiesInternal>> mFingerprintPropsCaptor; @Captor Loading @@ -136,6 +140,9 @@ public class AuthServiceTest { @Captor private ArgumentCaptor<List<FaceSensorPropertiesInternal>> mFacePropsCaptor; private final TestLooper mFingerprintLooper = new TestLooper(); private final TestLooper mFaceLooper = new TestLooper(); @Before public void setUp() { // Placeholder test config Loading Loading @@ -167,6 +174,11 @@ public class AuthServiceTest { when(mInjector.getIrisService()).thenReturn(mIrisService); when(mInjector.getAppOps(any())).thenReturn(mAppOpsManager); when(mInjector.isHidlDisabled(any())).thenReturn(false); when(mInjector.getBiometricHandlerProvider()).thenReturn(mBiometricHandlerProvider); when(mBiometricHandlerProvider.getFingerprintHandler()).thenReturn( new Handler(mFingerprintLooper.getLooper())); when(mBiometricHandlerProvider.getFaceHandler()).thenReturn( new Handler(mFaceLooper.getLooper())); setInternalAndTestBiometricPermissions(mContext, false /* hasPermission */); } Loading Loading @@ -250,6 +262,9 @@ public class AuthServiceTest { mAuthService = new AuthService(mContext, mInjector); mAuthService.onStart(); mFingerprintLooper.dispatchAll(); mFaceLooper.dispatchAll(); verify(mFingerprintService).registerAuthenticatorsLegacy( mFingerprintSensorConfigurationsCaptor.capture()); Loading Loading
services/core/java/com/android/server/biometrics/AuthService.java +31 −14 Original line number Diff line number Diff line Loading @@ -216,6 +216,13 @@ public class AuthService extends SystemService { public String[] getFaceAidlInstances() { return ServiceManager.getDeclaredInstances(IFace.DESCRIPTOR); } /** * Allows to test with handlers. */ public BiometricHandlerProvider getBiometricHandlerProvider() { return BiometricHandlerProvider.getInstance(); } } private final class AuthServiceImpl extends IAuthService.Stub { Loading Loading @@ -772,7 +779,6 @@ public class AuthService extends SystemService { } if (com.android.server.biometrics.Flags.deHidl()) { Slog.d(TAG, "deHidl flag is on."); registerAuthenticators(); } else { // Registers HIDL and AIDL authenticators, but only HIDL configs need to be provided. Loading @@ -783,10 +789,16 @@ public class AuthService extends SystemService { } private void registerAuthenticators() { BiometricHandlerProvider handlerProvider = mInjector.getBiometricHandlerProvider(); handlerProvider.getFingerprintHandler().post(() -> registerFingerprintSensors(mInjector.getFingerprintAidlInstances(), mInjector.getFingerprintConfiguration(getContext())); mInjector.getFingerprintConfiguration(getContext()), getContext(), mInjector.getFingerprintService())); handlerProvider.getFaceHandler().post(() -> registerFaceSensors(mInjector.getFaceAidlInstances(), mInjector.getFaceConfiguration(getContext())); mInjector.getFaceConfiguration(getContext()), getContext(), mInjector.getFaceService())); registerIrisSensors(mInjector.getIrisConfiguration(getContext())); } Loading Loading @@ -837,15 +849,18 @@ public class AuthService extends SystemService { } } private void registerFaceSensors(final String[] faceAidlInstances, final String[] hidlConfigStrings) { /** * This method is invoked on {@link BiometricHandlerProvider.mFaceHandler}. */ 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, getContext()); mFaceSensorConfigurations.addHidlConfigs(hidlConfigStrings, context); } if (faceAidlInstances != null && faceAidlInstances.length > 0) { Loading @@ -854,7 +869,6 @@ public class AuthService extends SystemService { ServiceManager.waitForDeclaredService(name)))); } final IFaceService faceService = mInjector.getFaceService(); if (faceService != null) { try { faceService.registerAuthenticatorsLegacy(mFaceSensorConfigurations); Loading @@ -866,14 +880,18 @@ public class AuthService extends SystemService { } } private void registerFingerprintSensors(final String[] fingerprintAidlInstances, final String[] hidlConfigStrings) { /** * This method is invoked on {@link BiometricHandlerProvider.mFingerprintHandler}. */ 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, getContext()); mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context); } if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) { Loading @@ -882,7 +900,6 @@ public class AuthService extends SystemService { ServiceManager.waitForDeclaredService(name)))); } final IFingerprintService fingerprintService = mInjector.getFingerprintService(); if (fingerprintService != null) { try { fingerprintService.registerAuthenticatorsLegacy(mFingerprintSensorConfigurations); Loading
services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -60,8 +60,10 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintService; import android.hardware.iris.IIrisService; import android.os.Binder; import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; Loading Loading @@ -127,6 +129,8 @@ public class AuthServiceTest { AppOpsManager mAppOpsManager; @Mock private VirtualDeviceManagerInternal mVdmInternal; @Mock private BiometricHandlerProvider mBiometricHandlerProvider; @Captor private ArgumentCaptor<List<FingerprintSensorPropertiesInternal>> mFingerprintPropsCaptor; @Captor Loading @@ -136,6 +140,9 @@ public class AuthServiceTest { @Captor private ArgumentCaptor<List<FaceSensorPropertiesInternal>> mFacePropsCaptor; private final TestLooper mFingerprintLooper = new TestLooper(); private final TestLooper mFaceLooper = new TestLooper(); @Before public void setUp() { // Placeholder test config Loading Loading @@ -167,6 +174,11 @@ public class AuthServiceTest { when(mInjector.getIrisService()).thenReturn(mIrisService); when(mInjector.getAppOps(any())).thenReturn(mAppOpsManager); when(mInjector.isHidlDisabled(any())).thenReturn(false); when(mInjector.getBiometricHandlerProvider()).thenReturn(mBiometricHandlerProvider); when(mBiometricHandlerProvider.getFingerprintHandler()).thenReturn( new Handler(mFingerprintLooper.getLooper())); when(mBiometricHandlerProvider.getFaceHandler()).thenReturn( new Handler(mFaceLooper.getLooper())); setInternalAndTestBiometricPermissions(mContext, false /* hasPermission */); } Loading Loading @@ -250,6 +262,9 @@ public class AuthServiceTest { mAuthService = new AuthService(mContext, mInjector); mAuthService.onStart(); mFingerprintLooper.dispatchAll(); mFaceLooper.dispatchAll(); verify(mFingerprintService).registerAuthenticatorsLegacy( mFingerprintSensorConfigurationsCaptor.capture()); Loading