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. */