Merge "Pilfer once per gesture for UdfpsControllerOverlay" into udc-d1-dev am: be4612cacf

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23797186

Change-Id: Iad5fee8c45b5da4bae4d84cbe4955e718119be48
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Austin Delgado
2023-06-26 19:56:05 +00:00
committed by Automerger Merge Worker
2 changed files with 24 additions and 6 deletions

View File

@@ -189,6 +189,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
@Nullable private VelocityTracker mVelocityTracker;
// The ID of the pointer for which ACTION_DOWN has occurred. -1 means no pointer is active.
private int mActivePointerId = -1;
// Whether a pointer has been pilfered for current gesture
private boolean mPointerPilfered = false;
// The timestamp of the most recent touch log.
private long mTouchLogTime;
// The timestamp of the most recent log of a touch InteractionEvent.
@@ -560,6 +562,11 @@ public class UdfpsController implements DozeReceiver, Dumpable {
|| mPrimaryBouncerInteractor.isInTransit()) {
return false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_HOVER_ENTER) {
// Reset on ACTION_DOWN, start of new gesture
mPointerPilfered = false;
}
final TouchProcessorResult result = mTouchProcessor.processTouch(event, mActivePointerId,
mOverlayParams);
@@ -633,10 +640,11 @@ public class UdfpsController implements DozeReceiver, Dumpable {
shouldPilfer = true;
}
// Execute the pilfer
if (shouldPilfer) {
// Pilfer only once per gesture
if (shouldPilfer && !mPointerPilfered) {
mInputManager.pilferPointers(
mOverlay.getOverlayView().getViewRootImpl().getInputToken());
mPointerPilfered = true;
}
return processedTouch.getTouchData().isWithinBounds(mOverlayParams.getNativeSensorBounds());

View File

@@ -1316,12 +1316,22 @@ public class UdfpsControllerTest extends SysuiTestCase {
// WHEN ACTION_DOWN is received
when(mSinglePointerTouchProcessor.processTouch(any(), anyInt(), any())).thenReturn(
processorResultDown);
MotionEvent downEvent = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, downEvent);
MotionEvent event = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, event);
mBiometricExecutor.runAllReady();
downEvent.recycle();
// THEN the touch is pilfered
// WHEN ACTION_MOVE is received after
final TouchProcessorResult processorResultUnchanged =
new TouchProcessorResult.ProcessedTouch(
InteractionEvent.UNCHANGED, 1 /* pointerId */, touchData);
when(mSinglePointerTouchProcessor.processTouch(any(), anyInt(), any())).thenReturn(
processorResultUnchanged);
event.setAction(ACTION_MOVE);
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, event);
mBiometricExecutor.runAllReady();
event.recycle();
// THEN only pilfer once on the initial down
verify(mInputManager).pilferPointers(any());
}