diff options
4 files changed, 41 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index ece35c522ec7..7b1db45ab338 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -913,7 +913,6 @@ public class FingerprintService extends SystemService { } provider.onPointerDown(requestId, sensorId, pc); } - @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) @Override @@ -1182,4 +1181,15 @@ public class FingerprintService extends SystemService { } } } + + void simulateVhalFingerDown() { + if (Utils.isVirtualEnabled(getContext())) { + Slog.i(TAG, "Simulate virtual HAL finger down event"); + final Pair<Integer, ServiceProvider> provider = mRegistry.getSingleProvider(); + if (provider != null) { + provider.second.simulateVhalFingerDown(UserHandle.getCallingUserId(), + provider.first); + } + } + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintShellCommand.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintShellCommand.java index 636413f75cf5..dc6a63f82bb1 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintShellCommand.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintShellCommand.java @@ -45,6 +45,8 @@ public class FingerprintShellCommand extends ShellCommand { return doHelp(); case "sync": return doSync(); + case "fingerdown": + return doSimulateVhalFingerDown(); default: getOutPrintWriter().println("Unrecognized command: " + cmd); } @@ -62,6 +64,8 @@ public class FingerprintShellCommand extends ShellCommand { pw.println(" Print this help text."); pw.println(" sync"); pw.println(" Sync enrollments now (virtualized sensors only)."); + pw.println(" fingerdown"); + pw.println(" Simulate finger down event (virtualized sensors only)."); } private int doHelp() { @@ -73,4 +77,9 @@ public class FingerprintShellCommand extends ShellCommand { mService.syncEnrollmentsNow(); return 0; } + + private int doSimulateVhalFingerDown() { + mService.simulateVhalFingerDown(); + return 0; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index 004af2c2ad62..a2ede8d937a8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -157,4 +157,11 @@ public interface ServiceProvider extends * @param sensorId sensor ID of the associated operation */ default void scheduleWatchdog(int sensorId) {} + + /** + * Simulate fingerprint down touch event for virtual HAL + * @param userId user ID + * @param sensorId sensor ID + */ + default void simulateVhalFingerDown(int userId, int sensorId) {}; } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index 9b2ea1589275..6f69b252a7c8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -856,4 +856,18 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi } biometricScheduler.startWatchdog(); } + + @Override + public void simulateVhalFingerDown(int userId, int sensorId) { + Slog.d(getTag(), "Simulate virtual HAL finger down event"); + final AidlSession session = mFingerprintSensors.get(sensorId).getSessionForUser(userId); + final PointerContext pc = new PointerContext(); + try { + session.getSession().onPointerDownWithContext(pc); + session.getSession().onUiReady(); + session.getSession().onPointerUpWithContext(pc); + } catch (RemoteException e) { + Slog.e(getTag(), "failed hal operation ", e); + } + } } |