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

Commit 69dc40b5 authored by Cheney Ni's avatar Cheney Ni
Browse files

Always assign a free ID to the new MediaPlayer

It used current size plus 1 as the new MediaPlayer's ID in previous
design and if a player was removed before, the ID of size+1 maybe was
still in used but a ID < size+1 was freed.

This change finds a free ID by checking if the number is not in the
mMediaPlayerIds so we never use same ID in two player.

Bug: 110511529
Test: manually switching players by force-stop / disabled
runtest bluetooth -c com.android.bluetooth.avrcp.MediaPlayerWrapperTest

Change-Id: Ia9e67a34b5915ad615746e6b334c1596ee639c1a
parent 41f2785c
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ public class MediaPlayerList {
                for (BrowsedPlayerWrapper wrapper : players) {
                    // Generate new id and add the browsable player
                    if (!mMediaPlayerIds.containsKey(wrapper.getPackageName())) {
                        mMediaPlayerIds.put(wrapper.getPackageName(), mMediaPlayerIds.size() + 1);
                        mMediaPlayerIds.put(wrapper.getPackageName(), getFreeMediaPlayerId());
                    }

                    d("Adding Browser Wrapper for " + wrapper.getPackageName() + " with id "
@@ -206,6 +206,12 @@ public class MediaPlayerList {
        return BLUETOOTH_PLAYER_ID;
    }

    int getFreeMediaPlayerId() {
        int id = 0;
        while (mMediaPlayerIds.containsValue(++id)) {}
        return id;
    }

    MediaPlayerWrapper getActivePlayer() {
        return mMediaPlayers.get(mActivePlayerId);
    }
@@ -405,7 +411,7 @@ public class MediaPlayerList {
        // that key.
        String packageName = controller.getPackageName();
        if (!mMediaPlayerIds.containsKey(packageName)) {
            mMediaPlayerIds.put(packageName, mMediaPlayerIds.size() + 1);
            mMediaPlayerIds.put(packageName, getFreeMediaPlayerId());
        }

        int playerId = mMediaPlayerIds.get(packageName);