Merge "Pilfer once per gesture for UdfpsControllerOverlay" into udc-d1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
be4612cacf
@@ -188,6 +188,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
|
|||||||
@Nullable private VelocityTracker mVelocityTracker;
|
@Nullable private VelocityTracker mVelocityTracker;
|
||||||
// The ID of the pointer for which ACTION_DOWN has occurred. -1 means no pointer is active.
|
// The ID of the pointer for which ACTION_DOWN has occurred. -1 means no pointer is active.
|
||||||
private int mActivePointerId = -1;
|
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.
|
// The timestamp of the most recent touch log.
|
||||||
private long mTouchLogTime;
|
private long mTouchLogTime;
|
||||||
// The timestamp of the most recent log of a touch InteractionEvent.
|
// The timestamp of the most recent log of a touch InteractionEvent.
|
||||||
@@ -557,6 +559,11 @@ public class UdfpsController implements DozeReceiver, Dumpable {
|
|||||||
|| mPrimaryBouncerInteractor.isInTransit()) {
|
|| mPrimaryBouncerInteractor.isInTransit()) {
|
||||||
return false;
|
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,
|
final TouchProcessorResult result = mTouchProcessor.processTouch(event, mActivePointerId,
|
||||||
mOverlayParams);
|
mOverlayParams);
|
||||||
@@ -630,10 +637,11 @@ public class UdfpsController implements DozeReceiver, Dumpable {
|
|||||||
shouldPilfer = true;
|
shouldPilfer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute the pilfer
|
// Pilfer only once per gesture
|
||||||
if (shouldPilfer) {
|
if (shouldPilfer && !mPointerPilfered) {
|
||||||
mInputManager.pilferPointers(
|
mInputManager.pilferPointers(
|
||||||
mOverlay.getOverlayView().getViewRootImpl().getInputToken());
|
mOverlay.getOverlayView().getViewRootImpl().getInputToken());
|
||||||
|
mPointerPilfered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return processedTouch.getTouchData().isWithinBounds(mOverlayParams.getNativeSensorBounds());
|
return processedTouch.getTouchData().isWithinBounds(mOverlayParams.getNativeSensorBounds());
|
||||||
|
|||||||
@@ -1300,12 +1300,22 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
// WHEN ACTION_DOWN is received
|
// WHEN ACTION_DOWN is received
|
||||||
when(mSinglePointerTouchProcessor.processTouch(any(), anyInt(), any())).thenReturn(
|
when(mSinglePointerTouchProcessor.processTouch(any(), anyInt(), any())).thenReturn(
|
||||||
processorResultDown);
|
processorResultDown);
|
||||||
MotionEvent downEvent = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
|
MotionEvent event = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
|
||||||
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, downEvent);
|
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, event);
|
||||||
mBiometricExecutor.runAllReady();
|
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());
|
verify(mInputManager).pilferPointers(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user