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

Commit c9d2193f authored by Joe Bolinger's avatar Joe Bolinger Committed by Android (Google) Code Review
Browse files

Merge "Add destroy method to metric probes." into tm-dev

parents b061e2e6 8c04657b
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -53,17 +53,29 @@ public class BiometricLogger {
    private boolean mShouldLogMetrics = true;

    private class ALSProbe implements Probe {
        private boolean mDestroyed = false;

        @Override
        public void enable() {
        public synchronized void enable() {
            if (!mDestroyed) {
                setLightSensorLoggingEnabled(getAmbientLightSensor(mSensorManager));
            }
        }

        @Override
        public void disable() {
        public synchronized void disable() {
            if (!mDestroyed) {
                setLightSensorLoggingEnabled(null);
            }
        }

        @Override
        public synchronized void destroy() {
            disable();
            mDestroyed = true;
        }
    }

    // report only the most recent value
    // consider com.android.server.display.utils.AmbientFilter or similar if need arises
    private volatile float mLastAmbientLux = 0;
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ public class CallbackWithProbe<T extends Probe> implements ClientMonitorCallback

    @Override
    public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) {
        mProbe.disable();
        mProbe.destroy();
    }

    @NonNull
+2 −0
Original line number Diff line number Diff line
@@ -27,4 +27,6 @@ public interface Probe {
    void enable();
    /** Stop sampling data. */
    void disable();
    /** Same as {@link #disable()} and ignores all future calls to this probe. */
    void destroy();
}
+15 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyLong;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -250,4 +251,18 @@ public class BiometricLoggerTest {
        callback.onClientFinished(mClient, true /* success */);
        verify(mSensorManager, never()).registerListener(any(), any(), anyInt());
    }

    @Test
    public void testALSCallbackDestroyed() {
        mLogger = createLogger();
        final CallbackWithProbe<Probe> callback =
                mLogger.createALSCallback(true /* startWithClient */);

        callback.onClientStarted(mClient);
        callback.onClientFinished(mClient, false /* success */);

        reset(mSensorManager);
        callback.getProbe().enable();
        verify(mSensorManager, never()).registerListener(any(), any(), anyInt());
    }
}
+20 −1
Original line number Diff line number Diff line
@@ -31,9 +31,11 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.common.OperationContext;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.ISidefpsController;
import android.hardware.fingerprint.IUdfpsOverlayController;
@@ -63,12 +65,14 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.util.ArrayList;
import java.util.function.Consumer;

@Presubmit
@SmallTest
public class FingerprintAuthenticationClientTest {

    private static final int SENSOR_ID = 4;
    private static final int USER_ID = 8;
    private static final long OP_ID = 7;
    private static final long REQUEST_ID = 88;
@@ -93,6 +97,8 @@ public class FingerprintAuthenticationClientTest {
    @Mock
    private BiometricContext mBiometricContext;
    @Mock
    private BiometricManager mBiometricManager;
    @Mock
    private LockoutCache mLockoutCache;
    @Mock
    private IUdfpsOverlayController mUdfpsOverlayController;
@@ -118,6 +124,7 @@ public class FingerprintAuthenticationClientTest {

    @Before
    public void setup() {
        mContext.addMockSystemService(BiometricManager.class, mBiometricManager);
        when(mBiometricLogger.createALSCallback(anyBoolean())).thenAnswer(i ->
                new CallbackWithProbe<>(mLuxProbe, i.getArgument(0)));
        when(mBiometricContext.updateContext(any(), anyBoolean())).thenAnswer(
@@ -211,6 +218,18 @@ public class FingerprintAuthenticationClientTest {
        verify(mLuxProbe, times(2)).enable();
    }

    @Test
    public void luxProbeWhenFingerDown_unlessDestroyed() throws RemoteException {
        final FingerprintAuthenticationClient client = createClient();
        client.start(mCallback);
        client.onAuthenticated(new Fingerprint("name", 2 /* enrollmentId */, SENSOR_ID),
                true /* authenticated */, new ArrayList<>());
        verify(mLuxProbe).destroy();

        client.onAcquired(2, 0);
        verify(mLuxProbe, never()).enable();
    }

    @Test
    public void notifyHalWhenContextChanges() throws RemoteException {
        final FingerprintAuthenticationClient client = createClient();
@@ -284,6 +303,6 @@ public class FingerprintAuthenticationClientTest {
        true /* isStrongBiometric */,
        null /* taskStackListener */, mLockoutCache,
        mUdfpsOverlayController, mSideFpsController,
        false /* allowBackgroundAuthentication */, mSensorProps);
        true /* allowBackgroundAuthentication */, mSensorProps);
    }
}