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

Commit 5fccde01 authored by vich's avatar vich Committed by Vic Huang
Browse files

Disconnect pending player when turn bluetooth off

Pending player connection status not handled when Bluetooth on/off
in a short time(<1 second). Disconnect pending player to prevent
ServiceConnectionLeadked when bluetooth turn off.

Bug: 123666648
Test: Manual bluetooth on/off test
Change-Id: Id7cb7295c67a6f138d0826c17c50db5ecdda4b17
parent 8334f7fd
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -152,11 +152,7 @@ public class BrowsablePlayerConnector {

                    case MSG_TIMEOUT: {
                        Log.v(TAG, "Timed out waiting for players");
                        for (BrowsedPlayerWrapper wrapper : mPendingPlayers) {
                            if (DEBUG) Log.d(TAG, "Disconnecting " + wrapper.getPackageName());
                            wrapper.disconnect();
                        }
                        mPendingPlayers.clear();
                        removePendingPlayers();
                    } break;
                }

@@ -169,4 +165,21 @@ public class BrowsablePlayerConnector {
            }
        };
    }

    private void removePendingPlayers() {
        for (BrowsedPlayerWrapper wrapper : mPendingPlayers) {
            if (DEBUG) Log.d(TAG, "Disconnecting " + wrapper.getPackageName());
            wrapper.disconnect();
        }
        mPendingPlayers.clear();
    }

    void cleanup() {
        if (mPendingPlayers.size() != 0) {
            Log.i(TAG, "Bluetooth turn off with " + mPendingPlayers.size() + " pending player(s)");
            mHandler.removeMessages(MSG_TIMEOUT);
            removePendingPlayers();
            mHandler = null;
        }
    }
}
+6 −2
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public class MediaPlayerList {
    private int mActivePlayerId = NO_ACTIVE_PLAYER;

    private AvrcpTargetService.ListCallback mCallback;
    private BrowsablePlayerConnector mBrowsablePlayerConnector;

    interface MediaUpdateCallback {
        void run(MediaData data);
@@ -140,8 +141,8 @@ public class MediaPlayerList {
                    .getPackageManager()
                    .queryIntentServices(intent, PackageManager.MATCH_ALL);

        BrowsablePlayerConnector.connectToPlayers(mContext, mLooper, playerList,
                (List<BrowsedPlayerWrapper> players) -> {
        mBrowsablePlayerConnector = BrowsablePlayerConnector.connectToPlayers(mContext, mLooper,
                playerList, (List<BrowsedPlayerWrapper> players) -> {
                Log.i(TAG, "init: Browsable Player list size is " + players.size());

                // Check to see if the list has been cleaned up before this completed
@@ -196,6 +197,9 @@ public class MediaPlayerList {
        }
        mMediaPlayers.clear();

        if (mBrowsablePlayerConnector != null) {
            mBrowsablePlayerConnector.cleanup();
        }
        for (BrowsedPlayerWrapper player : mBrowsablePlayers.values()) {
            player.disconnect();
        }