From fc1d60beb9c7fc5e2977d94b4a41a75577216240 Mon Sep 17 00:00:00 2001 From: bachinger Date: Fri, 12 Apr 2024 03:12:26 -0700 Subject: [PATCH] Do not set a duration for live streams A live window with changing duration can't be properly displayed in a media notification. The duration constantly changes and creates a nervous jumping seekbar that is not really useful. This change sets the duration for live streams to `C.TIME_UNSET` when publishing the player state to the platform session. This way no duration is sent to the platform session which prevents media controls from drawing a seekbar. Issue: androidx/media#1256 PiperOrigin-RevId: 624112541 --- RELEASENOTES.md | 3 +++ .../java/androidx/media3/session/MediaSessionLegacyStub.java | 5 ++++- .../src/main/java/androidx/media3/session/PlayerWrapper.java | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e6e68257cb..2e7c2d3bbc 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -19,6 +19,9 @@ * Muxers: * IMA extension: * Session: + * Hide seekbar in the media notification for live streams by not setting + the duration into the platform session metadata + ([#1256](https://github.com/androidx/media/issues/1256)). * UI: * Downloads: * OkHttp Extension: diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java index 9d3f380908..e1d90c77d1 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -1292,7 +1292,10 @@ import org.checkerframework.checker.initialization.qual.Initialized; PlayerWrapper player = sessionImpl.getPlayerWrapper(); @Nullable MediaItem currentMediaItem = player.getCurrentMediaItemWithCommandCheck(); MediaMetadata newMediaMetadata = player.getMediaMetadataWithCommandCheck(); - long newDurationMs = player.getDurationWithCommandCheck(); + long newDurationMs = + player.isCurrentMediaItemLiveWithCommandCheck() + ? C.TIME_UNSET + : player.getDurationWithCommandCheck(); String newMediaId = currentMediaItem != null ? currentMediaItem.mediaId : MediaItem.DEFAULT_MEDIA_ID; @Nullable diff --git a/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java b/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java index cdf97c8265..a0a3faf294 100644 --- a/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java +++ b/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java @@ -982,6 +982,10 @@ import java.util.List; return super.isCurrentMediaItemLive(); } + public boolean isCurrentMediaItemLiveWithCommandCheck() { + return isCommandAvailable(COMMAND_GET_CURRENT_MEDIA_ITEM) && isCurrentMediaItemLive(); + } + @Override public boolean isCurrentMediaItemSeekable() { verifyApplicationThread();