Cannot pan in browser if magnification is enabled.
1. We cache some events to see if the user wants to trigger magnification. If no magnification is triggered we inject these events with adjusted time and down time to prevent subsequent transformations being confused by stale events. After the cached events, which always have a down, are injected we need to also update the down time of all subsequent non cached events. bug:7379388 Change-Id: I41d8b831cc1016a0ee8f9c5ef5f42eb60a6f64d9
This commit is contained in:
@@ -176,6 +176,8 @@ public final class ScreenMagnifier implements EventStreamTransformation {
|
||||
private PointerCoords[] mTempPointerCoords;
|
||||
private PointerProperties[] mTempPointerProperties;
|
||||
|
||||
private long mDelegatingStateDownTime;
|
||||
|
||||
public ScreenMagnifier(Context context) {
|
||||
mContext = context;
|
||||
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
||||
@@ -265,10 +267,15 @@ public final class ScreenMagnifier implements EventStreamTransformation {
|
||||
|
||||
private void handleMotionEventStateDelegating(MotionEvent event,
|
||||
MotionEvent rawEvent, int policyFlags) {
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
||||
if (mDetectingStateHandler.mDelayedEventQueue == null) {
|
||||
transitionToState(STATE_DETECTING);
|
||||
}
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_DOWN: {
|
||||
mDelegatingStateDownTime = event.getDownTime();
|
||||
} break;
|
||||
case MotionEvent.ACTION_UP: {
|
||||
if (mDetectingStateHandler.mDelayedEventQueue == null) {
|
||||
transitionToState(STATE_DETECTING);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
if (mNext != null) {
|
||||
// If the event is within the magnified portion of the screen we have
|
||||
@@ -295,6 +302,13 @@ public final class ScreenMagnifier implements EventStreamTransformation {
|
||||
coords, 0, 0, 1.0f, 1.0f, event.getDeviceId(), 0, event.getSource(),
|
||||
event.getFlags());
|
||||
}
|
||||
// We cache some events to see if the user wants to trigger magnification.
|
||||
// If no magnification is triggered we inject these events with adjusted
|
||||
// time and down time to prevent subsequent transformations being confused
|
||||
// by stale events. After the cached events, which always have a down, are
|
||||
// injected we need to also update the down time of all subsequent non cached
|
||||
// events. All delegated events cached and non-cached are delivered here.
|
||||
event.setDownTime(mDelegatingStateDownTime);
|
||||
mNext.onMotionEvent(event, rawEvent, policyFlags);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user