From 9f811fd447206ed964fb576f55c1b38b76b45a4c Mon Sep 17 00:00:00 2001 From: Dake Gu Date: Fri, 1 Feb 2013 15:54:22 -0800 Subject: SimulatdDpad: fix NPE for event without device Fix a rare case that We lost device(due to network issue) and SimulatedDpad received the MotionEvent without device. b/8121964 Change-Id: Ie2948e6ff14a84422b05dda8ea87a3571f26f252 --- core/java/android/view/SimulatedDpad.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/SimulatedDpad.java b/core/java/android/view/SimulatedDpad.java index 0a37fddfa805..b03e4c71ec06 100644 --- a/core/java/android/view/SimulatedDpad.java +++ b/core/java/android/view/SimulatedDpad.java @@ -145,6 +145,10 @@ class SimulatedDpad { if (!synthesizeNewKeys) { mHandler.removeMessages(MSG_FLICK); } + InputDevice device = event.getDevice(); + if (device == null) { + return; + } // Store what time the touchpad event occurred final long time = SystemClock.uptimeMillis(); switch (event.getAction()) { @@ -157,7 +161,7 @@ class SimulatedDpad { mAccumulatedY = 0; mLastMoveX = 0; mLastMoveY = 0; - if (event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax() + if (device.getMotionRange(MotionEvent.AXIS_Y).getMax() * EDGE_SWIPE_THRESHOLD < event.getY()) { // Did the swipe begin in a valid region mEdgeSwipePossible = true; @@ -176,7 +180,7 @@ class SimulatedDpad { } // Checks if the swipe has crossed the midpoint // and if our swipe gesture is complete - if (event.getY() < (event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax() + if (event.getY() < (device.getMotionRange(MotionEvent.AXIS_Y).getMax() * .5) && mEdgeSwipePossible) { mEdgeSwipePossible = false; -- cgit v1.2.3-59-g8ed1b