diff --git a/core/api/current.txt b/core/api/current.txt index 04207145673fa..3cd249423d111 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -25218,6 +25218,7 @@ package android.media.session { method public float getPlaybackSpeed(); method public long getPosition(); method public int getState(); + method public boolean isActive(); method public void writeToParcel(android.os.Parcel, int); field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L field public static final long ACTION_PAUSE = 2L; // 0x2L diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index b653410aeb8d7..2be8c9aadcc60 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -161,10 +161,6 @@ package android.media.session { method public void onVolumeChanged(@NonNull android.media.session.MediaSession.Token, int); } - public final class PlaybackState implements android.os.Parcelable { - method public boolean isActiveState(); - } - } package android.net { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java index 3af0ff0dfb363..97139626a3d28 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java @@ -21,6 +21,7 @@ import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; import android.annotation.DrawableRes; import android.annotation.StringRes; +import android.annotation.SuppressLint; import android.app.PendingIntent; import android.app.RemoteAction; import android.content.BroadcastReceiver; @@ -210,13 +211,16 @@ public class PipMediaController { /** * Gets the set of media actions currently available. */ + // This is due to using PlaybackState#isActive, which is added in API 31. + // It can be removed when min_sdk of the app is set to 31 or greater. + @SuppressLint("NewApi") private List getMediaActions() { if (mMediaController == null || mMediaController.getPlaybackState() == null) { return Collections.emptyList(); } ArrayList mediaActions = new ArrayList<>(); - boolean isPlaying = mMediaController.getPlaybackState().isActiveState(); + boolean isPlaying = mMediaController.getPlaybackState().isActive(); long actions = mMediaController.getPlaybackState().getActions(); // Prev action diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java index e7d30ebba4b1a..9eacc74843f9d 100644 --- a/media/java/android/media/session/PlaybackState.java +++ b/media/java/android/media/session/PlaybackState.java @@ -19,7 +19,6 @@ import android.annotation.DrawableRes; import android.annotation.IntDef; import android.annotation.LongDef; import android.annotation.Nullable; -import android.annotation.SystemApi; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -493,15 +492,26 @@ public final class PlaybackState implements Parcelable { /** * Returns whether this is considered as an active playback state. - * @hide + *

+ * The playback state is considered as an active if the state is one of the following: + *

*/ - @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) - public boolean isActiveState() { + public boolean isActive() { switch (mState) { case PlaybackState.STATE_FAST_FORWARDING: case PlaybackState.STATE_REWINDING: case PlaybackState.STATE_SKIPPING_TO_PREVIOUS: case PlaybackState.STATE_SKIPPING_TO_NEXT: + case PlaybackState.STATE_SKIPPING_TO_QUEUE_ITEM: case PlaybackState.STATE_BUFFERING: case PlaybackState.STATE_CONNECTING: case PlaybackState.STATE_PLAYING: diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index b10d56b62acc2..abcf4fb939e1c 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -384,7 +384,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR if (mPlaybackState == null) { return false; } - return mPlaybackState.isActiveState() == expected; + return mPlaybackState.isActive() == expected; } /**