summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/media/AudioPlayerStateMonitor.java23
-rw-r--r--services/core/java/com/android/server/media/MediaSessionServiceImpl.java2
2 files changed, 23 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
index 603d7cfb4525..eb706d7791d3 100644
--- a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
+++ b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
@@ -142,7 +142,8 @@ class AudioPlayerStateMonitor {
/**
* Returns the sorted list of UIDs that have had active audio playback. (i.e. playing an
- * audio/video) The UID whose audio playback becomes active at the last comes first.
+ * audio/video) The UID whose audio is currently playing comes first, then the UID whose audio
+ * playback becomes active at the last comes next.
*/
public IntArray getSortedAudioPlaybackClientUids() {
IntArray sortedAudioPlaybackClientUids = new IntArray();
@@ -253,6 +254,26 @@ class AudioPlayerStateMonitor {
mSortedAudioPlaybackClientUids.add(0, uid);
}
}
+
+ if (mActiveAudioUids.size() > 0
+ && !mActiveAudioUids.contains(mSortedAudioPlaybackClientUids.get(0))) {
+ int firstActiveUid = -1;
+ int firatActiveUidIndex = -1;
+ for (int i = 1; i < mSortedAudioPlaybackClientUids.size(); ++i) {
+ int uid = mSortedAudioPlaybackClientUids.get(i);
+ if (mActiveAudioUids.contains(uid)) {
+ firatActiveUidIndex = i;
+ firstActiveUid = uid;
+ break;
+ }
+ }
+ for (int i = firatActiveUidIndex; i > 0; --i) {
+ mSortedAudioPlaybackClientUids.set(i,
+ mSortedAudioPlaybackClientUids.get(i - 1));
+ }
+ mSortedAudioPlaybackClientUids.set(0, firstActiveUid);
+ }
+
// Notify the active state change of audio players.
for (AudioPlaybackConfiguration config : configs) {
final int pii = config.getPlayerInterfaceId();
diff --git a/services/core/java/com/android/server/media/MediaSessionServiceImpl.java b/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
index cdfd948f4bd4..a5f22175331d 100644
--- a/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
@@ -171,7 +171,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
mAudioPlayerStateMonitor = AudioPlayerStateMonitor.getInstance(mContext);
mAudioPlayerStateMonitor.registerListener(
(config, isRemoved) -> {
- if (isRemoved || !config.isActive() || config.getPlayerType()
+ if (config.getPlayerType()
== AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL) {
return;
}