Merge "Remove media players if their backing session dissappears"
diff --git a/src/com/android/bluetooth/avrcp/MediaPlayerList.java b/src/com/android/bluetooth/avrcp/MediaPlayerList.java
index 10d99bf..31113da 100644
--- a/src/com/android/bluetooth/avrcp/MediaPlayerList.java
+++ b/src/com/android/bluetooth/avrcp/MediaPlayerList.java
@@ -459,6 +459,7 @@
         if (playerId == mActivePlayerId && playerId != NO_ACTIVE_PLAYER) {
             getActivePlayer().unregisterCallback();
             mActivePlayerId = NO_ACTIVE_PLAYER;
+            sendMediaUpdate(new MediaData(Util.empty_data(), null, null));
         }
 
         final MediaPlayerWrapper wrapper = mMediaPlayers.get(playerId);
@@ -536,28 +537,35 @@
             new MediaSessionManager.OnActiveSessionsChangedListener() {
         @Override
         public void onActiveSessionsChanged(
-                List<android.media.session.MediaController> newControllers) {
+                List<android.media.session.MediaController> controllers) {
             synchronized (MediaPlayerList.this) {
                 Log.v(TAG, "onActiveSessionsChanged: number of controllers: "
-                        + newControllers.size());
-                if (newControllers.size() == 0) return;
+                        + controllers.size());
+                if (controllers.size() == 0) return;
 
                 // Apps are allowed to have multiple MediaControllers. If an app does have
-                // multiple controllers then newControllers contains them in highest
+                // multiple controllers then controllers contains them in highest
                 // priority order. Since we only want to keep the highest priority one,
                 // we keep track of which controllers we updated and skip over ones
                 // we've already looked at.
                 HashSet<String> addedPackages = new HashSet<String>();
 
-                for (int i = 0; i < newControllers.size(); i++) {
+                for (int i = 0; i < controllers.size(); i++) {
                     Log.d(TAG, "onActiveSessionsChanged: controller: "
-                            + newControllers.get(i).getPackageName());
-                    if (addedPackages.contains(newControllers.get(i).getPackageName())) {
+                            + controllers.get(i).getPackageName());
+                    if (addedPackages.contains(controllers.get(i).getPackageName())) {
                         continue;
                     }
 
-                    addedPackages.add(newControllers.get(i).getPackageName());
-                    addMediaPlayer(newControllers.get(i));
+                    addedPackages.add(controllers.get(i).getPackageName());
+                    addMediaPlayer(controllers.get(i));
+                }
+
+                // Remove all players that weren't added.
+                for (String packageName : mMediaPlayerIds.keySet()) {
+                    if (!addedPackages.contains(packageName)) {
+                        removeMediaPlayer(mMediaPlayerIds.get(packageName));
+                    }
                 }
             }
         }