Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a66c40bf authored by RoboErik's avatar RoboErik Committed by Erik Pasternak
Browse files

Update MediaSession APIs for council feedback

-Changes MediaSessionManager.SessionsListener to OnActiveSessionsChangedListener
and makes it an interface.
-Renames MediaController.VolumeInfo to MediaController.AudioInfo
-Renames MediaSession.Track to MediaSession.Item

bug:17059552
Change-Id: I3a0b4371700ad6657972c312a5ab89ddfac6df5b
parent f1381deb
Loading
Loading
Loading
Loading
+31 −32
Original line number Diff line number Diff line
@@ -16623,33 +16623,41 @@ package android.media.session {
    method public void adjustVolume(int, int);
    method public android.media.routing.MediaRouter.Delegate createMediaRouterDelegate();
    method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
    method public android.media.session.MediaController.AudioInfo getAudioInfo();
    method public android.os.Bundle getExtras();
    method public long getFlags();
    method public android.app.PendingIntent getLaunchActivity();
    method public android.media.MediaMetadata getMetadata();
    method public java.lang.String getPackageName();
    method public android.media.session.PlaybackState getPlaybackState();
    method public java.util.List<android.media.session.MediaSession.Track> getQueue();
    method public java.util.List<android.media.session.MediaSession.Item> getQueue();
    method public java.lang.CharSequence getQueueTitle();
    method public int getRatingType();
    method public android.media.session.MediaSession.Token getSessionToken();
    method public android.media.session.MediaController.TransportControls getTransportControls();
    method public android.media.session.MediaController.VolumeInfo getVolumeInfo();
    method public void removeCallback(android.media.session.MediaController.Callback);
    method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
    method public void setVolumeTo(int, int);
  }
  public static final class MediaController.AudioInfo {
    method public android.media.AudioAttributes getAudioAttributes();
    method public int getCurrentVolume();
    method public int getMaxVolume();
    method public int getVolumeControl();
    method public int getVolumeType();
  }
  public static abstract class MediaController.Callback {
    ctor public MediaController.Callback();
    method public void onAudioInfoChanged(android.media.session.MediaController.AudioInfo);
    method public void onExtrasChanged(android.os.Bundle);
    method public void onMetadataChanged(android.media.MediaMetadata);
    method public void onPlaybackStateChanged(android.media.session.PlaybackState);
    method public void onQueueChanged(java.util.List<android.media.session.MediaSession.Track>);
    method public void onQueueChanged(java.util.List<android.media.session.MediaSession.Item>);
    method public void onQueueTitleChanged(java.lang.CharSequence);
    method public void onSessionDestroyed();
    method public void onSessionEvent(java.lang.String, android.os.Bundle);
    method public void onVolumeInfoChanged(android.media.session.MediaController.VolumeInfo);
  }
  public final class MediaController.TransportControls {
@@ -16663,20 +16671,12 @@ package android.media.session {
    method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle);
    method public void sendCustomAction(java.lang.String, android.os.Bundle);
    method public void setRating(android.media.Rating);
    method public void skipToItem(long);
    method public void skipToNext();
    method public void skipToPrevious();
    method public void skipToTrack(long);
    method public void stop();
  }
  public static final class MediaController.VolumeInfo {
    method public android.media.AudioAttributes getAudioAttributes();
    method public int getCurrentVolume();
    method public int getMaxVolume();
    method public int getVolumeControl();
    method public int getVolumeType();
  }
  public final class MediaSession {
    ctor public MediaSession(android.content.Context, java.lang.String);
    method public android.media.session.MediaController getController();
@@ -16696,7 +16696,7 @@ package android.media.session {
    method public void setPlaybackState(android.media.session.PlaybackState);
    method public void setPlaybackToLocal(android.media.AudioAttributes);
    method public void setPlaybackToRemote(android.media.VolumeProvider);
    method public void setQueue(java.util.List<android.media.session.MediaSession.Track>);
    method public void setQueue(java.util.List<android.media.session.MediaSession.Item>);
    method public void setQueueTitle(java.lang.CharSequence);
    field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
    field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
@@ -16717,19 +16717,13 @@ package android.media.session {
    method public void onRewind();
    method public void onSeekTo(long);
    method public void onSetRating(android.media.Rating);
    method public void onSkipToItem(long);
    method public void onSkipToNext();
    method public void onSkipToPrevious();
    method public void onSkipToTrack(long);
    method public void onStop();
  }
  public static final class MediaSession.Token implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public static final class MediaSession.Track implements android.os.Parcelable {
  public static final class MediaSession.Item implements android.os.Parcelable {
    method public int describeContents();
    method public android.os.Bundle getExtras();
    method public long getId();
@@ -16740,20 +16734,25 @@ package android.media.session {
    field public static final int UNKNOWN_ID = -1; // 0xffffffff
  }
  public static final class MediaSession.Track.Builder {
    ctor public MediaSession.Track.Builder(android.media.MediaMetadata, long, android.net.Uri);
    method public android.media.session.MediaSession.Track build();
    method public android.media.session.MediaSession.Track.Builder setExtras(android.os.Bundle);
  public static final class MediaSession.Item.Builder {
    ctor public MediaSession.Item.Builder(android.media.MediaMetadata, long, android.net.Uri);
    method public android.media.session.MediaSession.Item build();
    method public android.media.session.MediaSession.Item.Builder setExtras(android.os.Bundle);
  }
  public static final class MediaSession.Token implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public final class MediaSessionManager {
    method public void addActiveSessionsListener(android.media.session.MediaSessionManager.SessionListener, android.content.ComponentName);
    method public void addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, android.content.ComponentName);
    method public java.util.List<android.media.session.MediaController> getActiveSessions(android.content.ComponentName);
    method public void removeActiveSessionsListener(android.media.session.MediaSessionManager.SessionListener);
    method public void removeOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener);
  }
  public static abstract class MediaSessionManager.SessionListener {
    ctor public MediaSessionManager.SessionListener(android.content.Context);
  public static abstract interface MediaSessionManager.OnActiveSessionsChangedListener {
    method public abstract void onActiveSessionsChanged(java.util.List<android.media.session.MediaController>);
  }
@@ -16777,9 +16776,9 @@ package android.media.session {
    field public static final long ACTION_REWIND = 8L; // 0x8L
    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
    field public static final long ACTION_SET_RATING = 128L; // 0x80L
    field public static final long ACTION_SKIP_TO_ITEM = 4096L; // 0x1000L
    field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
    field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
    field public static final long ACTION_SKIP_TO_TRACK = 4096L; // 0x1000L
    field public static final long ACTION_STOP = 1L; // 0x1L
    field public static final android.os.Parcelable.Creator CREATOR;
    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
@@ -16803,7 +16802,7 @@ package android.media.session {
    method public android.media.session.PlaybackState.Builder addCustomAction(android.media.session.PlaybackState.CustomAction);
    method public android.media.session.PlaybackState build();
    method public android.media.session.PlaybackState.Builder setActions(long);
    method public android.media.session.PlaybackState.Builder setActiveTrack(long);
    method public android.media.session.PlaybackState.Builder setActiveItem(long);
    method public android.media.session.PlaybackState.Builder setBufferPosition(long);
    method public android.media.session.PlaybackState.Builder setErrorMessage(java.lang.CharSequence);
    method public android.media.session.PlaybackState.Builder setState(int, long, float, long);
+18 −13
Original line number Diff line number Diff line
@@ -2332,17 +2332,20 @@ public class AudioManager {
    }

    /**
     * Registers a {@link RemoteController} instance for it to receive media metadata updates
     * and playback state information from applications using {@link RemoteControlClient}, and
     * control their playback.
     * <p>Registration requires the {@link OnClientUpdateListener} listener to be one of the
     * enabled notification listeners (see
     * Registers a {@link RemoteController} instance for it to receive media
     * metadata updates and playback state information from applications using
     * {@link RemoteControlClient}, and control their playback.
     * <p>
     * Registration requires the {@link OnClientUpdateListener} listener to be
     * one of the enabled notification listeners (see
     * {@link android.service.notification.NotificationListenerService}).
     *
     * @param rctlr the object to register.
     * @return true if the {@link RemoteController} was successfully registered, false if an
     *     error occurred, due to an internal system error, or insufficient permissions.
     * @return true if the {@link RemoteController} was successfully registered,
     *         false if an error occurred, due to an internal system error, or
     *         insufficient permissions.
     * @deprecated Use
     * {@link MediaSessionManager#addActiveSessionsListener(android.media.session.MediaSessionManager.SessionListener, ComponentName)}
     *             {@link MediaSessionManager#addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, ComponentName)}
     *             and {@link MediaController} instead.
     */
    @Deprecated
@@ -2355,11 +2358,13 @@ public class AudioManager {
    }

    /**
     * Unregisters a {@link RemoteController}, causing it to no longer receive media metadata and
     * playback state information, and no longer be capable of controlling playback.
     * Unregisters a {@link RemoteController}, causing it to no longer receive
     * media metadata and playback state information, and no longer be capable
     * of controlling playback.
     *
     * @param rctlr the object to unregister.
     * @deprecated Use
     * {@link MediaSessionManager#removeActiveSessionsListener(android.media.session.MediaSessionManager.SessionListener)}
     *             {@link MediaSessionManager#removeOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener)}
     *             instead.
     */
    @Deprecated
+6 −9
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ import java.util.List;
    private MetadataEditor mMetadataEditor;

    private MediaSessionManager mSessionManager;
    private MediaSessionManager.SessionListener mSessionListener;
    private MediaSessionManager.OnActiveSessionsChangedListener mSessionListener;
    private MediaController.Callback mSessionCb = new MediaControllerCallback();

    /**
@@ -140,7 +140,7 @@ import java.util.List;
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        mSessionManager = (MediaSessionManager) context
                .getSystemService(Context.MEDIA_SESSION_SERVICE);
        mSessionListener = new TopTransportSessionListener(context);
        mSessionListener = new TopTransportSessionListener();

        if (ActivityManager.isLowRamDeviceStatic()) {
            mMaxBitmapDimension = MAX_BITMAP_DIMENSION;
@@ -710,11 +710,8 @@ import java.util.List;
     * Listens for changes to the active session stack and replaces the
     * currently tracked session if it has changed.
     */
    private class TopTransportSessionListener extends MediaSessionManager.SessionListener {

        public TopTransportSessionListener(Context context) {
            super(context);
        }
    private class TopTransportSessionListener implements
            MediaSessionManager.OnActiveSessionsChangedListener {

        @Override
        public void onActiveSessionsChanged(List<MediaController> controllers) {
@@ -792,7 +789,7 @@ import java.util.List;
    void startListeningToSessions() {
        final ComponentName listenerComponent = new ComponentName(mContext,
                mOnClientUpdateListener.getClass());
        mSessionManager.addActiveSessionsListener(mSessionListener, listenerComponent,
        mSessionManager.addOnActiveSessionsChangedListener(mSessionListener, listenerComponent,
                UserHandle.myUserId(), null);
        mSessionListener.onActiveSessionsChanged(mSessionManager
                .getActiveSessions(listenerComponent));
@@ -806,7 +803,7 @@ import java.util.List;
     * @hide
     */
    void stopListeningToSessions() {
        mSessionManager.removeActiveSessionsListener(mSessionListener);
        mSessionManager.removeOnActiveSessionsChangedListener(mSessionListener);
        if (DEBUG) {
            Log.d(TAG, "Unregistered session listener for user "
                    + UserHandle.myUserId());
+28 −27
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ public final class MediaController {
     *
     * @return The current play queue or null.
     */
    public @Nullable List<MediaSession.Track> getQueue() {
    public @Nullable List<MediaSession.Item> getQueue() {
        try {
            ParceledListSlice queue = mSessionBinder.getQueue();
            if (queue != null) {
@@ -259,18 +259,18 @@ public final class MediaController {
    }

    /**
     * Get the current volume info for this session.
     * Get the current audio info for this session.
     *
     * @return The current volume info or null.
     * @return The current audio info or null.
     */
    public @Nullable VolumeInfo getVolumeInfo() {
    public @Nullable AudioInfo getAudioInfo() {
        try {
            ParcelableVolumeInfo result = mSessionBinder.getVolumeAttributes();
            return new VolumeInfo(result.volumeType, result.audioAttrs, result.controlType,
            return new AudioInfo(result.volumeType, result.audioAttrs, result.controlType,
                    result.maxVolume, result.currentVolume);

        } catch (RemoteException e) {
            Log.wtf(TAG, "Error calling getVolumeInfo.", e);
            Log.wtf(TAG, "Error calling getAudioInfo.", e);
        }
        return null;
    }
@@ -305,7 +305,7 @@ public final class MediaController {
     * {@link VolumeProvider#VOLUME_CONTROL_ABSOLUTE}. The flags in
     * {@link AudioManager} may be used to affect the handling.
     *
     * @see #getVolumeInfo()
     * @see #getAudioInfo()
     * @param value The value to set it to, between 0 and the reported max.
     * @param flags Any flags to pass with the command.
     */
@@ -326,7 +326,7 @@ public final class MediaController {
     * {@link VolumeProvider#VOLUME_CONTROL_ABSOLUTE}. The flags in
     * {@link AudioManager} may be used to affect the handling.
     *
     * @see #getVolumeInfo()
     * @see #getAudioInfo()
     * @param direction The direction to adjust the volume in.
     * @param flags Any flags to pass with the command.
     */
@@ -544,13 +544,14 @@ public final class MediaController {
        }

        /**
         * Override to handle changes to tracks in the queue.
         * Override to handle changes to items in the queue.
         *
         * @param queue A list of tracks in the current play queue. It should include the currently
         *              playing track as well as previous and upcoming tracks if applicable.
         * @see MediaSession.Track
         * @param queue A list of items in the current play queue. It should
         *            include the currently playing item as well as previous and
         *            upcoming items if applicable.
         * @see MediaSession.Item
         */
        public void onQueueChanged(@Nullable List<MediaSession.Track> queue) {
        public void onQueueChanged(@Nullable List<MediaSession.Item> queue) {
        }

        /**
@@ -572,11 +573,11 @@ public final class MediaController {
        }

        /**
         * Override to handle changes to the volume info.
         * Override to handle changes to the audio info.
         *
         * @param info The current volume info for this session.
         * @param info The current audio info for this session.
         */
        public void onVolumeInfoChanged(VolumeInfo info) {
        public void onAudioInfoChanged(AudioInfo info) {
        }
    }

@@ -638,14 +639,14 @@ public final class MediaController {
        }

        /**
         * Play a track with a specific id in the play queue.
         * If you specify an id that is not in the play queue, the behavior is undefined.
         * Play an item with a specific id in the play queue. If you specify an
         * id that is not in the play queue, the behavior is undefined.
         */
        public void skipToTrack(long id) {
        public void skipToItem(long id) {
            try {
                mSessionBinder.skipToTrack(id);
            } catch (RemoteException e) {
                Log.wtf(TAG, "Error calling skipToTrack(" + id + ").", e);
                Log.wtf(TAG, "Error calling skipToItem(" + id + ").", e);
            }
        }

@@ -784,9 +785,9 @@ public final class MediaController {
    }

    /**
     * Holds information about the way volume is handled for this session.
     * Holds information about the way audio is handled for this session.
     */
    public static final class VolumeInfo {
    public static final class AudioInfo {
        private final int mVolumeType;
        private final int mVolumeControl;
        private final int mMaxVolume;
@@ -796,7 +797,7 @@ public final class MediaController {
        /**
         * @hide
         */
        public VolumeInfo(int type, AudioAttributes attrs, int control, int max, int current) {
        public AudioInfo(int type, AudioAttributes attrs, int control, int max, int current) {
            mVolumeType = type;
            mAudioAttrs = attrs;
            mVolumeControl = control;
@@ -904,7 +905,7 @@ public final class MediaController {

        @Override
        public void onQueueChanged(ParceledListSlice parceledQueue) {
            List<MediaSession.Track> queue = parceledQueue.getList();
            List<MediaSession.Item> queue = parceledQueue.getList();
            MediaController controller = mController.get();
            if (controller != null) {
                controller.postMessage(MSG_UPDATE_QUEUE, queue, null);
@@ -931,7 +932,7 @@ public final class MediaController {
        public void onVolumeInfoChanged(ParcelableVolumeInfo pvi) {
            MediaController controller = mController.get();
            if (controller != null) {
                VolumeInfo info = new VolumeInfo(pvi.volumeType, pvi.audioAttrs, pvi.controlType,
                AudioInfo info = new AudioInfo(pvi.volumeType, pvi.audioAttrs, pvi.controlType,
                        pvi.maxVolume, pvi.currentVolume);
                controller.postMessage(MSG_UPDATE_VOLUME, info, null);
            }
@@ -960,7 +961,7 @@ public final class MediaController {
                    mCallback.onMetadataChanged((MediaMetadata) msg.obj);
                    break;
                case MSG_UPDATE_QUEUE:
                    mCallback.onQueueChanged((List<MediaSession.Track>) msg.obj);
                    mCallback.onQueueChanged((List<MediaSession.Item>) msg.obj);
                    break;
                case MSG_UPDATE_QUEUE_TITLE:
                    mCallback.onQueueTitleChanged((CharSequence) msg.obj);
@@ -969,7 +970,7 @@ public final class MediaController {
                    mCallback.onExtrasChanged((Bundle) msg.obj);
                    break;
                case MSG_UPDATE_VOLUME:
                    mCallback.onVolumeInfoChanged((VolumeInfo) msg.obj);
                    mCallback.onAudioInfoChanged((AudioInfo) msg.obj);
                    break;
                case MSG_DESTROYED:
                    mCallback.onSessionDestroyed();
+51 −48

File changed.

Preview size limit exceeded, changes collapsed.

Loading