summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java9
-rw-r--r--services/core/java/com/android/server/media/MediaSessionStack.java9
2 files changed, 14 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index a275f49582c6..89e10503fcf3 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -320,6 +320,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
/**
+ * Get the playback state.
+ *
+ * @return The current playback state.
+ */
+ public PlaybackState getPlaybackState() {
+ return mPlaybackState;
+ }
+
+ /**
* Check if the session is currently performing playback.
*
* @return True if the session is performing playback, false otherwise.
diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java
index f03f630d0e57..d9fe72e0c8bb 100644
--- a/services/core/java/com/android/server/media/MediaSessionStack.java
+++ b/services/core/java/com/android/server/media/MediaSessionStack.java
@@ -153,7 +153,7 @@ class MediaSessionStack {
mCachedVolumeDefault = null;
}
- // In most cases, playback state isn't needed for finding media buttion session,
+ // In most cases, playback state isn't needed for finding media button session,
// but we only use it as a hint if an app has multiple local media sessions.
// In that case, we pick the media session whose PlaybackState matches
// the audio playback configuration.
@@ -204,8 +204,9 @@ class MediaSessionStack {
/**
* Find the media button session with the given {@param uid}.
- * If the app has multiple media sessions, the media session matches the audio playback state
- * becomes the media button session.
+ * If the app has multiple media sessions, the media session whose playback state is not null
+ * and matches the audio playback state becomes the media button session. Otherwise the top
+ * priority session becomes the media button session.
*
* @return The media button session. Returns {@code null} if the app doesn't have a media
* session.
@@ -214,7 +215,7 @@ class MediaSessionStack {
MediaSessionRecord mediaButtonSession = null;
for (MediaSessionRecord session : mSessions) {
if (uid == session.getUid()) {
- if (session.isPlaybackActive() ==
+ if (session.getPlaybackState() != null && session.isPlaybackActive() ==
mAudioPlaybackMonitor.isPlaybackActive(session.getUid())) {
// If there's a media session whose PlaybackState matches
// the audio playback state, return it immediately.