diff options
| author | Robert Shih <robertshih@google.com> | 2013-11-06 11:53:56 -0800 |
|---|---|---|
| committer | Robert Shih <robertshih@google.com> | 2013-11-15 17:14:35 -0800 |
| commit | cfe4b59334d72abaedcc2f9cea10979069ac6c1c (patch) | |
| tree | 4e9cd881fded9a01239d61ddc591191807efb942 /core/java/android/widget/MediaController.java | |
| parent | 431b4359e4be6426aaa30ae7b6552f4310d4d9d6 (diff) | |
MediaController does not check for cancelled motions in onTouchEvent, causing
nested invocations of WindowManagerGlobal.addView. Sample stack trace below.
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:228)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
android.widget.MediaController.show(MediaController.java:346)
android.widget.MediaController.onTouchEvent(MediaController.java:445)
android.view.View.dispatchTouchEvent(View.java:7690)
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2184)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2186)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2186)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2186)
android.view.ViewGroup.cancelAndClearTouchTargets(ViewGroup.java:2049)
android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2567)
android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:2836)
android.view.ViewRootImpl.doDie(ViewRootImpl.java:5259)
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:233)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
android.widget.MediaController.show(MediaController.java:346)
Duplicated views are consequently added to WindowManagerGlobal.mViews.
Subsequent calls to WindowManagerGlobal.removeView does not remove the
duplicated entry. Another subsequent call to WindowManagerGlobal.addView
detects the extra entry and fails.
Bug: 11399773
Change-Id: I1e07fcaf341fbae1b0f93bed0f42645801b9df2d
Diffstat (limited to 'core/java/android/widget/MediaController.java')
| -rw-r--r-- | core/java/android/widget/MediaController.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java index 9c61fd6997ea..546cc5f654b7 100644 --- a/core/java/android/widget/MediaController.java +++ b/core/java/android/widget/MediaController.java @@ -442,7 +442,19 @@ public class MediaController extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent event) { - show(sDefaultTimeout); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + show(0); // show until hide is called + break; + case MotionEvent.ACTION_UP: + show(sDefaultTimeout); // start timeout + break; + case MotionEvent.ACTION_CANCEL: + hide(); + break; + default: + break; + } return true; } |
