diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Util.java b/libraries/common/src/main/java/androidx/media3/common/util/Util.java index 45a408a24e..42f5527a8f 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/Util.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/Util.java @@ -21,6 +21,7 @@ import static androidx.media3.common.C.AUXILIARY_TRACK_TYPE_DEPTH_LINEAR; import static androidx.media3.common.C.AUXILIARY_TRACK_TYPE_DEPTH_METADATA; import static androidx.media3.common.C.AUXILIARY_TRACK_TYPE_ORIGINAL; import static androidx.media3.common.C.AUXILIARY_TRACK_TYPE_UNDEFINED; +import static androidx.media3.common.Player.COMMAND_GET_TIMELINE; import static androidx.media3.common.Player.COMMAND_PLAY_PAUSE; import static androidx.media3.common.Player.COMMAND_PREPARE; import static androidx.media3.common.Player.COMMAND_SEEK_BACK; @@ -3548,6 +3549,20 @@ public final class Util { return Integer.toString(i, Character.MAX_RADIX); } + /** + * Returns whether a play-pause button should be enabled or not. + * + * @param player The {@link Player}. May be {@code null}. + */ + @EnsuresNonNullIf(result = true, expression = "#1") + @UnstableApi + public static boolean shouldEnablePlayPauseButton(@Nullable Player player) { + return player != null + && player.isCommandAvailable(COMMAND_PLAY_PAUSE) + && (!player.isCommandAvailable(COMMAND_GET_TIMELINE) + || !player.getCurrentTimeline().isEmpty()); + } + /** * Returns whether a play button should be presented on a UI element for playback control. If * {@code false}, a pause button should be shown instead. 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 5cf8455122..1239dc3af1 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -18,7 +18,6 @@ package androidx.media3.ui; import static androidx.media3.common.Player.COMMAND_GET_CURRENT_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_GET_TIMELINE; import static androidx.media3.common.Player.COMMAND_GET_TRACKS; -import static androidx.media3.common.Player.COMMAND_PLAY_PAUSE; import static androidx.media3.common.Player.COMMAND_SEEK_BACK; import static androidx.media3.common.Player.COMMAND_SEEK_FORWARD; import static androidx.media3.common.Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM; @@ -1178,7 +1177,7 @@ public class PlayerControlView extends FrameLayout { playPauseButton.setImageDrawable(drawable); playPauseButton.setContentDescription(resources.getString(stringRes)); - boolean enablePlayPause = shouldEnablePlayPauseButton(); + boolean enablePlayPause = Util.shouldEnablePlayPauseButton(player); updateButton(enablePlayPause, playPauseButton); } } @@ -1732,13 +1731,6 @@ public class PlayerControlView extends FrameLayout { } } - private boolean shouldEnablePlayPauseButton() { - return player != null - && player.isCommandAvailable(COMMAND_PLAY_PAUSE) - && (!player.isCommandAvailable(COMMAND_GET_TIMELINE) - || !player.getCurrentTimeline().isEmpty()); - } - @SuppressLint("InlinedApi") private static boolean isHandledMediaKey(int keyCode) { return keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD