AudioManager: fix audio device callback list access

Bug: 22470616.
Change-Id: Ic59e8499557395dabe789b5fec9cb7c86c13d10c
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 3bf8129..5290cac 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3859,8 +3859,8 @@
      */
     public void registerAudioDeviceCallback(AudioDeviceCallback callback,
             android.os.Handler handler) {
-        if (callback != null && !mDeviceCallbacks.containsKey(callback)) {
-            synchronized (mDeviceCallbacks) {
+        synchronized (mDeviceCallbacks) {
+            if (callback != null && !mDeviceCallbacks.containsKey(callback)) {
                 if (mDeviceCallbacks.size() == 0) {
                     if (mPortListener == null) {
                         mPortListener = new OnAmPortUpdateListener();
@@ -3924,21 +3924,20 @@
                     calcListDeltas(current_ports, mPreviousPorts, GET_DEVICES_ALL);
 
             if (added_devices.length != 0 || removed_devices.length != 0) {
-                Collection<NativeEventHandlerDelegate> values;
                 synchronized (mDeviceCallbacks) {
-                    values = mDeviceCallbacks.values();
-                }
-                for (NativeEventHandlerDelegate delegate : values) {
-                    handler = delegate.getHandler();
-                    if (handler != null) {
-                        if (added_devices.length != 0) {
-                            handler.sendMessage(
-                                Message.obtain(handler,MSG_DEVICES_DEVICES_ADDED, added_devices));
-                        }
-                        if (removed_devices.length != 0) {
-                            handler.sendMessage(
-                                Message.obtain(handler,MSG_DEVICES_DEVICES_REMOVED,
-                                               removed_devices));
+                    for (int i = 0; i < mDeviceCallbacks.size(); i++) {
+                        handler = mDeviceCallbacks.valueAt(i).getHandler();
+                        if (handler != null) {
+                            if (added_devices.length != 0) {
+                                handler.sendMessage(Message.obtain(handler,
+                                                                   MSG_DEVICES_DEVICES_ADDED,
+                                                                   added_devices));
+                            }
+                            if (removed_devices.length != 0) {
+                                handler.sendMessage(Message.obtain(handler,
+                                                                   MSG_DEVICES_DEVICES_REMOVED,
+                                                                   removed_devices));
+                            }
                         }
                     }
                 }