Merge "Propagate PointerContext for UDFPS touch events"

This commit is contained in:
Ilya Matyukhin
2022-11-18 22:19:29 +00:00
committed by Android (Google) Code Review
17 changed files with 138 additions and 107 deletions

View File

@@ -95,8 +95,11 @@ filegroup {
":platform-compat-native-aidl",
// AIDL sources from external directories
":android.hardware.biometrics.common-V3-java-source",
":android.hardware.biometrics.fingerprint-V3-java-source",
":android.hardware.gnss-V2-java-source",
":android.hardware.graphics.common-V3-java-source",
":android.hardware.keymaster-V4-java-source",
":android.hardware.security.keymint-V2-java-source",
":android.hardware.security.secureclock-V1-java-source",
":android.hardware.tv.tuner-V1-java-source",
@@ -332,7 +335,10 @@ java_defaults {
"packages/modules/Bluetooth/framework/aidl-export",
"packages/modules/Connectivity/framework/aidl-export",
"packages/modules/Media/apex/aidl/stable",
"hardware/interfaces/biometrics/common/aidl",
"hardware/interfaces/biometrics/fingerprint/aidl",
"hardware/interfaces/graphics/common/aidl",
"hardware/interfaces/keymaster/aidl",
],
},
dxflags: [
@@ -617,7 +623,10 @@ stubs_defaults {
"packages/modules/Bluetooth/framework/aidl-export",
"packages/modules/Connectivity/framework/aidl-export",
"packages/modules/Media/apex/aidl/stable",
"hardware/interfaces/biometrics/common/aidl",
"hardware/interfaces/biometrics/fingerprint/aidl",
"hardware/interfaces/graphics/common/aidl",
"hardware/interfaces/keymaster/aidl",
],
},
// These are libs from framework-internal-utils that are required (i.e. being referenced)

View File

