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
1 file changed