Merge "fix(magnification): don't crash when reciving unexpected motion events." into tm-qpr-dev am: 43456eee7f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19139528 Change-Id: Ief4d8e85451dd37c84039a76711f454ab4db6ed1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -184,7 +184,12 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
mPanningScalingState.mScrollGestureDetector.onTouchEvent(event);
|
mPanningScalingState.mScrollGestureDetector.onTouchEvent(event);
|
||||||
mPanningScalingState.mScaleGestureDetector.onTouchEvent(event);
|
mPanningScalingState.mScaleGestureDetector.onTouchEvent(event);
|
||||||
|
|
||||||
stateHandler.onMotionEvent(event, rawEvent, policyFlags);
|
try {
|
||||||
|
stateHandler.onMotionEvent(event, rawEvent, policyFlags);
|
||||||
|
} catch (GestureException e) {
|
||||||
|
Slog.e(mLogTag, "Error processing motion event", e);
|
||||||
|
clearAndTransitionToStateDetecting();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -281,7 +286,8 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags);
|
void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags)
|
||||||
|
throws GestureException;
|
||||||
|
|
||||||
default void clear() {}
|
default void clear() {}
|
||||||
|
|
||||||
@@ -439,7 +445,8 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
private boolean mLastMoveOutsideMagnifiedRegion;
|
private boolean mLastMoveOutsideMagnifiedRegion;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
|
public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags)
|
||||||
|
throws GestureException {
|
||||||
final int action = event.getActionMasked();
|
final int action = event.getActionMasked();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ACTION_POINTER_DOWN: {
|
case ACTION_POINTER_DOWN: {
|
||||||
@@ -449,7 +456,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
break;
|
break;
|
||||||
case ACTION_MOVE: {
|
case ACTION_MOVE: {
|
||||||
if (event.getPointerCount() != 1) {
|
if (event.getPointerCount() != 1) {
|
||||||
throw new IllegalStateException("Should have one pointer down.");
|
throw new GestureException("Should have one pointer down.");
|
||||||
}
|
}
|
||||||
final float eventX = event.getX();
|
final float eventX = event.getX();
|
||||||
final float eventY = event.getY();
|
final float eventY = event.getY();
|
||||||
@@ -475,7 +482,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
|
|
||||||
case ACTION_DOWN:
|
case ACTION_DOWN:
|
||||||
case ACTION_POINTER_UP: {
|
case ACTION_POINTER_UP: {
|
||||||
throw new IllegalArgumentException(
|
throw new GestureException(
|
||||||
"Unexpected event type: " + MotionEvent.actionToString(action));
|
"Unexpected event type: " + MotionEvent.actionToString(action));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1087,4 +1094,13 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
|
|||||||
mGestureHandler.mDetectingState.setShortcutTriggered(false);
|
mGestureHandler.mDetectingState.setShortcutTriggered(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates an error with a gesture handler or state.
|
||||||
|
*/
|
||||||
|
private static class GestureException extends Exception {
|
||||||
|
GestureException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user