diff --git a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java index d7de97abdd..bd27d3479e 100644 --- a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java +++ b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java @@ -113,8 +113,6 @@ public final class CastPlayer extends BasePlayer { private static final long PROGRESS_REPORT_PERIOD_MS = 1000; private static final long[] EMPTY_TRACK_ID_ARRAY = new long[0]; - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); private final CastContext castContext; private final MediaItemConverter mediaItemConverter; @@ -728,7 +726,7 @@ public final class CastPlayer extends BasePlayer { /** This method is not supported and returns an empty {@link CueGroup}. */ @Override public CueGroup getCurrentCues() { - return EMPTY_CUE_GROUP; + return CueGroup.EMPTY_TIME_ZERO; } /** This method is not supported and always returns {@link DeviceInfo#UNKNOWN}. */ diff --git a/libraries/common/src/main/java/androidx/media3/common/text/CueGroup.java b/libraries/common/src/main/java/androidx/media3/common/text/CueGroup.java index 67e58eb065..df11b6fda8 100644 --- a/libraries/common/src/main/java/androidx/media3/common/text/CueGroup.java +++ b/libraries/common/src/main/java/androidx/media3/common/text/CueGroup.java @@ -35,6 +35,12 @@ import java.util.List; /** Class to represent the state of active {@link Cue Cues} at a particular time. */ public final class CueGroup implements Bundleable { + + /** An empty group with no {@link Cue Cues} and presentation time of zero. */ + @UnstableApi + public static final CueGroup EMPTY_TIME_ZERO = + new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); + /** * The cues in this group. * diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java index 95df21be23..c02a601b4b 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java @@ -356,7 +356,7 @@ import java.util.concurrent.TimeoutException; } else { audioSessionId = Util.generateAudioSessionIdV21(applicationContext); } - currentCueGroup = new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); + currentCueGroup = CueGroup.EMPTY_TIME_ZERO; throwsWhenUsingWrongThread = true; addListener(analyticsCollector); @@ -1001,7 +1001,7 @@ import java.util.concurrent.TimeoutException; checkNotNull(priorityTaskManager).remove(C.PRIORITY_PLAYBACK); isPriorityTaskManagerRegistered = false; } - currentCueGroup = new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); + currentCueGroup = CueGroup.EMPTY_TIME_ZERO; playerReleased = true; } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaController.java b/libraries/session/src/main/java/androidx/media3/session/MediaController.java index 7f09bd14ca..67ab936fb7 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaController.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaController.java @@ -56,7 +56,6 @@ import androidx.media3.common.util.Consumer; import androidx.media3.common.util.Log; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; -import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -175,9 +174,6 @@ public class MediaController implements Player { "MediaController method is called from a wrong thread." + " See javadoc of MediaController for details."; - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); - /** A builder for {@link MediaController}. */ public static final class Builder { @@ -1595,7 +1591,7 @@ public class MediaController implements Player { @Override public CueGroup getCurrentCues() { verifyApplicationThread(); - return isConnected() ? impl.getCurrentCues() : EMPTY_CUE_GROUP; + return isConnected() ? impl.getCurrentCues() : CueGroup.EMPTY_TIME_ZERO; } @Override diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java index 25489f6527..ad7687d4af 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java @@ -108,8 +108,6 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; private static final long AGGREGATES_CALLBACKS_WITHIN_TIMEOUT_MS = 500L; private static final int VOLUME_FLAGS = AudioManager.FLAG_SHOW_UI; - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); /* package */ final Context context; private final MediaController instance; @@ -1029,7 +1027,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Override public CueGroup getCurrentCues() { Log.w(TAG, "Session doesn't support getting Cue"); - return EMPTY_CUE_GROUP; + return CueGroup.EMPTY_TIME_ZERO; } @Override @@ -2122,7 +2120,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; /* playlistMetadata= */ playlistMetadata, /* volume= */ 1.0f, /* audioAttributes= */ audioAttributes, - /* cueGroup= */ EMPTY_CUE_GROUP, + /* cueGroup= */ CueGroup.EMPTY_TIME_ZERO, /* deviceInfo= */ deviceInfo, /* deviceVolume= */ deviceVolume, /* deviceMuted= */ deviceMuted, diff --git a/libraries/session/src/main/java/androidx/media3/session/PlayerInfo.java b/libraries/session/src/main/java/androidx/media3/session/PlayerInfo.java index 655bf5634c..c1b67c6207 100644 --- a/libraries/session/src/main/java/androidx/media3/session/PlayerInfo.java +++ b/libraries/session/src/main/java/androidx/media3/session/PlayerInfo.java @@ -46,7 +46,6 @@ import androidx.media3.common.Tracks; import androidx.media3.common.VideoSize; import androidx.media3.common.text.CueGroup; import androidx.media3.common.util.Assertions; -import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.lang.annotation.Documented; import java.lang.annotation.Retention; @@ -59,9 +58,6 @@ import java.lang.annotation.Target; */ /* package */ class PlayerInfo implements Bundleable { - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); - public static class Builder { @Nullable private PlaybackException playerError; @@ -376,7 +372,7 @@ import java.lang.annotation.Target; MediaMetadata.EMPTY, /* volume= */ 1f, AudioAttributes.DEFAULT, - /* cueGroup = */ EMPTY_CUE_GROUP, + CueGroup.EMPTY_TIME_ZERO, DeviceInfo.UNKNOWN, /* deviceVolume= */ 0, /* deviceMuted= */ false, @@ -906,7 +902,9 @@ import java.lang.annotation.Target; : AudioAttributes.CREATOR.fromBundle(audioAttributesBundle); @Nullable Bundle cueGroupBundle = bundle.getBundle(keyForField(FIELD_CUE_GROUP)); CueGroup cueGroup = - cueGroupBundle == null ? EMPTY_CUE_GROUP : CueGroup.CREATOR.fromBundle(cueGroupBundle); + cueGroupBundle == null + ? CueGroup.EMPTY_TIME_ZERO + : CueGroup.CREATOR.fromBundle(cueGroupBundle); @Nullable Bundle deviceInfoBundle = bundle.getBundle(keyForField(FIELD_DEVICE_INFO)); DeviceInfo deviceInfo = deviceInfoBundle == null diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java index ee5be83e47..98da0c7c05 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java @@ -112,8 +112,6 @@ import java.util.concurrent.Callable; public class MediaSessionProviderService extends Service { private static final String TAG = "MSProviderService"; - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); private Map sessionMap = new HashMap<>(); private RemoteMediaSessionStub sessionBinder; @@ -363,7 +361,9 @@ public class MediaSessionProviderService extends Service { } Bundle cueGroupBundle = config.getBundle(KEY_CURRENT_CUE_GROUP); player.cueGroup = - cueGroupBundle == null ? EMPTY_CUE_GROUP : CueGroup.CREATOR.fromBundle(cueGroupBundle); + cueGroupBundle == null + ? CueGroup.EMPTY_TIME_ZERO + : CueGroup.CREATOR.fromBundle(cueGroupBundle); @Nullable Bundle deviceInfoBundle = config.getBundle(KEY_DEVICE_INFO); if (deviceInfoBundle != null) { player.deviceInfo = DeviceInfo.CREATOR.fromBundle(deviceInfoBundle); diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/MockPlayer.java b/libraries/test_session_current/src/main/java/androidx/media3/session/MockPlayer.java index db40129a99..b4dcf94755 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/MockPlayer.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/MockPlayer.java @@ -197,8 +197,6 @@ public class MockPlayer implements Player { private final ArraySet listeners = new ArraySet<>(); private final ImmutableMap<@Method Integer, ConditionVariable> conditionVariables = createMethodConditionVariables(); - private static final CueGroup EMPTY_CUE_GROUP = - new CueGroup(ImmutableList.of(), /* presentationTimeUs= */ 0); @Nullable PlaybackException playerError; public AudioAttributes audioAttributes; @@ -280,7 +278,7 @@ public class MockPlayer implements Player { repeatMode = Player.REPEAT_MODE_OFF; videoSize = VideoSize.UNKNOWN; volume = 1.0f; - cueGroup = EMPTY_CUE_GROUP; + cueGroup = CueGroup.EMPTY_TIME_ZERO; deviceInfo = DeviceInfo.UNKNOWN; seekPositionMs = C.TIME_UNSET; seekMediaItemIndex = C.INDEX_UNSET;