summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAyan Ghosh <abghosh@codeaurora.org>2016-03-08 19:11:18 +0530
committerSteve Kondik <steve@cyngn.com>2016-07-02 10:54:35 -0700
commitf689b2e13359d5d943d8729928d359d23d212e02 (patch)
treed92d690044275342156c18e8f3de9314da8d0069
parent169748b742043e06b29b9185688d653b7e8f29c3 (diff)
downloadframeworks_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.java140
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() {