MediaBrowserServiceCompat: Fix ConcurrentModificationException

Bug:29438709
Change-Id: I9ee4c30b9ac8117062d1971604e1f7fa03c62f09
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
index e9b773a..bde0831 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
@@ -71,6 +71,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -153,14 +154,15 @@
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    for (IBinder key : mConnections.keySet()) {
-                        ConnectionRecord connection = mConnections.get(key);
+                    Iterator<ConnectionRecord> iter = mConnections.values().iterator();
+                    while (iter.hasNext()){
+                        ConnectionRecord connection = iter.next();
                         try {
                             connection.callbacks.onConnect(connection.root.getRootId(), token,
                                     connection.root.getExtras());
                         } catch (RemoteException e) {
                             Log.w(TAG, "Connection for " + connection.pkg + " is no longer valid.");
-                            mConnections.remove(key);
+                            iter.remove();
                         }
                     }
                 }
@@ -1002,10 +1004,11 @@
         boolean removed = false;
         List<Pair<IBinder, Bundle>> callbackList = connection.subscriptions.get(id);
         if (callbackList != null) {
-            for (Pair<IBinder, Bundle> callback : callbackList) {
-                if (token == callback.first) {
+            Iterator<Pair<IBinder, Bundle>> iter = callbackList.iterator();
+            while (iter.hasNext()){
+                if (token == iter.next().first) {
                     removed = true;
-                    callbackList.remove(callback);
+                    iter.remove();
                 }
             }
             if (callbackList.size() == 0) {