@@ -49,6 +49,7 @@ import android.hardware.biometrics.BiometricStateListener;
import android.hardware.biometrics.BiometricTestSession;
import android.hardware.biometrics.IBiometricServiceLockoutResetCallback;
import android.hardware.biometrics.SensorProperties;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.os.Binder;
import android.os.Build;
import android.os.CancellationSignal;
@@ -959,8 +960,14 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
return;
}
final PointerContext pc = new PointerContext();
pc.x = (int) x;
pc.y = (int) y;
pc.minor = minor;
pc.major = major;
try {
mService.onPointerDown(requestId, sensorId, x, y, minor, major);
mService.onPointerDown(requestId, sensorId, pc);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -976,8 +983,10 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
return;
}
final PointerContext pc = new PointerContext();
try {
mService.onPointerUp(requestId, sensorId);
mService.onPointerUp(requestId, sensorId, pc);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -21,6 +21,7 @@ import android.hardware.biometrics.IBiometricStateListener;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.IFingerprintClientActiveCallback;
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback;
import android.hardware.fingerprint.IFingerprintServiceReceiver;
@@ -184,11 +185,11 @@ interface IFingerprintService {
// Notifies about a finger touching the sensor area.
@EnforcePermission("USE_BIOMETRIC_INTERNAL")
void onPointerDown(long requestId, int sensorId, int x, int y, float minor, float major);
void onPointerDown(long requestId, int sensorId, in PointerContext pc);
// Notifies about a finger leaving the sensor area.
@EnforcePermission("USE_BIOMETRIC_INTERNAL")
void onPointerUp(long requestId, int sensorId);
void onPointerUp(long requestId, int sensorId, in PointerContext pc);
// Notifies about the fingerprint UI being ready (e.g. HBM illumination is enabled).
@EnforcePermission("USE_BIOMETRIC_INTERNAL")

View File

@@ -100,7 +100,7 @@ java_library_static {
name: "services.core.unboosted",
defaults: ["platform_service_defaults"],
srcs: [
":android.hardware.biometrics.face-V2-java-source",
":android.hardware.biometrics.face-V3-java-source",
":statslog-art-java-gen",
":statslog-contexthub-java-gen",
":services.core-sources",
@@ -161,7 +161,6 @@ java_library_static {
"android.hardware.weaver-V1.0-java",
"android.hardware.biometrics.face-V1.0-java",
"android.hardware.biometrics.fingerprint-V2.3-java",
"android.hardware.biometrics.fingerprint-V2-java",
"android.hardware.oemlock-V1.0-java",
"android.hardware.configstore-V1.1-java",
"android.hardware.ir-V1-java",

View File

@@ -43,6 +43,7 @@ import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
@@ -881,29 +882,27 @@ public class FingerprintService extends SystemService {
@android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL)
@Override
public void onPointerDown(long requestId, int sensorId, int x, int y,
float minor, float major) {
public void onPointerDown(long requestId, int sensorId, PointerContext pc) {
super.onPointerDown_enforcePermission();
final ServiceProvider provider = mRegistry.getProviderForSensor(sensorId);
if (provider == null) {
Slog.w(TAG, "No matching provider for onFingerDown, sensorId: " + sensorId);
return;
}
provider.onPointerDown(requestId, sensorId, x, y, minor, major);
provider.onPointerDown(requestId, sensorId, pc);
}
@android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL)
@Override
public void onPointerUp(long requestId, int sensorId) {
super.onPointerUp_enforcePermission();
public void onPointerUp(long requestId, int sensorId, PointerContext pc) {
super.onPointerUp_enforcePermission();
final ServiceProvider provider = mRegistry.getProviderForSensor(sensorId);
if (provider == null) {
Slog.w(TAG, "No matching provider for onFingerUp, sensorId: " + sensorId);
return;
}
provider.onPointerUp(requestId, sensorId);
provider.onPointerUp(requestId, sensorId, pc);
}
@android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL)

View File

@@ -21,6 +21,7 @@ import android.annotation.Nullable;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
@@ -122,9 +123,9 @@ public interface ServiceProvider extends
@NonNull IInvalidationCallback callback);
void onPointerDown(long requestId, int sensorId, int x, int y, float minor, float major);
void onPointerDown(long requestId, int sensorId, PointerContext pc);
void onPointerUp(long requestId, int sensorId);
void onPointerUp(long requestId, int sensorId, PointerContext pc);
void onUiReady(long requestId, int sensorId);

View File

@@ -16,6 +16,8 @@
package com.android.server.biometrics.sensors.fingerprint;
import android.hardware.biometrics.fingerprint.PointerContext;
import com.android.server.biometrics.sensors.BaseClientMonitor;
/**
@@ -24,8 +26,8 @@ import com.android.server.biometrics.sensors.BaseClientMonitor;
* finger position (e.g. enroll, authenticate) should implement this.
*/
public interface Udfps {
void onPointerDown(int x, int y, float minor, float major);
void onPointerUp();
void onPointerDown(PointerContext pc);
void onPointerUp(PointerContext pc);
void onUiReady();
boolean isPointerDown();
}

View File

@@ -383,23 +383,17 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
}
@Override
public void onPointerDown(int x, int y, float minor, float major) {
public void onPointerDown(PointerContext pc) {
try {
mIsPointerDown = true;
mState = STATE_STARTED;
final AidlSession session = getFreshDaemon();
if (session.hasContextMethods()) {
final PointerContext context = new PointerContext();
context.pointerId = 0;
context.x = x;
context.y = y;
context.minor = minor;
context.major = major;
context.isAod = getBiometricContext().isAod();
session.getSession().onPointerDownWithContext(context);
session.getSession().onPointerDownWithContext(pc);
} else {
session.getSession().onPointerDown(0 /* pointerId */, x, y, minor, major);
session.getSession().onPointerDown(pc.pointerId, (int) pc.x, (int) pc.y, pc.minor,
pc.major);
}
if (getListener() != null) {
@@ -411,18 +405,16 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
}
@Override
public void onPointerUp() {
public void onPointerUp(PointerContext pc) {
try {
mIsPointerDown = false;
mState = STATE_STARTED_PAUSED_ATTEMPTED;
final AidlSession session = getFreshDaemon();
if (session.hasContextMethods()) {
final PointerContext context = new PointerContext();
context.pointerId = 0;
session.getSession().onPointerUpWithContext(context);
session.getSession().onPointerUpWithContext(pc);
} else {
session.getSession().onPointerUp(0 /* pointerId */);
session.getSession().onPointerUp(pc.pointerId);
}
if (getListener() != null) {

View File

@@ -219,22 +219,16 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps
}
@Override
public void onPointerDown(int x, int y, float minor, float major) {
public void onPointerDown(PointerContext pc) {
try {
mIsPointerDown = true;
final AidlSession session = getFreshDaemon();
if (session.hasContextMethods()) {
final PointerContext context = new PointerContext();
context.pointerId = 0;
context.x = x;
context.y = y;
context.minor = minor;
context.major = major;
context.isAod = getBiometricContext().isAod();
session.getSession().onPointerDownWithContext(context);
session.getSession().onPointerDownWithContext(pc);
} else {
session.getSession().onPointerDown(0 /* pointerId */, x, y, minor, major);
session.getSession().onPointerDown(pc.pointerId, (int) pc.x, (int) pc.y, pc.minor,
pc.major);
}
} catch (RemoteException e) {
Slog.e(TAG, "Unable to send pointer down", e);
@@ -242,17 +236,15 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps
}
@Override
public void onPointerUp() {
public void onPointerUp(PointerContext pc) {
try {
mIsPointerDown = false;
final AidlSession session = getFreshDaemon();
if (session.hasContextMethods()) {
final PointerContext context = new PointerContext();
context.pointerId = 0;
session.getSession().onPointerUpWithContext(context);
session.getSession().onPointerUpWithContext(pc);
} else {
session.getSession().onPointerUp(0 /* pointerId */);
session.getSession().onPointerUp(pc.pointerId);
}
} catch (RemoteException e) {
Slog.e(TAG, "Unable to send pointer up", e);

View File

@@ -34,6 +34,7 @@ import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.SensorLocationInternal;
import android.hardware.biometrics.common.ComponentInfo;
import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.biometrics.fingerprint.SensorProps;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
@@ -627,25 +628,24 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
}
@Override
public void onPointerDown(long requestId, int sensorId, int x, int y,
float minor, float major) {
public void onPointerDown(long requestId, int sensorId, PointerContext pc) {
mSensors.get(sensorId).getScheduler().getCurrentClientIfMatches(requestId, (client) -> {
if (!(client instanceof Udfps)) {
Slog.e(getTag(), "onPointerDown received during client: " + client);
return;
}
((Udfps) client).onPointerDown(x, y, minor, major);
((Udfps) client).onPointerDown(pc);
});
}
@Override
public void onPointerUp(long requestId, int sensorId) {
public void onPointerUp(long requestId, int sensorId, PointerContext pc) {
mSensors.get(sensorId).getScheduler().getCurrentClientIfMatches(requestId, (client) -> {
if (!(client instanceof Udfps)) {
Slog.e(getTag(), "onPointerUp received during client: " + client);
return;
}
((Udfps) client).onPointerUp();
((Udfps) client).onPointerUp(pc);
});
}

View File

@@ -30,6 +30,7 @@ import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.IInvalidationCallback;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback;
import android.hardware.fingerprint.Fingerprint;
@@ -807,25 +808,24 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
}
@Override
public void onPointerDown(long requestId, int sensorId, int x, int y,
float minor, float major) {
public void onPointerDown(long requestId, int sensorId, PointerContext pc) {
mScheduler.getCurrentClientIfMatches(requestId, (client) -> {
if (!(client instanceof Udfps)) {
Slog.w(TAG, "onFingerDown received during client: " + client);
return;
}
((Udfps) client).onPointerDown(x, y, minor, major);
((Udfps) client).onPointerDown(pc);
});
}
@Override
public void onPointerUp(long requestId, int sensorId) {
public void onPointerUp(long requestId, int sensorId, PointerContext pc) {
mScheduler.getCurrentClientIfMatches(requestId, (client) -> {
if (!(client instanceof Udfps)) {
Slog.w(TAG, "onFingerDown received during client: " + client);
return;
}
((Udfps) client).onPointerUp();
((Udfps) client).onPointerUp(pc);
});
}

View File

@@ -21,6 +21,7 @@ import android.annotation.Nullable;
import android.app.trust.TrustManager;
import android.content.ContentResolver;
import android.content.Context;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
@@ -441,8 +442,7 @@ public class Fingerprint21UdfpsMock extends Fingerprint21 implements TrustManage
}
@Override
public void onPointerDown(long requestId, int sensorId, int x, int y, float minor,
float major) {
public void onPointerDown(long requestId, int sensorId, PointerContext pc) {
mHandler.post(() -> {
Slog.d(TAG, "onFingerDown");
final AuthenticationConsumer lastAuthenticatedConsumer =
@@ -489,7 +489,7 @@ public class Fingerprint21UdfpsMock extends Fingerprint21 implements TrustManage
}
@Override
public void onPointerUp(long requestId, int sensorId) {
public void onPointerUp(long requestId, int sensorId, PointerContext pc) {
mHandler.post(() -> {
Slog.d(TAG, "onFingerUp");

View File

@@ -24,6 +24,7 @@ import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricManager.Authenticators;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.ISidefpsController;
@@ -234,11 +235,11 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi
}
@Override
public void onPointerDown(int x, int y, float minor, float major) {
public void onPointerDown(PointerContext pc) {
mIsPointerDown = true;
mState = STATE_STARTED;
mALSProbeCallback.getProbe().enable();
UdfpsHelper.onFingerDown(getFreshDaemon(), x, y, minor, major);
UdfpsHelper.onFingerDown(getFreshDaemon(), (int) pc.x, (int) pc.y, pc.minor, pc.major);
if (getListener() != null) {
try {
@@ -250,7 +251,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi
}
@Override
public void onPointerUp() {
public void onPointerUp(PointerContext pc) {
mIsPointerDown = false;
mState = STATE_STARTED_PAUSED_ATTEMPTED;
mALSProbeCallback.getProbe().disable();

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricOverlayConstants;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
import android.hardware.fingerprint.IUdfpsOverlay;
import android.hardware.fingerprint.IUdfpsOverlayController;
@@ -110,13 +111,13 @@ class FingerprintDetectClient extends AcquisitionClient<IBiometricsFingerprint>
}
@Override
public void onPointerDown(int x, int y, float minor, float major) {
public void onPointerDown(PointerContext pc) {
mIsPointerDown = true;
UdfpsHelper.onFingerDown(getFreshDaemon(), x, y, minor, major);
UdfpsHelper.onFingerDown(getFreshDaemon(), (int) pc.x, (int) pc.y, pc.minor, pc.major);
}
@Override
public void onPointerUp() {
public void onPointerUp(PointerContext pc) {
mIsPointerDown = false;
UdfpsHelper.onFingerUp(getFreshDaemon());
}

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricStateListener;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
@@ -168,13 +169,13 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint
}
@Override
public void onPointerDown(int x, int y, float minor, float major) {
public void onPointerDown(PointerContext pc) {
mIsPointerDown = true;
UdfpsHelper.onFingerDown(getFreshDaemon(), x, y, minor, major);
UdfpsHelper.onFingerDown(getFreshDaemon(), (int) pc.x, (int) pc.y, pc.minor, pc.major);
}
@Override
public void onPointerUp() {
public void onPointerUp(PointerContext pc) {
mIsPointerDown = false;
UdfpsHelper.onFingerUp(getFreshDaemon());
}

View File

@@ -16,8 +16,6 @@
package com.android.server.biometrics.sensors.fingerprint.aidl;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyFloat;
@@ -87,7 +85,7 @@ public class FingerprintAuthenticationClientTest {
private static final int USER_ID = 8;
private static final long OP_ID = 7;
private static final long REQUEST_ID = 88;
private static final int POINTER_ID = 0;
private static final int POINTER_ID = 3;
private static final int TOUCH_X = 8;
private static final int TOUCH_Y = 20;
private static final float TOUCH_MAJOR = 4.4f;
@@ -135,8 +133,6 @@ public class FingerprintAuthenticationClientTest {
@Captor
private ArgumentCaptor<OperationContext> mOperationContextCaptor;
@Captor
private ArgumentCaptor<PointerContext> mPointerContextCaptor;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
private final TestLooper mLooper = new TestLooper();
@@ -176,7 +172,10 @@ public class FingerprintAuthenticationClientTest {
public void pointerUp_v1() throws RemoteException {
final FingerprintAuthenticationClient client = createClient(1);
client.start(mCallback);
client.onPointerUp();
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
client.onPointerUp(pc);
verify(mHal).onPointerUp(eq(POINTER_ID));
verify(mHal, never()).onPointerUpWithContext(any());
@@ -186,10 +185,17 @@ public class FingerprintAuthenticationClientTest {
public void pointerDown_v1() throws RemoteException {
final FingerprintAuthenticationClient client = createClient(1);
client.start(mCallback);
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
verify(mHal).onPointerDown(eq(0),
eq(TOUCH_X), eq(TOUCH_Y), eq(TOUCH_MAJOR), eq(TOUCH_MINOR));
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
pc.x = TOUCH_X;
pc.y = TOUCH_Y;
pc.minor = TOUCH_MINOR;
pc.major = TOUCH_MAJOR;
client.onPointerDown(pc);
verify(mHal).onPointerDown(eq(POINTER_ID), eq(TOUCH_X), eq(TOUCH_Y), eq(TOUCH_MINOR),
eq(TOUCH_MAJOR));
verify(mHal, never()).onPointerDownWithContext(any());
}
@@ -197,26 +203,30 @@ public class FingerprintAuthenticationClientTest {
public void pointerUpWithContext_v2() throws RemoteException {
final FingerprintAuthenticationClient client = createClient(2);
client.start(mCallback);
client.onPointerUp();
verify(mHal).onPointerUpWithContext(mPointerContextCaptor.capture());
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
client.onPointerUp(pc);
verify(mHal).onPointerUpWithContext(eq(pc));
verify(mHal, never()).onPointerUp(eq(POINTER_ID));
final PointerContext pContext = mPointerContextCaptor.getValue();
assertThat(pContext.pointerId).isEqualTo(POINTER_ID);
}
@Test
public void pointerDownWithContext_v2() throws RemoteException {
final FingerprintAuthenticationClient client = createClient(2);
client.start(mCallback);
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
verify(mHal).onPointerDownWithContext(mPointerContextCaptor.capture());
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
pc.x = TOUCH_X;
pc.y = TOUCH_Y;
pc.minor = TOUCH_MINOR;
pc.major = TOUCH_MAJOR;
client.onPointerDown(pc);
verify(mHal).onPointerDownWithContext(eq(pc));
verify(mHal, never()).onPointerDown(anyInt(), anyInt(), anyInt(), anyFloat(), anyFloat());
final PointerContext pContext = mPointerContextCaptor.getValue();
assertThat(pContext.pointerId).isEqualTo(POINTER_ID);
}
@Test

View File

@@ -18,8 +18,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -74,7 +72,7 @@ public class FingerprintEnrollClientTest {
private static final byte[] HAT = new byte[69];
private static final int USER_ID = 8;
private static final long REQUEST_ID = 9;
private static final int POINTER_ID = 0;
private static final int POINTER_ID = 3;
private static final int TOUCH_X = 8;
private static final int TOUCH_Y = 20;
private static final float TOUCH_MAJOR = 4.4f;
@@ -153,7 +151,10 @@ public class FingerprintEnrollClientTest {
public void pointerUp_v1() throws RemoteException {
final FingerprintEnrollClient client = createClient(1);
client.start(mCallback);
client.onPointerUp();
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
client.onPointerUp(pc);
verify(mHal).onPointerUp(eq(POINTER_ID));
verify(mHal, never()).onPointerUpWithContext(any());
@@ -163,10 +164,17 @@ public class FingerprintEnrollClientTest {
public void pointerDown_v1() throws RemoteException {
final FingerprintEnrollClient client = createClient(1);
client.start(mCallback);
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
verify(mHal).onPointerDown(eq(0),
eq(TOUCH_X), eq(TOUCH_Y), eq(TOUCH_MAJOR), eq(TOUCH_MINOR));
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
pc.x = TOUCH_X;
pc.y = TOUCH_Y;
pc.minor = TOUCH_MINOR;
pc.major = TOUCH_MAJOR;
client.onPointerDown(pc);
verify(mHal).onPointerDown(eq(POINTER_ID), eq(TOUCH_X), eq(TOUCH_Y), eq(TOUCH_MINOR),
eq(TOUCH_MAJOR));
verify(mHal, never()).onPointerDownWithContext(any());
}
@@ -174,26 +182,30 @@ public class FingerprintEnrollClientTest {
public void pointerUpWithContext_v2() throws RemoteException {
final FingerprintEnrollClient client = createClient(2);
client.start(mCallback);
client.onPointerUp();
verify(mHal).onPointerUpWithContext(mPointerContextCaptor.capture());
verify(mHal, never()).onPointerUp(eq(POINTER_ID));
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
client.onPointerUp(pc);
final PointerContext pContext = mPointerContextCaptor.getValue();
assertThat(pContext.pointerId).isEqualTo(POINTER_ID);
verify(mHal).onPointerUpWithContext(eq(pc));
verify(mHal, never()).onPointerUp(anyInt());
}
@Test
public void pointerDownWithContext_v2() throws RemoteException {
final FingerprintEnrollClient client = createClient(2);
client.start(mCallback);
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
verify(mHal).onPointerDownWithContext(mPointerContextCaptor.capture());
PointerContext pc = new PointerContext();
pc.pointerId = POINTER_ID;
pc.x = TOUCH_X;
pc.y = TOUCH_Y;
pc.minor = TOUCH_MINOR;
pc.major = TOUCH_MAJOR;
client.onPointerDown(pc);
verify(mHal).onPointerDownWithContext(eq(pc));
verify(mHal, never()).onPointerDown(anyInt(), anyInt(), anyInt(), anyFloat(), anyFloat());
final PointerContext pContext = mPointerContextCaptor.getValue();
assertThat(pContext.pointerId).isEqualTo(POINTER_ID);
}
@Test
@@ -204,8 +216,10 @@ public class FingerprintEnrollClientTest {
verify(mLuxProbe).enable();
client.onAcquired(2, 0);
client.onPointerUp();
client.onPointerDown(TOUCH_X, TOUCH_Y, TOUCH_MAJOR, TOUCH_MINOR);
PointerContext pc = new PointerContext();
client.onPointerUp(pc);
client.onPointerDown(pc);
verify(mLuxProbe, never()).disable();
verify(mLuxProbe, never()).destroy();