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

Commit 8ec5d186 authored by Ayan Ghosh's avatar Ayan Ghosh Committed by Steve Kondik
Browse files

Update RemoteController on Session update

Update RemoteController on Session update in order to update
AVRCP player list to honor peer initiated browsing command.
This change fixes AVRCP browing failure due stale entry of
player session upated to AVRCP player list after device reboot.

Change-Id: I529a13e2c8a70e4b53319798c952b41f369b8bec
parent cb22900b
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -2478,14 +2478,6 @@ public class AudioManager {
            return;
        }

        IAudioService service = getService();
        try {
            service.addMediaPlayerAndUpdateRemoteController(
                                    eventReceiver.getPackageName());
        } catch (RemoteException e) {
            Log.e(TAG, "Error in calling Audioservice interface " +
                        "addMediaPlayerAndUpdateRemoteController()" + e);
        }
        // construct a PendingIntent for the media button and register it
        Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
        mediaButtonIntent.addFlags(mediaButtonIntent.FLAG_RECEIVER_FOREGROUND);
@@ -2653,6 +2645,24 @@ public class AudioManager {
        rctlr.stopListeningToSessions();
    }

    /**
     * @hide
     */
    public void updateMediaPlayerList(String packageName, boolean toAdd) {
        IAudioService service = getService();
        try {
            if (toAdd) {
                Log.d(TAG, "updateMediaPlayerList: Add RCC " + packageName + " to List");
                service.addMediaPlayerAndUpdateRemoteController(packageName);
            } else {
                Log.d(TAG, "updateMediaPlayerList: Remove RCC " + packageName + " from List");
                service.removeMediaPlayerAndUpdateRemoteController(packageName);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Exception while executing updateMediaPlayerList: " + e);
        }
    }

    /**
     * @hide
     * Registers a remote control display that will be sent information by remote control clients.
+36 −0
Original line number Diff line number Diff line
@@ -740,6 +740,8 @@ public class AudioService extends IAudioService.Stub {
     * @hide
     */
    public void addMediaPlayerAndUpdateRemoteController (String packageName) {
        Log.v(TAG, "addMediaPlayerAndUpdateRemoteController: size of existing list: " +
                                                                mMediaPlayers.size());
        boolean playerToAdd = true;
        if (mMediaPlayers.size() > 0) {
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
@@ -794,6 +796,40 @@ public class AudioService extends IAudioService.Stub {
        }
    }

    /**
     * @hide
     */
    public void removeMediaPlayerAndUpdateRemoteController (String packageName) {
        Log.v(TAG, "removeMediaPlayerAndUpdateRemoteController: size of existing list: " +
                                                                mMediaPlayers.size());
        boolean playerToRemove = false;
        int index = -1;
        if (mMediaPlayers.size() > 0) {
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
            while (rccIterator.hasNext()) {
                index++;
                final MediaPlayerInfo player = rccIterator.next();
                if (packageName.equals(player.getPackageName())) {
                    Log.v(TAG, "Player entry present remove and update RemoteController");
                    playerToRemove = true;
                    break;
                } else {
                    Log.v(TAG, "Player entry for " + player.getPackageName()+ " is not present");
                }
            }
        }
        if (playerToRemove) {
            Log.e(TAG, "Removing Player: " + packageName + " from index" + index);
            mMediaPlayers.remove(index);
        }
        Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION);
        intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName);
        intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, false);
        intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, false);
        sendBroadcastToAll(intent);
        Log.v(TAG, "Updated List size: " + mMediaPlayers.size());
    }

    private void checkAllAliasStreamVolumes() {
        int numStreamTypes = AudioSystem.getNumStreamTypes();
        for (int streamType = 0; streamType < numStreamTypes; streamType++) {
+2 −0
Original line number Diff line number Diff line
@@ -217,4 +217,6 @@ interface IAudioService {
    void updateRemoteControllerOnExistingMediaPlayers();

    void addMediaPlayerAndUpdateRemoteController(String packageName);

    void removeMediaPlayerAndUpdateRemoteController(String packageName);
}
+10 −0
Original line number Diff line number Diff line
@@ -1089,6 +1089,8 @@ import java.util.List;
        synchronized (mInfoLock) {
            if (controller == null) {
                if (mCurrentSession != null) {
                    Log.v(TAG, "Updating current controller as null");
                    mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), false);
                    mCurrentSession.unregisterCallback(mSessionCb);
                    mCurrentSession = null;
                    sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE,
@@ -1098,13 +1100,21 @@ import java.util.List;
                    || !controller.getSessionToken()
                            .equals(mCurrentSession.getSessionToken())) {
                if (mCurrentSession != null) {
                    Log.v(TAG, "Updating current controller package as " +
                     controller.getPackageName() + " from " + mCurrentSession.getPackageName());
                    mCurrentSession.unregisterCallback(mSessionCb);
                } else {
                    Log.v(TAG, "Updating current controller package as " +
                      controller.getPackageName() + " from null");
                }

                sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE,
                        0 /* genId */, 0 /* clearing */, null /* obj */, 0 /* delay */);
                mCurrentSession = controller;
                mCurrentSession.registerCallback(mSessionCb, mEventHandler);

                mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), true);

                PlaybackState state = controller.getPlaybackState();
                sendMsg(mEventHandler, MSG_NEW_PLAYBACK_STATE, SENDMSG_REPLACE,
                        0 /* genId */, 0, state /* obj */, 0 /* delay */);