Propagate finger down to KeyguardUpdateMonitor

Test: atest UdfpsControllerTest
Test: Verified manually that fingerDown events
are propagated to KeyguardUpdateMonitor

Change-Id: I17e6936ef9da9ca350d627dc20c7f37aa05f8d3b
This commit is contained in:
Joshua McCloskey
2022-04-22 04:26:49 +00:00
parent 504ba4c64e
commit 458380010d
3 changed files with 36 additions and 0 deletions

View File

@@ -1512,6 +1512,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
handleFingerprintAuthenticated(userId, isStrongBiometric);
};
/**
* Propagates a pointer down event to keyguard.
*/
public void onUdfpsPointerDown(int sensorId) {
mFingerprintAuthenticationCallback.onUdfpsPointerDown(sensorId);
}
/**
* Propagates a pointer up event to keyguard.
*/
public void onUdfpsPointerUp(int sensorId) {
mFingerprintAuthenticationCallback.onUdfpsPointerUp(sensorId);
}
@VisibleForTesting
final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback
= new AuthenticationCallback() {
@@ -1553,6 +1567,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
Trace.endSection();
}
/**
* Note, this is currently called from UdfpsController.
*/
@Override
public void onUdfpsPointerDown(int sensorId) {
Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId);
@@ -1562,6 +1579,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
}
/**
* Note, this is currently called from UdfpsController.
*/
@Override
public void onUdfpsPointerUp(int sensorId) {
Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId);

View File

@@ -813,6 +813,11 @@ public class UdfpsController implements DozeReceiver {
mOnFingerDown = true;
if (mAlternateTouchProvider != null) {
mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major);
mFgExecutor.execute(() -> {
if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) {
mKeyguardUpdateMonitor.onUdfpsPointerDown((int) requestId);
}
});
} else {
mFingerprintManager.onPointerDown(requestId, mSensorProps.sensorId, x, y, minor, major);
}
@@ -838,6 +843,11 @@ public class UdfpsController implements DozeReceiver {
if (mOnFingerDown) {
if (mAlternateTouchProvider != null) {
mAlternateTouchProvider.onPointerUp(requestId);
mFgExecutor.execute(() -> {
if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) {
mKeyguardUpdateMonitor.onUdfpsPointerUp((int) requestId);
}
});
} else {
mFingerprintManager.onPointerUp(requestId, mSensorProps.sensorId);
}

View File

@@ -408,6 +408,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
// Configure UdfpsView to accept the ACTION_DOWN event
when(mUdfpsView.isIlluminationRequested()).thenReturn(false);
when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true);
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
// GIVEN that the overlay is showing
mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID,
@@ -421,6 +422,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
MotionEvent moveEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, 0, 0, 0);
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent);
moveEvent.recycle();
mFgExecutor.runAllReady();
// THEN FingerprintManager is notified about onPointerDown
verify(mTouchProvider).onPointerDown(eq(TEST_REQUEST_ID),
eq(0), eq(0), eq(0f), eq(0f));
@@ -430,6 +432,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
// AND illumination begins
verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture());
verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE));
verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID));
// AND onIlluminatedRunnable notifies FingerprintManager about onUiReady
mOnIlluminatedRunnableCaptor.getValue().run();
InOrder inOrder = inOrder(mFingerprintManager, mLatencyTracker);
@@ -448,6 +451,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
// WHEN fingerprint is requested because of AOD interrupt
mUdfpsController.onAodInterrupt(0, 0, 2f, 3f);
mFgExecutor.runAllReady();
// THEN illumination begins
// AND onIlluminatedRunnable that notifies FingerprintManager is set
verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture());
@@ -456,6 +460,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */);
verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(),
anyFloat(), anyFloat());
verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID));
}
@Test
@@ -483,6 +488,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
mFgExecutor.runAllReady();
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
mUdfpsController.onAodInterrupt(0, 0, 0f, 0f);
mFgExecutor.runAllReady();
when(mUdfpsView.isIlluminationRequested()).thenReturn(true);
// WHEN it times out
mFgExecutor.advanceClockToNext();