From 98e039d8727344b00c0e37c8b4f9c07cd6561543 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 8 Mar 2022 19:19:12 +0000 Subject: [PATCH] Rollback of https://github.com/androidx/media/commit/aa22bc2dbeb01fbe3a9905adc8e87a859a3f3dca *** Original commit *** Fix PlayerView touch handling Overriding onTouchEvent was causing multiple issues, and appears to be unnecessary. Removing the override fixes: 1. StyledPlayerView accessibility issue where "hide player controls" actually toggled play/pause. 2. Delivery of events to a registered OnClickListener when useController is false. 3. Delivery of events to a registered OnLongClickListener in all configurations. 4. Incorrectly treating a sequence of touch events that exit the bounds of the vi... *** PiperOrigin-RevId: 433262414 --- .../java/androidx/media3/ui/PlayerView.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java index 269b697436..be9ed95f61 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -311,7 +311,6 @@ public class PlayerView extends FrameLayout implements AdViewProvider { LayoutInflater.from(context).inflate(playerLayoutId, this); setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); - setClickable(true); // Content frame. contentFrame = findViewById(R.id.exo_content_frame); @@ -1016,10 +1015,30 @@ public class PlayerView extends FrameLayout implements AdViewProvider { return subtitleView; } + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!useController() || player == null) { + return false; + } + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + isTouching = true; + return true; + case MotionEvent.ACTION_UP: + if (isTouching) { + isTouching = false; + return performClick(); + } + return false; + default: + return false; + } + } + @Override public boolean performClick() { - toggleControllerVisibility(); - return super.performClick(); + super.performClick(); + return toggleControllerVisibility(); } @Override @@ -1115,15 +1134,18 @@ public class PlayerView extends FrameLayout implements AdViewProvider { return false; } - private void toggleControllerVisibility() { + private boolean toggleControllerVisibility() { if (!useController() || player == null) { - return; + return false; } if (!controller.isFullyVisible()) { maybeShowController(true); + return true; } else if (controllerHideOnTouch) { controller.hide(); + return true; } + return false; } /** Shows the playback controls, but only if forced or shown indefinitely. */