Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -1512,6 +1512,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab handleFingerprintAuthenticated(userId, isStrongBiometric); 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 @VisibleForTesting final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback = new AuthenticationCallback() { = new AuthenticationCallback() { Loading Loading @@ -1553,6 +1567,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.endSection(); Trace.endSection(); } } /** * Note, this is currently called from UdfpsController. */ @Override @Override public void onUdfpsPointerDown(int sensorId) { public void onUdfpsPointerDown(int sensorId) { Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); Loading @@ -1562,6 +1579,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } } } /** * Note, this is currently called from UdfpsController. */ @Override @Override public void onUdfpsPointerUp(int sensorId) { public void onUdfpsPointerUp(int sensorId) { Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -796,6 +796,11 @@ public class UdfpsController implements DozeReceiver { mOnFingerDown = true; mOnFingerDown = true; if (mAlternateTouchProvider != null) { if (mAlternateTouchProvider != null) { mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major); mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major); mFgExecutor.execute(() -> { if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { mKeyguardUpdateMonitor.onUdfpsPointerDown((int) requestId); } }); } else { } else { mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major); mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major); } } Loading @@ -821,6 +826,11 @@ public class UdfpsController implements DozeReceiver { if (mOnFingerDown) { if (mOnFingerDown) { if (mAlternateTouchProvider != null) { if (mAlternateTouchProvider != null) { mAlternateTouchProvider.onPointerUp(requestId); mAlternateTouchProvider.onPointerUp(requestId); mFgExecutor.execute(() -> { if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { mKeyguardUpdateMonitor.onUdfpsPointerUp((int) requestId); } }); } else { } else { mFingerprintManager.onPointerUp(requestId, mSensorId); mFingerprintManager.onPointerUp(requestId, mSensorId); } } Loading packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -564,6 +564,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // Configure UdfpsView to accept the ACTION_DOWN event // Configure UdfpsView to accept the ACTION_DOWN event when(mUdfpsView.isIlluminationRequested()).thenReturn(false); when(mUdfpsView.isIlluminationRequested()).thenReturn(false); when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // GIVEN that the overlay is showing // GIVEN that the overlay is showing mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID, mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID, Loading @@ -579,6 +580,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // FIX THIS TEST // FIX THIS TEST mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); moveEvent.recycle(); moveEvent.recycle(); mFgExecutor.runAllReady(); // THEN FingerprintManager is notified about onPointerDown // THEN FingerprintManager is notified about onPointerDown verify(mAlternateTouchProvider).onPointerDown(eq(TEST_REQUEST_ID), eq(0), eq(0), eq(0f), verify(mAlternateTouchProvider).onPointerDown(eq(TEST_REQUEST_ID), eq(0), eq(0), eq(0f), eq(0f)); eq(0f)); Loading @@ -588,6 +590,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // AND illumination begins // AND illumination begins verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE)); verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE)); verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); // AND onIlluminatedRunnable notifies FingerprintManager about onUiReady // AND onIlluminatedRunnable notifies FingerprintManager about onUiReady mOnIlluminatedRunnableCaptor.getValue().run(); mOnIlluminatedRunnableCaptor.getValue().run(); InOrder inOrder = inOrder(mFingerprintManager, mLatencyTracker); InOrder inOrder = inOrder(mFingerprintManager, mLatencyTracker); Loading @@ -606,6 +609,7 @@ public class UdfpsControllerTest extends SysuiTestCase { when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // WHEN fingerprint is requested because of AOD interrupt // WHEN fingerprint is requested because of AOD interrupt mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); mFgExecutor.runAllReady(); // THEN illumination begins // THEN illumination begins // AND onIlluminatedRunnable that notifies FingerprintManager is set // AND onIlluminatedRunnable that notifies FingerprintManager is set verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); Loading @@ -614,6 +618,7 @@ public class UdfpsControllerTest extends SysuiTestCase { eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */); eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */); verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(), verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(), anyFloat(), anyFloat()); anyFloat(), anyFloat()); verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); } } @Test @Test Loading Loading @@ -641,6 +646,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mFgExecutor.runAllReady(); mFgExecutor.runAllReady(); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); mFgExecutor.runAllReady(); when(mUdfpsView.isIlluminationRequested()).thenReturn(true); when(mUdfpsView.isIlluminationRequested()).thenReturn(true); // WHEN it times out // WHEN it times out mFgExecutor.advanceClockToNext(); mFgExecutor.advanceClockToNext(); Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -1512,6 +1512,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab handleFingerprintAuthenticated(userId, isStrongBiometric); 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 @VisibleForTesting final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback = new AuthenticationCallback() { = new AuthenticationCallback() { Loading Loading @@ -1553,6 +1567,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.endSection(); Trace.endSection(); } } /** * Note, this is currently called from UdfpsController. */ @Override @Override public void onUdfpsPointerDown(int sensorId) { public void onUdfpsPointerDown(int sensorId) { Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); Loading @@ -1562,6 +1579,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } } } /** * Note, this is currently called from UdfpsController. */ @Override @Override public void onUdfpsPointerUp(int sensorId) { public void onUdfpsPointerUp(int sensorId) { Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -796,6 +796,11 @@ public class UdfpsController implements DozeReceiver { mOnFingerDown = true; mOnFingerDown = true; if (mAlternateTouchProvider != null) { if (mAlternateTouchProvider != null) { mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major); mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major); mFgExecutor.execute(() -> { if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { mKeyguardUpdateMonitor.onUdfpsPointerDown((int) requestId); } }); } else { } else { mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major); mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major); } } Loading @@ -821,6 +826,11 @@ public class UdfpsController implements DozeReceiver { if (mOnFingerDown) { if (mOnFingerDown) { if (mAlternateTouchProvider != null) { if (mAlternateTouchProvider != null) { mAlternateTouchProvider.onPointerUp(requestId); mAlternateTouchProvider.onPointerUp(requestId); mFgExecutor.execute(() -> { if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { mKeyguardUpdateMonitor.onUdfpsPointerUp((int) requestId); } }); } else { } else { mFingerprintManager.onPointerUp(requestId, mSensorId); mFingerprintManager.onPointerUp(requestId, mSensorId); } } Loading
packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -564,6 +564,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // Configure UdfpsView to accept the ACTION_DOWN event // Configure UdfpsView to accept the ACTION_DOWN event when(mUdfpsView.isIlluminationRequested()).thenReturn(false); when(mUdfpsView.isIlluminationRequested()).thenReturn(false); when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // GIVEN that the overlay is showing // GIVEN that the overlay is showing mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID, mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID, Loading @@ -579,6 +580,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // FIX THIS TEST // FIX THIS TEST mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); moveEvent.recycle(); moveEvent.recycle(); mFgExecutor.runAllReady(); // THEN FingerprintManager is notified about onPointerDown // THEN FingerprintManager is notified about onPointerDown verify(mAlternateTouchProvider).onPointerDown(eq(TEST_REQUEST_ID), eq(0), eq(0), eq(0f), verify(mAlternateTouchProvider).onPointerDown(eq(TEST_REQUEST_ID), eq(0), eq(0), eq(0f), eq(0f)); eq(0f)); Loading @@ -588,6 +590,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // AND illumination begins // AND illumination begins verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE)); verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE)); verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); // AND onIlluminatedRunnable notifies FingerprintManager about onUiReady // AND onIlluminatedRunnable notifies FingerprintManager about onUiReady mOnIlluminatedRunnableCaptor.getValue().run(); mOnIlluminatedRunnableCaptor.getValue().run(); InOrder inOrder = inOrder(mFingerprintManager, mLatencyTracker); InOrder inOrder = inOrder(mFingerprintManager, mLatencyTracker); Loading @@ -606,6 +609,7 @@ public class UdfpsControllerTest extends SysuiTestCase { when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // WHEN fingerprint is requested because of AOD interrupt // WHEN fingerprint is requested because of AOD interrupt mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); mFgExecutor.runAllReady(); // THEN illumination begins // THEN illumination begins // AND onIlluminatedRunnable that notifies FingerprintManager is set // AND onIlluminatedRunnable that notifies FingerprintManager is set verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); Loading @@ -614,6 +618,7 @@ public class UdfpsControllerTest extends SysuiTestCase { eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */); eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */); verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(), verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(), anyFloat(), anyFloat()); anyFloat(), anyFloat()); verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); } } @Test @Test Loading Loading @@ -641,6 +646,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mFgExecutor.runAllReady(); mFgExecutor.runAllReady(); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); mFgExecutor.runAllReady(); when(mUdfpsView.isIlluminationRequested()).thenReturn(true); when(mUdfpsView.isIlluminationRequested()).thenReturn(true); // WHEN it times out // WHEN it times out mFgExecutor.advanceClockToNext(); mFgExecutor.advanceClockToNext(); Loading