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

Commit 29ffcbdc authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Prevent IAE caused by empty media ids

Bluetooth naitive AVRCP device tracks path from the root node of
MediaBrowserService app. But for the root MediaItem, it can be an
empty string instead of the root id.

Bug: 235516512
Tag: #refactor
Test: atest BluetoothInstrumentationTests
Change-Id: I759f9c56f55326a1133743853070f63621d4a4a2
parent 635050b8
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -385,14 +385,23 @@ public class MediaPlayerList {
        }

        int playerIndex = Integer.parseInt(mediaId.substring(0, 2));
        String itemId = mediaId.substring(2);

        if (!haveMediaBrowser(playerIndex)) {
            e("playFolderItem: Do not have the a browsable player with ID " + playerIndex);
            return;
        }

        mBrowsablePlayers.get(playerIndex).playItem(itemId);
        BrowsedPlayerWrapper wrapper = mBrowsablePlayers.get(playerIndex);
        String itemId = mediaId.substring(2);
        if (TextUtils.isEmpty(itemId)) {
            itemId = wrapper.getRootId();
            if (TextUtils.isEmpty(itemId)) {
                e("playFolderItem: Failed to start playback with an empty media id.");
                return;
            }
            Log.i(TAG, "playFolderItem: Empty media id, trying with the root id for "
                    + wrapper.getPackageName());
        }
        wrapper.playItem(itemId);
    }

    void getFolderItemsMediaPlayerList(GetFolderItemsCallback cb) {
+1 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ public class AvrcpNativeInterface {
    }

    void playItem(int playerId, boolean nowPlaying, String mediaId) {
        d("playItem: playerId=" + playerId + " nowPlaying=" + nowPlaying + " mediaId" + mediaId);
        d("playItem: playerId=" + playerId + " nowPlaying=" + nowPlaying + " mediaId=" + mediaId);
        if (mAvrcpService == null) {
            Log.d(TAG, "playItem: AvrcpTargetService is null");
            return;