summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/AudioService.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 653081da5d5e..addb4cb2ce77 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -4163,7 +4163,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
* Display in the log the current entries in the audio focus stack
*/
private void dumpFocusStack(PrintWriter pw) {
- pw.println("\nAudio Focus stack entries:");
+ pw.println("\nAudio Focus stack entries (last is top of stack):");
synchronized(mAudioFocusLock) {
Iterator<FocusStackEntry> stackIterator = mFocusStack.iterator();
while(stackIterator.hasNext()) {
@@ -4204,6 +4204,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
} else {
// focus is abandoned by a client that's not at the top of the stack,
// no need to update focus.
+ // (using an iterator on the stack so we can safely remove an entry after having
+ // evaluated it, traversal order doesn't matter here)
Iterator<FocusStackEntry> stackIterator = mFocusStack.iterator();
while(stackIterator.hasNext()) {
FocusStackEntry fse = (FocusStackEntry)stackIterator.next();
@@ -4226,6 +4228,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// is the owner of the audio focus part of the client to remove?
boolean isTopOfStackForClientToRemove = !mFocusStack.isEmpty() &&
mFocusStack.peek().mSourceRef.equals(cb);
+ // (using an iterator on the stack so we can safely remove an entry after having
+ // evaluated it, traversal order doesn't matter here)
Iterator<FocusStackEntry> stackIterator = mFocusStack.iterator();
while(stackIterator.hasNext()) {
FocusStackEntry fse = (FocusStackEntry)stackIterator.next();
@@ -4846,7 +4850,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
* Display in the log the current entries in the remote control focus stack
*/
private void dumpRCStack(PrintWriter pw) {
- pw.println("\nRemote Control stack entries:");
+ pw.println("\nRemote Control stack entries (last is top of stack):");
synchronized(mRCStack) {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
@@ -4868,7 +4872,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
* on RemoteControlClient data
*/
private void dumpRCCStack(PrintWriter pw) {
- pw.println("\nRemote Control Client stack entries:");
+ pw.println("\nRemote Control Client stack entries (last is top of stack):");
synchronized(mRCStack) {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
@@ -4910,6 +4914,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
RemoteControlStackEntry oldTop = mRCStack.peek();
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
// iterate over the stack entries
+ // (using an iterator on the stack so we can safely remove an entry after having
+ // evaluated it, traversal order doesn't matter here)
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = (RemoteControlStackEntry)stackIterator.next();
if (packageName.equalsIgnoreCase(rcse.mReceiverComponent.getPackageName())) {
@@ -5039,6 +5045,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
* Update the remote control clients with the new "focused" client generation
*/
private void setNewRcClientGenerationOnClients_syncRcsCurrc(int newClientGeneration) {
+ // (using an iterator on the stack so we can safely remove an entry if needed,
+ // traversal order doesn't matter here as we update all entries)
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry se = stackIterator.next();