diff options
author | Ayan Ghosh <abghosh@codeaurora.org> | 2016-03-08 19:11:18 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-07-02 10:54:35 -0700 |
commit | f689b2e13359d5d943d8729928d359d23d212e02 (patch) | |
tree | d92d690044275342156c18e8f3de9314da8d0069 | |
parent | 169748b742043e06b29b9185688d653b7e8f29c3 (diff) | |
download | frameworks_base-f689b2e13359d5d943d8729928d359d23d212e02.zip frameworks_base-f689b2e13359d5d943d8729928d359d23d212e02.tar.gz frameworks_base-f689b2e13359d5d943d8729928d359d23d212e02.tar.bz2 |
Bluetooth: Access mediaplayerlist in synchronized way
Access mediaplayerlist in synchronized way to make sure no transient
update is tried to be worked upon in multithreaded environment.
Change-Id: I0e7810ac89e0ddc19d57b32c679450aa7cb87273
CRs-Fixed: 979840
-rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 140 |
1 files changed, 73 insertions, 67 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index ef2ff62..fe3df61 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -911,59 +911,63 @@ 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(); - while (rccIterator.hasNext()) { - final MediaPlayerInfo player = rccIterator.next(); - if (packageName.equals(player.getPackageName())) { - Log.e(TAG, "Player entry present, no need to add"); - playerToAdd = false; - player.setFocus(true); - } else { - Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus"); - player.setFocus(false); + synchronized(mMediaPlayers) { + Log.v(TAG, "addMediaPlayerAndUpdateRemoteController: size of existing list: " + + mMediaPlayers.size()); + boolean playerToAdd = true; + if (mMediaPlayers.size() > 0) { + final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + if (packageName.equals(player.getPackageName())) { + Log.e(TAG, "Player entry present, no need to add"); + playerToAdd = false; + player.setFocus(true); + } else { + Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus"); + player.setFocus(false); + } } } + if (playerToAdd) { + Log.e(TAG, "Adding Player: " + packageName + " to available player list"); + mMediaPlayers.add(new MediaPlayerInfo(packageName, true)); + } + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:" + + packageName); } - if (playerToAdd) { - Log.e(TAG, "Adding Player: " + packageName + " to available player list"); - mMediaPlayers.add(new MediaPlayerInfo(packageName, true)); - } - Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); - intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); - intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true); - intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); - sendBroadcastToAll(intent); - Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:" - + packageName); } /** * @hide */ public void updateRemoteControllerOnExistingMediaPlayers() { - Log.v(TAG, "updateRemoteControllerOnExistingMediaPlayers: size of Player list: " + + synchronized(mMediaPlayers) { + Log.v(TAG, "updateRemoteControllerOnExistingMediaPlayers: size of Player list: " + mMediaPlayers.size()); - if (mMediaPlayers.size() > 0) { - Log.v(TAG, "Inform RemoteController regarding existing RCC entry"); - final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); - while (rccIterator.hasNext()) { - final MediaPlayerInfo player = rccIterator.next(); - Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); - intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, - player.getPackageName()); - intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, - player.isFocussed()); - intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); - sendBroadcastToAll(intent); - Log.v(TAG, "updating RCC change: CallingPackageName:" + - player.getPackageName()); + if (mMediaPlayers.size() > 0) { + Log.v(TAG, "Inform RemoteController regarding existing RCC entry"); + final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, + player.getPackageName()); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, + player.isFocussed()); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating RCC change: CallingPackageName:" + + player.getPackageName()); + } + } else { + Log.e(TAG, "No RCC entry present to update"); } - } else { - Log.e(TAG, "No RCC entry present to update"); } } @@ -971,34 +975,36 @@ 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"); + synchronized(mMediaPlayers) { + 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()); } - 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() { |