From 311fc0b399f01a79169ae69aea05556043a7d7df Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Thu, 25 Sep 2014 13:55:01 +0200 Subject: [PATCH] Fixed a crash that could occur in the ObservableScrollView Bug: 17644848 Change-Id: I771c27f9fee8c0d5edfbd21998ea015fd1d6f685 --- .../statusbar/phone/ObservableScrollView.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java index b842a6ba348d7..1186a330064d0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ObservableScrollView.java @@ -34,6 +34,7 @@ public class ObservableScrollView extends ScrollView { private float mLastX; private float mLastY; private boolean mBlockFlinging; + private boolean mTouchCancelled; public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); @@ -87,9 +88,20 @@ public class ObservableScrollView extends ScrollView { @Override public boolean dispatchTouchEvent(MotionEvent ev) { - boolean isEndGuesture = (ev.getAction() == MotionEvent.ACTION_UP - || ev.getAction() == MotionEvent.ACTION_CANCEL); - if (!mTouchEnabled && !isEndGuesture) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + if (!mTouchEnabled) { + mTouchCancelled = true; + return false; + } + mTouchCancelled = false; + } else if (mTouchCancelled) { + return false; + } else if (!mTouchEnabled) { + MotionEvent cancel = MotionEvent.obtain(ev); + cancel.setAction(MotionEvent.ACTION_CANCEL); + super.dispatchTouchEvent(ev); + cancel.recycle(); + mTouchCancelled = true; return false; } return super.dispatchTouchEvent(ev);