Loading services/core/java/com/android/server/biometrics/log/BiometricLogger.java +16 −4 Original line number Diff line number Diff line Loading @@ -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; Loading services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading services/core/java/com/android/server/biometrics/log/Probe.java +2 −0 Original line number Diff line number Diff line Loading @@ -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(); } services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); } } services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -93,6 +97,8 @@ public class FingerprintAuthenticationClientTest { @Mock private BiometricContext mBiometricContext; @Mock private BiometricManager mBiometricManager; @Mock private LockoutCache mLockoutCache; @Mock private IUdfpsOverlayController mUdfpsOverlayController; Loading @@ -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( Loading Loading @@ -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(); Loading Loading @@ -284,6 +303,6 @@ public class FingerprintAuthenticationClientTest { true /* isStrongBiometric */, null /* taskStackListener */, mLockoutCache, mUdfpsOverlayController, mSideFpsController, false /* allowBackgroundAuthentication */, mSensorProps); true /* allowBackgroundAuthentication */, mSensorProps); } } Loading
services/core/java/com/android/server/biometrics/log/BiometricLogger.java +16 −4 Original line number Diff line number Diff line Loading @@ -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; Loading
services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/core/java/com/android/server/biometrics/log/Probe.java +2 −0 Original line number Diff line number Diff line Loading @@ -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(); }
services/tests/servicestests/src/com/android/server/biometrics/log/BiometricLoggerTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); } }
services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -93,6 +97,8 @@ public class FingerprintAuthenticationClientTest { @Mock private BiometricContext mBiometricContext; @Mock private BiometricManager mBiometricManager; @Mock private LockoutCache mLockoutCache; @Mock private IUdfpsOverlayController mUdfpsOverlayController; Loading @@ -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( Loading Loading @@ -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(); Loading Loading @@ -284,6 +303,6 @@ public class FingerprintAuthenticationClientTest { true /* isStrongBiometric */, null /* taskStackListener */, mLockoutCache, mUdfpsOverlayController, mSideFpsController, false /* allowBackgroundAuthentication */, mSensorProps); true /* allowBackgroundAuthentication */, mSensorProps); } }