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

Commit 864323be authored by Jin Seok Park's avatar Jin Seok Park Committed by Android (Google) Code Review
Browse files

Merge "AML: Remove unbundling MediaMetadata in MediaSessionRecord"

parents b73c564d a1385732
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -39,7 +39,7 @@ interface ISession {
    void destroy();
    void destroy();


    // These commands are for the TransportPerformer
    // These commands are for the TransportPerformer
    void setMetadata(in MediaMetadata metadata);
    void setMetadata(in MediaMetadata metadata, long duration, String metadataDescription);
    void setPlaybackState(in PlaybackState state);
    void setPlaybackState(in PlaybackState state);
    void setQueue(in ParceledListSlice queue);
    void setQueue(in ParceledListSlice queue);
    void setQueueTitle(CharSequence title);
    void setQueueTitle(CharSequence title);
+12 −2
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.media.MediaDescription;
import android.media.MediaMetadata;
import android.media.MediaMetadata;
import android.media.Rating;
import android.media.Rating;
import android.media.VolumeProvider;
import android.media.VolumeProvider;
import android.media.session.MediaSessionManager.RemoteUserInfo;
import android.net.Uri;
import android.net.Uri;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
@@ -40,7 +41,6 @@ import android.os.Parcelable;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ResultReceiver;
import android.os.UserHandle;
import android.os.UserHandle;
import android.media.session.MediaSessionManager.RemoteUserInfo;
import android.service.media.MediaBrowserService;
import android.service.media.MediaBrowserService;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Log;
import android.util.Log;
@@ -434,11 +434,21 @@ public final class MediaSession {
     * @see android.media.MediaMetadata.Builder#putBitmap
     * @see android.media.MediaMetadata.Builder#putBitmap
     */
     */
    public void setMetadata(@Nullable MediaMetadata metadata) {
    public void setMetadata(@Nullable MediaMetadata metadata) {
        long duration = -1;
        int fields = 0;
        MediaDescription description = null;
        if (metadata != null) {
        if (metadata != null) {
            metadata = (new MediaMetadata.Builder(metadata, mMaxBitmapSize)).build();
            metadata = (new MediaMetadata.Builder(metadata, mMaxBitmapSize)).build();
            if (metadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
                duration = metadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
            }
            }
            fields = metadata.size();
            description = metadata.getDescription();
        }
        String metadataDescription = "size=" + fields + ", description=" + description;

        try {
        try {
            mBinder.setMetadata(metadata);
            mBinder.setMetadata(metadata, duration, metadataDescription);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Log.wtf(TAG, "Dead object in setPlaybackState.", e);
            Log.wtf(TAG, "Dead object in setPlaybackState.", e);
        }
        }
+12 −16
Original line number Original line Diff line number Diff line
@@ -20,10 +20,10 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.content.pm.ParceledListSlice;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioManager;
import android.media.AudioManagerInternal;
import android.media.AudioManagerInternal;
import android.media.AudioSystem;
import android.media.AudioSystem;
import android.media.MediaDescription;
import android.media.MediaMetadata;
import android.media.MediaMetadata;
import android.media.Rating;
import android.media.Rating;
import android.media.VolumeProvider;
import android.media.VolumeProvider;
@@ -36,7 +36,6 @@ import android.media.session.MediaController.PlaybackInfo;
import android.media.session.MediaSession;
import android.media.session.MediaSession;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.PlaybackState;
import android.media.session.PlaybackState;
import android.media.AudioAttributes;
import android.net.Uri;
import android.net.Uri;
import android.os.Binder;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
@@ -94,8 +93,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
    private PendingIntent mLaunchIntent;
    private PendingIntent mLaunchIntent;


    // TransportPerformer fields
    // TransportPerformer fields

    private Bundle mExtras;
    private Bundle mExtras;
    // Note: Avoid unparceling the bundle inside MediaMetadata since unparceling in system process
    // may result in throwing an exception.
    private MediaMetadata mMetadata;
    private MediaMetadata mMetadata;
    private PlaybackState mPlaybackState;
    private PlaybackState mPlaybackState;
    private ParceledListSlice mQueue;
    private ParceledListSlice mQueue;
@@ -117,6 +117,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
    private boolean mIsActive = false;
    private boolean mIsActive = false;
    private boolean mDestroyed = false;
    private boolean mDestroyed = false;


    private long mDuration;
    private String mMetadataDescription;

    public MediaSessionRecord(int ownerPid, int ownerUid, int userId, String ownerPackageName,
    public MediaSessionRecord(int ownerPid, int ownerUid, int userId, String ownerPackageName,
            ISessionCallback cb, String tag, MediaSessionService service, Looper handlerLooper) {
            ISessionCallback cb, String tag, MediaSessionService service, Looper handlerLooper) {
        mOwnerPid = ownerPid;
        mOwnerPid = ownerPid;
@@ -451,7 +454,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        pw.println(indent + "audioAttrs=" + mAudioAttrs);
        pw.println(indent + "audioAttrs=" + mAudioAttrs);
        pw.println(indent + "volumeType=" + mVolumeType + ", controlType=" + mVolumeControlType
        pw.println(indent + "volumeType=" + mVolumeType + ", controlType=" + mVolumeControlType
                + ", max=" + mMaxVolume + ", current=" + mCurrentVolume);
                + ", max=" + mMaxVolume + ", current=" + mCurrentVolume);
        pw.println(indent + "metadata:" + getShortMetadataString());
        pw.println(indent + "metadata: " + mMetadataDescription);
        pw.println(indent + "queueTitle=" + mQueueTitle + ", size="
        pw.println(indent + "queueTitle=" + mQueueTitle + ", size="
                + (mQueue == null ? 0 : mQueue.getList().size()));
                + (mQueue == null ? 0 : mQueue.getList().size()));
    }
    }
@@ -494,13 +497,6 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        });
        });
    }
    }


    private String getShortMetadataString() {
        int fields = mMetadata == null ? 0 : mMetadata.size();
        MediaDescription description = mMetadata == null ? null : mMetadata
                .getDescription();
        return "size=" + fields + ", description=" + description;
    }

    private void logCallbackException(
    private void logCallbackException(
            String msg, ISessionControllerCallbackHolder holder, Exception e) {
            String msg, ISessionControllerCallbackHolder holder, Exception e) {
        Log.v(TAG, msg + ", this=" + this + ", callback package=" + holder.mPackageName
        Log.v(TAG, msg + ", this=" + this + ", callback package=" + holder.mPackageName
@@ -670,12 +666,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {


    private PlaybackState getStateWithUpdatedPosition() {
    private PlaybackState getStateWithUpdatedPosition() {
        PlaybackState state;
        PlaybackState state;
        long duration = -1;
        long duration;
        synchronized (mLock) {
        synchronized (mLock) {
            state = mPlaybackState;
            state = mPlaybackState;
            if (mMetadata != null && mMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
            duration = mDuration;
                duration = mMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
            }
        }
        }
        PlaybackState result = null;
        PlaybackState result = null;
        if (state != null) {
        if (state != null) {
@@ -793,7 +787,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        }
        }


        @Override
        @Override
        public void setMetadata(MediaMetadata metadata) {
        public void setMetadata(MediaMetadata metadata, long duration, String metadataDescription) {
            synchronized (mLock) {
            synchronized (mLock) {
                MediaMetadata temp = metadata == null ? null : new MediaMetadata.Builder(metadata)
                MediaMetadata temp = metadata == null ? null : new MediaMetadata.Builder(metadata)
                        .build();
                        .build();
@@ -804,6 +798,8 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
                    temp.size();
                    temp.size();
                }
                }
                mMetadata = temp;
                mMetadata = temp;
                mDuration = duration;
                mMetadataDescription = metadataDescription;
            }
            }
            mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
            mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
        }
        }