Loading services/core/java/com/android/server/biometrics/sensors/EnrollClient.java +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.server.biometrics.AuthenticationStatsCollector; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.log.BiometricLogger; import com.android.server.pm.PackageManagerService; import java.util.Arrays; import java.util.function.Supplier; Loading Loading @@ -169,6 +170,7 @@ public abstract class EnrollClient<T> extends AcquisitionClient<T> implements En AuthenticationStatsCollector.ACTION_LAST_ENROLL_TIME_CHANGED); intent.putExtra(Intent.EXTRA_USER_HANDLE, getTargetUserId()); intent.putExtra(AuthenticationStatsCollector.EXTRA_MODALITY, modality); intent.setPackage(PackageManagerService.PLATFORM_PACKAGE_NAME); getContext().sendBroadcast(intent, Manifest.permission.USE_BIOMETRIC_INTERNAL); } } services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java +25 −30 Original line number Diff line number Diff line Loading @@ -28,17 +28,17 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyByte; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricRequestConstants; import android.hardware.biometrics.BiometricSourceType; Loading Loading @@ -70,6 +70,7 @@ import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Rule; Loading @@ -81,8 +82,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @Presubmit Loading Loading @@ -134,6 +133,8 @@ public class FaceEnrollClientTest { private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor; @Captor private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor; @Captor private ArgumentCaptor<Intent> mIntentCaptor; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); Loading Loading @@ -211,21 +212,30 @@ public class FaceEnrollClientTest { @Test public void testEnrollWithBroadcastEnrollTime() throws RemoteException, InterruptedException { final FaceEnrollClient client = createClient(4); final CountDownLatch countDownLatch = new CountDownLatch(1); final EnrollmentTimeReceiver receiver = new EnrollmentTimeReceiver(countDownLatch); mContext.registerReceiver(receiver, new IntentFilter(ACTION_LAST_ENROLL_TIME_CHANGED), Context.RECEIVER_NOT_EXPORTED); int version = 4; when(mHal.getInterfaceVersion()).thenReturn(version); AidlSession aidl = new AidlSession(version, mHal, USER_ID, mAidlResponseHandler); Context spiedContext = spy(mContext); FaceEnrollClient client = new FaceEnrollClient(spiedContext, () -> aidl, mToken, mClientMonitorCallbackConverter, USER_ID, HAT, "com.foo.bar", 44 /* requestId */, mUtils, new int[0] /* disabledFeatures */, 6 /* timeoutSec */, null /* previewSurface */, 8 /* sensorId */, mBiometricLogger, mBiometricContext, 5 /* maxTemplatesPerUser */, true /* debugConsent */, (new FaceEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build(), mAuthenticationStateListeners, mBiometricUtils); client.start(mCallback); client.onEnrollResult(new Face("face", 1 /* faceId */, 20 /* deviceId */), 0); assertThat(countDownLatch.await(2, TimeUnit.SECONDS)).isTrue(); final Intent intent = receiver.mIntent; assertThat(intent).isNotNull(); assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(USER_ID); assertThat(intent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, BiometricsProtoEnums.MODALITY_UNKNOWN)) verify(spiedContext).sendBroadcast(mIntentCaptor.capture(), anyString()); Intent capturedIntent = mIntentCaptor.getValue(); assertThat(capturedIntent).isNotNull(); assertThat(capturedIntent.getPackage()).isEqualTo( PackageManagerService.PLATFORM_PACKAGE_NAME); assertThat(capturedIntent.getAction()).isEqualTo(ACTION_LAST_ENROLL_TIME_CHANGED); assertThat(capturedIntent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(USER_ID); assertThat(capturedIntent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, -1)) .isEqualTo(BiometricsProtoEnums.MODALITY_FACE); } Loading Loading @@ -323,19 +333,4 @@ public class FaceEnrollClientTest { .build() ); } static final class EnrollmentTimeReceiver extends BroadcastReceiver { final CountDownLatch mLatch; Intent mIntent; EnrollmentTimeReceiver(CountDownLatch latch) { mLatch = latch; } @Override public void onReceive(Context context, Intent intent) { mIntent = intent; mLatch.countDown(); } } } services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java +27 −30 Original line number Diff line number Diff line Loading @@ -28,18 +28,18 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.biometrics.BiometricRequestConstants; import android.hardware.biometrics.BiometricSourceType; import android.hardware.biometrics.BiometricsProtoEnums; Loading Loading @@ -79,6 +79,7 @@ import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Rule; Loading @@ -90,8 +91,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @Presubmit Loading Loading @@ -158,6 +157,8 @@ public class FingerprintEnrollClientTest { private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor; @Captor private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor; @Captor private ArgumentCaptor<Intent> mIntentCaptor; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); Loading Loading @@ -323,22 +324,33 @@ public class FingerprintEnrollClientTest { @Test public void testEnrollWithBroadcastEnrollTime() throws RemoteException, InterruptedException { final FingerprintEnrollClient client = createClient(4); final CountDownLatch countDownLatch = new CountDownLatch(1); final EnrollmentTimeReceiver receiver = new EnrollmentTimeReceiver(countDownLatch); mContext.registerReceiver(receiver, new IntentFilter(ACTION_LAST_ENROLL_TIME_CHANGED), Context.RECEIVER_NOT_EXPORTED); int testUserId = 33; int version = 4; when(mHal.getInterfaceVersion()).thenReturn(version); Context spiedContext = spy(mContext); AidlSession aidl = new AidlSession(version, mHal, USER_ID, mAidlResponseHandler); FingerprintEnrollClient client = new FingerprintEnrollClient(spiedContext, () -> aidl, mToken, REQUEST_ID, mClientMonitorCallbackConverter, testUserId /* userId */, HAT, "owner", mBiometricUtils, 8 /* sensorId */, mBiometricLogger, mBiometricContext, mSensorProps, mUdfpsOverlayController, mAuthenticationStateListeners, 6 /* maxTemplatesPerUser */, FingerprintManager.ENROLL_ENROLL, (new FingerprintEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build() ); client.start(mCallback); client.onEnrollResult(new Fingerprint("fingerprint", 1 /* fingerId */, 20 /* deviceId */), 0); assertThat(countDownLatch.await(2, TimeUnit.SECONDS)).isTrue(); final Intent intent = receiver.mIntent; assertThat(intent).isNotNull(); assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0); assertThat(intent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, BiometricsProtoEnums.MODALITY_UNKNOWN)) verify(spiedContext).sendBroadcast(mIntentCaptor.capture(), anyString()); Intent capturedIntent = mIntentCaptor.getValue(); assertThat(capturedIntent).isNotNull(); assertThat(capturedIntent.getPackage()).isEqualTo( PackageManagerService.PLATFORM_PACKAGE_NAME); assertThat(capturedIntent.getAction()).isEqualTo(ACTION_LAST_ENROLL_TIME_CHANGED); assertThat(capturedIntent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(testUserId); assertThat(capturedIntent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, -1)) .isEqualTo(BiometricsProtoEnums.MODALITY_FINGERPRINT); } Loading Loading @@ -439,19 +451,4 @@ public class FingerprintEnrollClientTest { .setEnrollReason(ENROLL_SOURCE).build() ); } static final class EnrollmentTimeReceiver extends BroadcastReceiver { final CountDownLatch mLatch; Intent mIntent; EnrollmentTimeReceiver(CountDownLatch latch) { mLatch = latch; } @Override public void onReceive(Context context, Intent intent) { mIntent = intent; mLatch.countDown(); } } } Loading
services/core/java/com/android/server/biometrics/sensors/EnrollClient.java +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.server.biometrics.AuthenticationStatsCollector; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.log.BiometricContext; import com.android.server.biometrics.log.BiometricLogger; import com.android.server.pm.PackageManagerService; import java.util.Arrays; import java.util.function.Supplier; Loading Loading @@ -169,6 +170,7 @@ public abstract class EnrollClient<T> extends AcquisitionClient<T> implements En AuthenticationStatsCollector.ACTION_LAST_ENROLL_TIME_CHANGED); intent.putExtra(Intent.EXTRA_USER_HANDLE, getTargetUserId()); intent.putExtra(AuthenticationStatsCollector.EXTRA_MODALITY, modality); intent.setPackage(PackageManagerService.PLATFORM_PACKAGE_NAME); getContext().sendBroadcast(intent, Manifest.permission.USE_BIOMETRIC_INTERNAL); } }
services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java +25 −30 Original line number Diff line number Diff line Loading @@ -28,17 +28,17 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyByte; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricRequestConstants; import android.hardware.biometrics.BiometricSourceType; Loading Loading @@ -70,6 +70,7 @@ import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Rule; Loading @@ -81,8 +82,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @Presubmit Loading Loading @@ -134,6 +133,8 @@ public class FaceEnrollClientTest { private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor; @Captor private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor; @Captor private ArgumentCaptor<Intent> mIntentCaptor; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); Loading Loading @@ -211,21 +212,30 @@ public class FaceEnrollClientTest { @Test public void testEnrollWithBroadcastEnrollTime() throws RemoteException, InterruptedException { final FaceEnrollClient client = createClient(4); final CountDownLatch countDownLatch = new CountDownLatch(1); final EnrollmentTimeReceiver receiver = new EnrollmentTimeReceiver(countDownLatch); mContext.registerReceiver(receiver, new IntentFilter(ACTION_LAST_ENROLL_TIME_CHANGED), Context.RECEIVER_NOT_EXPORTED); int version = 4; when(mHal.getInterfaceVersion()).thenReturn(version); AidlSession aidl = new AidlSession(version, mHal, USER_ID, mAidlResponseHandler); Context spiedContext = spy(mContext); FaceEnrollClient client = new FaceEnrollClient(spiedContext, () -> aidl, mToken, mClientMonitorCallbackConverter, USER_ID, HAT, "com.foo.bar", 44 /* requestId */, mUtils, new int[0] /* disabledFeatures */, 6 /* timeoutSec */, null /* previewSurface */, 8 /* sensorId */, mBiometricLogger, mBiometricContext, 5 /* maxTemplatesPerUser */, true /* debugConsent */, (new FaceEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build(), mAuthenticationStateListeners, mBiometricUtils); client.start(mCallback); client.onEnrollResult(new Face("face", 1 /* faceId */, 20 /* deviceId */), 0); assertThat(countDownLatch.await(2, TimeUnit.SECONDS)).isTrue(); final Intent intent = receiver.mIntent; assertThat(intent).isNotNull(); assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(USER_ID); assertThat(intent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, BiometricsProtoEnums.MODALITY_UNKNOWN)) verify(spiedContext).sendBroadcast(mIntentCaptor.capture(), anyString()); Intent capturedIntent = mIntentCaptor.getValue(); assertThat(capturedIntent).isNotNull(); assertThat(capturedIntent.getPackage()).isEqualTo( PackageManagerService.PLATFORM_PACKAGE_NAME); assertThat(capturedIntent.getAction()).isEqualTo(ACTION_LAST_ENROLL_TIME_CHANGED); assertThat(capturedIntent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(USER_ID); assertThat(capturedIntent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, -1)) .isEqualTo(BiometricsProtoEnums.MODALITY_FACE); } Loading Loading @@ -323,19 +333,4 @@ public class FaceEnrollClientTest { .build() ); } static final class EnrollmentTimeReceiver extends BroadcastReceiver { final CountDownLatch mLatch; Intent mIntent; EnrollmentTimeReceiver(CountDownLatch latch) { mLatch = latch; } @Override public void onReceive(Context context, Intent intent) { mIntent = intent; mLatch.countDown(); } } }
services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java +27 −30 Original line number Diff line number Diff line Loading @@ -28,18 +28,18 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.biometrics.BiometricRequestConstants; import android.hardware.biometrics.BiometricSourceType; import android.hardware.biometrics.BiometricsProtoEnums; Loading Loading @@ -79,6 +79,7 @@ import com.android.server.biometrics.sensors.AuthenticationStateListeners; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Rule; Loading @@ -90,8 +91,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @Presubmit Loading Loading @@ -158,6 +157,8 @@ public class FingerprintEnrollClientTest { private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor; @Captor private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor; @Captor private ArgumentCaptor<Intent> mIntentCaptor; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); Loading Loading @@ -323,22 +324,33 @@ public class FingerprintEnrollClientTest { @Test public void testEnrollWithBroadcastEnrollTime() throws RemoteException, InterruptedException { final FingerprintEnrollClient client = createClient(4); final CountDownLatch countDownLatch = new CountDownLatch(1); final EnrollmentTimeReceiver receiver = new EnrollmentTimeReceiver(countDownLatch); mContext.registerReceiver(receiver, new IntentFilter(ACTION_LAST_ENROLL_TIME_CHANGED), Context.RECEIVER_NOT_EXPORTED); int testUserId = 33; int version = 4; when(mHal.getInterfaceVersion()).thenReturn(version); Context spiedContext = spy(mContext); AidlSession aidl = new AidlSession(version, mHal, USER_ID, mAidlResponseHandler); FingerprintEnrollClient client = new FingerprintEnrollClient(spiedContext, () -> aidl, mToken, REQUEST_ID, mClientMonitorCallbackConverter, testUserId /* userId */, HAT, "owner", mBiometricUtils, 8 /* sensorId */, mBiometricLogger, mBiometricContext, mSensorProps, mUdfpsOverlayController, mAuthenticationStateListeners, 6 /* maxTemplatesPerUser */, FingerprintManager.ENROLL_ENROLL, (new FingerprintEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build() ); client.start(mCallback); client.onEnrollResult(new Fingerprint("fingerprint", 1 /* fingerId */, 20 /* deviceId */), 0); assertThat(countDownLatch.await(2, TimeUnit.SECONDS)).isTrue(); final Intent intent = receiver.mIntent; assertThat(intent).isNotNull(); assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0); assertThat(intent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, BiometricsProtoEnums.MODALITY_UNKNOWN)) verify(spiedContext).sendBroadcast(mIntentCaptor.capture(), anyString()); Intent capturedIntent = mIntentCaptor.getValue(); assertThat(capturedIntent).isNotNull(); assertThat(capturedIntent.getPackage()).isEqualTo( PackageManagerService.PLATFORM_PACKAGE_NAME); assertThat(capturedIntent.getAction()).isEqualTo(ACTION_LAST_ENROLL_TIME_CHANGED); assertThat(capturedIntent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(testUserId); assertThat(capturedIntent.getIntExtra(AuthenticationStatsCollector.EXTRA_MODALITY, -1)) .isEqualTo(BiometricsProtoEnums.MODALITY_FINGERPRINT); } Loading Loading @@ -439,19 +451,4 @@ public class FingerprintEnrollClientTest { .setEnrollReason(ENROLL_SOURCE).build() ); } static final class EnrollmentTimeReceiver extends BroadcastReceiver { final CountDownLatch mLatch; Intent mIntent; EnrollmentTimeReceiver(CountDownLatch latch) { mLatch = latch; } @Override public void onReceive(Context context, Intent intent) { mIntent = intent; mLatch.countDown(); } } }