Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecd80149 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[FRR] Add target pkg for broadcasting enroll time" into main

parents 84579e63 90d27f17
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);
    }
}
+25 −30
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
@@ -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();
@@ -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);
    }

@@ -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();
        }
    }
}
+27 −30
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
@@ -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();
@@ -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);
    }

@@ -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();
        }
    }
}