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

Commit c46477dc authored by Ajay Panicker's avatar Ajay Panicker Committed by android-build-merger
Browse files

AVRCP: Fix NowPlayingList looping

am: 1059250b

Change-Id: I46f1f42d6a04ace62e16fb1f607e7280f7d3eb11
parents 24935b2d 1059250b
Loading
Loading
Loading
Loading
+23 −11
Original line number Original line Diff line number Diff line
@@ -54,12 +54,14 @@ public class AddressedMediaPlayer {
    private final List<MediaSession.QueueItem> mEmptyNowPlayingList;
    private final List<MediaSession.QueueItem> mEmptyNowPlayingList;


    private long mLastTrackIdSent;
    private long mLastTrackIdSent;
    private boolean mNowPlayingListUpdated;


    public AddressedMediaPlayer(AvrcpMediaRspInterface mediaInterface) {
    public AddressedMediaPlayer(AvrcpMediaRspInterface mediaInterface) {
        mEmptyNowPlayingList = new ArrayList<MediaSession.QueueItem>();
        mEmptyNowPlayingList = new ArrayList<MediaSession.QueueItem>();
        mNowPlayingList = mEmptyNowPlayingList;
        mNowPlayingList = mEmptyNowPlayingList;
        mMediaInterface = mediaInterface;
        mMediaInterface = mediaInterface;
        mLastTrackIdSent = MediaSession.QueueItem.UNKNOWN_ID;
        mLastTrackIdSent = MediaSession.QueueItem.UNKNOWN_ID;
        mNowPlayingListUpdated = false;
    }
    }


    void cleanup() {
    void cleanup() {
@@ -67,12 +69,12 @@ public class AddressedMediaPlayer {
        mNowPlayingList = mEmptyNowPlayingList;
        mNowPlayingList = mEmptyNowPlayingList;
        mMediaInterface = null;
        mMediaInterface = null;
        mLastTrackIdSent = MediaSession.QueueItem.UNKNOWN_ID;
        mLastTrackIdSent = MediaSession.QueueItem.UNKNOWN_ID;
        mNowPlayingListUpdated = false;
    }
    }


    /* get now playing list from addressed player */
    /* get now playing list from addressed player */
    void getFolderItemsNowPlaying(byte[] bdaddr, AvrcpCmd.FolderItemsCmd reqObj,
    void getFolderItemsNowPlaying(byte[] bdaddr, AvrcpCmd.FolderItemsCmd reqObj,
            @Nullable MediaController mediaController) {
            @Nullable MediaController mediaController) {
        if (DEBUG) Log.v(TAG, "getFolderItemsNowPlaying");
        if (mediaController == null) {
        if (mediaController == null) {
            // No players (if a player exists, we would have selected it)
            // No players (if a player exists, we would have selected it)
            Log.e(TAG, "mediaController = null, sending no available players response");
            Log.e(TAG, "mediaController = null, sending no available players response");
@@ -120,7 +122,10 @@ public class AddressedMediaPlayer {
            @Nullable MediaController mediaController) {
            @Nullable MediaController mediaController) {
        if (mediaController == null) return mEmptyNowPlayingList;
        if (mediaController == null) return mEmptyNowPlayingList;
        List<MediaSession.QueueItem> items = mediaController.getQueue();
        List<MediaSession.QueueItem> items = mediaController.getQueue();
        if (items == mNowPlayingList) return mNowPlayingList;
        if (items != null && !mNowPlayingListUpdated) {
            mNowPlayingList = items;
            return mNowPlayingList;
        }
        if (items == null) {
        if (items == null) {
            Log.i(TAG, "null queue from " + mediaController.getPackageName()
            Log.i(TAG, "null queue from " + mediaController.getPackageName()
                            + ", constructing single-item list");
                            + ", constructing single-item list");
@@ -131,12 +136,19 @@ public class AddressedMediaPlayer {
            items = new ArrayList<MediaSession.QueueItem>();
            items = new ArrayList<MediaSession.QueueItem>();
            items.add(current);
            items.add(current);
        }
        }

        mNowPlayingList = items;
        mNowPlayingList = items;
        // TODO (jamuraa): test to see if the single-item queue is the same and don't send

        if (mMediaInterface != null) {
        if (mNowPlayingListUpdated) sendNowPlayingListChanged();
            mMediaInterface.nowPlayingChangedRsp(AvrcpConstants.NOTIFICATION_TYPE_CHANGED);

        return mNowPlayingList;
    }
    }
        return items;

    private void sendNowPlayingListChanged() {
        if (mMediaInterface == null) return;
        mMediaInterface.uidsChangedRsp(AvrcpConstants.NOTIFICATION_TYPE_CHANGED);
        mMediaInterface.nowPlayingChangedRsp(AvrcpConstants.NOTIFICATION_TYPE_CHANGED);
        mNowPlayingListUpdated = false;
    }
    }


    /* Constructs a queue item representing the current playing metadata from an
    /* Constructs a queue item representing the current playing metadata from an
@@ -196,6 +208,7 @@ public class AddressedMediaPlayer {
    }
    }


    void updateNowPlayingList(@Nullable MediaController mediaController) {
    void updateNowPlayingList(@Nullable MediaController mediaController) {
        mNowPlayingListUpdated = true;
        getNowPlayingList(mediaController);
        getNowPlayingList(mediaController);
    }
    }


@@ -239,14 +252,13 @@ public class AddressedMediaPlayer {
    }
    }


    void sendTrackChangeWithId(int type, @Nullable MediaController mediaController) {
    void sendTrackChangeWithId(int type, @Nullable MediaController mediaController) {
        if (DEBUG)
        Log.d(TAG, "sendTrackChangeWithId (" + type + "): controller " + mediaController);
        Log.d(TAG, "sendTrackChangeWithId (" + type + "): controller " + mediaController);
        long qid = getActiveQueueItemId(mediaController);
        long qid = getActiveQueueItemId(mediaController);
        byte[] track = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array();
        byte[] track = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array();
        // The nowPlayingList changed: the new list has the full data for the current item
        if (type == AvrcpConstants.NOTIFICATION_TYPE_CHANGED) sendNowPlayingListChanged();
        mMediaInterface.trackChangedRsp(type, track);
        mMediaInterface.trackChangedRsp(type, track);
        mLastTrackIdSent = qid;
        mLastTrackIdSent = qid;
        // The nowPlaying might have changed.
        updateNowPlayingList(mediaController);
    }
    }


    /*
    /*
+1 −1
Original line number Original line Diff line number Diff line
@@ -2496,7 +2496,7 @@ public final class Avrcp {
            }
            }
        }
        }


        public void uidsChangedRsp(byte[] address, int type, int uidCounter) {
        public void uidsChangedRsp(int type) {
            if (!registerNotificationRspUIDsChangedNative(type, sUIDCounter)) {
            if (!registerNotificationRspUIDsChangedNative(type, sUIDCounter)) {
                Log.e(TAG, "registerNotificationRspUIDsChangedNative failed!");
                Log.e(TAG, "registerNotificationRspUIDsChangedNative failed!");
            }
            }
+1 −1
Original line number Original line Diff line number Diff line
@@ -45,7 +45,7 @@ public interface AvrcpMediaRspInterface {


    public void avalPlayerChangedRsp(byte[] address, int type);
    public void avalPlayerChangedRsp(byte[] address, int type);


    public void uidsChangedRsp(byte[] address, int type, int uidCounter);
    public void uidsChangedRsp(int type);


    public void nowPlayingChangedRsp(int type);
    public void nowPlayingChangedRsp(int type);