summaryrefslogtreecommitdiff
path: root/core/java/android/widget/MediaController.java
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2013-11-06 11:53:56 -0800
committerRobert Shih <robertshih@google.com>2013-11-15 17:14:35 -0800
commitcfe4b59334d72abaedcc2f9cea10979069ac6c1c (patch)
tree4e9cd881fded9a01239d61ddc591191807efb942 /core/java/android/widget/MediaController.java
parent431b4359e4be6426aaa30ae7b6552f4310d4d9d6 (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.java14
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;
}