From 49af9228db14e96f899d72242aa8b4d1c5328d4f Mon Sep 17 00:00:00 2001 From: theskyblockman Date: Sat, 24 Aug 2024 20:53:02 +0200 Subject: [PATCH 1/7] Added public-facing calls to set whether to show [fullScreenButton] or [minimalFullScreenButton] in PlayerView calling PlayerControlView --- .../androidx/media3/ui/PlayerControlView.java | 17 ++++++++++++++--- .../java/androidx/media3/ui/PlayerView.java | 10 ++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index a8e4c831b6..9b239fe8ca 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1575,14 +1575,25 @@ public class PlayerControlView extends FrameLayout { } private void onFullScreenButtonClicked(View v) { - if (onFullScreenModeChangedListener == null) { + updateIsFullScreen(!isFullScreen); + } + + /** + * Updates whether the controller is in full screen to its icon + * and reports it to to the listener. + * @param isFullScreen If the view is in full screen. + */ + public void updateIsFullScreen(boolean isFullScreen) { + boolean fullScreenModeChanged = this.isFullScreen != isFullScreen; + + if(fullScreenModeChanged && onFullScreenModeChangedListener == null) { return; } - isFullScreen = !isFullScreen; + this.isFullScreen = isFullScreen; updateFullScreenButtonForState(fullScreenButton, isFullScreen); updateFullScreenButtonForState(minimalFullScreenButton, isFullScreen); - if (onFullScreenModeChangedListener != null) { + if(fullScreenModeChanged && onFullScreenModeChangedListener != null) { onFullScreenModeChangedListener.onFullScreenModeChanged(isFullScreen); } } 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 e4c4d0b013..05a52a65d8 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -1139,6 +1139,16 @@ public class PlayerView extends FrameLayout implements AdViewProvider { controller.setOnFullScreenModeChangedListener(componentListener); } + /** + * Sets whether the fullscreen button is fullScreenButton or minimalFullScreenButton. + * + * @param isFullscreen Whether the player is currently in fullscreen. + */ + public void setFullscreenButtonState(boolean isFullscreen) { + Assertions.checkStateNotNull(controller); + controller.updateIsFullScreen(isFullscreen); + } + /** * Sets the {@link PlayerControlView.OnFullScreenModeChangedListener}. * From 4a4b3a3bc05c24711a8318ed1c39a9636a3ff271 Mon Sep 17 00:00:00 2001 From: theskyblockman Date: Wed, 4 Sep 2024 14:44:02 +0200 Subject: [PATCH 2/7] - Rephrased/Expanded javadocs for fullscreen methods - Replaced all occurrences of "FullScreen" to "Fullscreen" --- .../androidx/media3/ui/PlayerControlView.java | 29 +++++++++++-------- .../java/androidx/media3/ui/PlayerView.java | 7 +++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index 9b239fe8ca..388cf0c8bc 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1575,26 +1575,31 @@ public class PlayerControlView extends FrameLayout { } private void onFullScreenButtonClicked(View v) { - updateIsFullScreen(!isFullScreen); + updateIsFullscreen(!isFullScreen); } /** - * Updates whether the controller is in full screen to its icon - * and reports it to to the listener. - * @param isFullScreen If the view is in full screen. + * Updates whether the controller is in fullscreen, changing its fullscreen icon and reports it + * to to the listener. + * + *

For {@code isFullscreen} equals {@code true} the icon will be set + * to {@link R.drawable#exo_styled_controls_fullscreen_exit} or else + * {@link R.drawable#exo_styled_controls_fullscreen_enter}. + * + * @param isFullscreen If the view is in full screen. */ - public void updateIsFullScreen(boolean isFullScreen) { - boolean fullScreenModeChanged = this.isFullScreen != isFullScreen; + public void updateIsFullscreen(boolean isFullscreen) { + boolean fullscreenModeChanged = this.isFullScreen != isFullscreen; - if(fullScreenModeChanged && onFullScreenModeChangedListener == null) { + if (fullscreenModeChanged && onFullScreenModeChangedListener == null) { return; } - this.isFullScreen = isFullScreen; - updateFullScreenButtonForState(fullScreenButton, isFullScreen); - updateFullScreenButtonForState(minimalFullScreenButton, isFullScreen); - if(fullScreenModeChanged && onFullScreenModeChangedListener != null) { - onFullScreenModeChangedListener.onFullScreenModeChanged(isFullScreen); + this.isFullScreen = isFullscreen; + updateFullScreenButtonForState(fullScreenButton, isFullscreen); + updateFullScreenButtonForState(minimalFullScreenButton, isFullscreen); + if (fullscreenModeChanged && onFullScreenModeChangedListener != null) { + onFullScreenModeChangedListener.onFullScreenModeChanged(isFullscreen); } } 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 05a52a65d8..155310df95 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -1140,13 +1140,16 @@ public class PlayerView extends FrameLayout implements AdViewProvider { } /** - * Sets whether the fullscreen button is fullScreenButton or minimalFullScreenButton. + * Sets whether the player is currently in fullscreen, this will change the displayed icon. + * + *

If {@code isFullscreen} is {@code true}, {@link R.drawable#exo_styled_controls_fullscreen_exit} + * will be displayed or else {@link R.drawable#exo_styled_controls_fullscreen_enter}. * * @param isFullscreen Whether the player is currently in fullscreen. */ public void setFullscreenButtonState(boolean isFullscreen) { Assertions.checkStateNotNull(controller); - controller.updateIsFullScreen(isFullscreen); + controller.updateIsFullscreen(isFullscreen); } /** From c42f53fcc989312860a6099e8ec84a440ae7c3ae Mon Sep 17 00:00:00 2001 From: theskyblockman Date: Tue, 10 Sep 2024 18:54:34 +0200 Subject: [PATCH 3/7] Edited condition to exit updateIsFullscreen quickly --- .../ui/src/main/java/androidx/media3/ui/PlayerControlView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index 388cf0c8bc..b59a1a933e 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1591,13 +1591,14 @@ public class PlayerControlView extends FrameLayout { public void updateIsFullscreen(boolean isFullscreen) { boolean fullscreenModeChanged = this.isFullScreen != isFullscreen; - if (fullscreenModeChanged && onFullScreenModeChangedListener == null) { + if (!fullscreenModeChanged) { return; } this.isFullScreen = isFullscreen; updateFullScreenButtonForState(fullScreenButton, isFullscreen); updateFullScreenButtonForState(minimalFullScreenButton, isFullscreen); + if (fullscreenModeChanged && onFullScreenModeChangedListener != null) { onFullScreenModeChangedListener.onFullScreenModeChanged(isFullscreen); } From 370a4c00350b9b163a4641985c55a85cee169de9 Mon Sep 17 00:00:00 2001 From: theskyblockman Date: Tue, 10 Sep 2024 18:56:45 +0200 Subject: [PATCH 4/7] Deleted redundant check --- .../ui/src/main/java/androidx/media3/ui/PlayerControlView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index b59a1a933e..1d8235ef04 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1599,7 +1599,7 @@ public class PlayerControlView extends FrameLayout { updateFullScreenButtonForState(fullScreenButton, isFullscreen); updateFullScreenButtonForState(minimalFullScreenButton, isFullscreen); - if (fullscreenModeChanged && onFullScreenModeChangedListener != null) { + if (onFullScreenModeChangedListener != null) { onFullScreenModeChangedListener.onFullScreenModeChanged(isFullscreen); } } From 5536b73a08e7a3c92d573e966bec37ad1460aed5 Mon Sep 17 00:00:00 2001 From: oceanjules Date: Tue, 10 Sep 2024 18:28:29 +0100 Subject: [PATCH 5/7] Format with google-java-format --- .../java/androidx/media3/ui/PlayerControlView.java | 10 +++++----- .../src/main/java/androidx/media3/ui/PlayerView.java | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index 1d8235ef04..7d8eda1a20 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1579,12 +1579,12 @@ public class PlayerControlView extends FrameLayout { } /** - * Updates whether the controller is in fullscreen, changing its fullscreen icon and reports it - * to to the listener. + * Updates whether the controller is in fullscreen, changing its fullscreen icon and reports it to + * to the listener. * - *

For {@code isFullscreen} equals {@code true} the icon will be set - * to {@link R.drawable#exo_styled_controls_fullscreen_exit} or else - * {@link R.drawable#exo_styled_controls_fullscreen_enter}. + *

For {@code isFullscreen} equals {@code true} the icon will be set to {@link + * R.drawable#exo_styled_controls_fullscreen_exit} or else {@link + * R.drawable#exo_styled_controls_fullscreen_enter}. * * @param isFullscreen If the view is in full screen. */ 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 155310df95..9d051e8dd9 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -1142,8 +1142,9 @@ public class PlayerView extends FrameLayout implements AdViewProvider { /** * Sets whether the player is currently in fullscreen, this will change the displayed icon. * - *

If {@code isFullscreen} is {@code true}, {@link R.drawable#exo_styled_controls_fullscreen_exit} - * will be displayed or else {@link R.drawable#exo_styled_controls_fullscreen_enter}. + *

If {@code isFullscreen} is {@code true}, {@link + * R.drawable#exo_styled_controls_fullscreen_exit} will be displayed or else {@link + * R.drawable#exo_styled_controls_fullscreen_enter}. * * @param isFullscreen Whether the player is currently in fullscreen. */ From 9b75523fd944c9a09277b5c43965ff44f295a32c Mon Sep 17 00:00:00 2001 From: oceanjules Date: Tue, 10 Sep 2024 19:28:32 +0100 Subject: [PATCH 6/7] Add and format RELEASENOTES --- RELEASENOTES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 959ca6fc86..2e5f5a9f5e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -48,6 +48,12 @@ `PlayerView.setEnableComposeSurfaceSyncWorkaround` in order to opt-in ([#1237](https://github.com/androidx/media/issues/1237), [#1594](https://github.com/androidx/media/issues/1594)). + * Add `setFullscreenButtonState` to `PlayerView` to allow updates of + fullscreen button's icon on demand, i.e. out-of-band and not reactively + to a click interaction. + ([#1590](https://github.com/androidx/media/issues/1590), + [#184](https://github.com/androidx/media/issues/184), + [#10391](https://github.com/google/ExoPlayer/issues/10391)) * Downloads: * OkHttp Extension: * Cronet Extension: From 25bb8e411bee7263e2e92a1a086fc2f46ed1961d Mon Sep 17 00:00:00 2001 From: oceanjules Date: Tue, 10 Sep 2024 19:44:02 +0100 Subject: [PATCH 7/7] Make setFullscreenButtonState UnstableApi --- RELEASENOTES.md | 5 ++--- .../java/androidx/media3/ui/PlayerControlView.java | 10 ++++------ .../src/main/java/androidx/media3/ui/PlayerView.java | 7 ++++--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 2e5f5a9f5e..61452f12d6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -50,10 +50,9 @@ [#1594](https://github.com/androidx/media/issues/1594)). * Add `setFullscreenButtonState` to `PlayerView` to allow updates of fullscreen button's icon on demand, i.e. out-of-band and not reactively - to a click interaction. + to a click interaction ([#1590](https://github.com/androidx/media/issues/1590), - [#184](https://github.com/androidx/media/issues/184), - [#10391](https://github.com/google/ExoPlayer/issues/10391)) + [#184](https://github.com/androidx/media/issues/184)). * Downloads: * OkHttp Extension: * Cronet Extension: diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index 7d8eda1a20..f19d4e90b5 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -1582,16 +1582,14 @@ public class PlayerControlView extends FrameLayout { * Updates whether the controller is in fullscreen, changing its fullscreen icon and reports it to * to the listener. * - *

For {@code isFullscreen} equals {@code true} the icon will be set to {@link - * R.drawable#exo_styled_controls_fullscreen_exit} or else {@link - * R.drawable#exo_styled_controls_fullscreen_enter}. + *

For {@code isFullscreen} equals {@code true} the icon will be set to + * {@code @drawable/exo_styled_controls_fullscreen_exit} or else + * {@code @drawable/exo_styled_controls_fullscreen_enter}. * * @param isFullscreen If the view is in full screen. */ public void updateIsFullscreen(boolean isFullscreen) { - boolean fullscreenModeChanged = this.isFullScreen != isFullscreen; - - if (!fullscreenModeChanged) { + if (this.isFullScreen == isFullscreen) { return; } 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 9d051e8dd9..535802b098 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -1142,12 +1142,13 @@ public class PlayerView extends FrameLayout implements AdViewProvider { /** * Sets whether the player is currently in fullscreen, this will change the displayed icon. * - *

If {@code isFullscreen} is {@code true}, {@link - * R.drawable#exo_styled_controls_fullscreen_exit} will be displayed or else {@link - * R.drawable#exo_styled_controls_fullscreen_enter}. + *

If {@code isFullscreen} is {@code true}, + * {@code @drawable/exo_styled_controls_fullscreen_exit} will be displayed or else + * {@code @drawable/exo_styled_controls_fullscreen_enter}. * * @param isFullscreen Whether the player is currently in fullscreen. */ + @UnstableApi public void setFullscreenButtonState(boolean isFullscreen) { Assertions.checkStateNotNull(controller); controller.updateIsFullscreen(isFullscreen);