From 39f479fe7e35028663e9663a9684a5d3600e8198 Mon Sep 17 00:00:00 2001 From: Sungsoo Date: Fri, 9 Jun 2017 12:59:47 +0900 Subject: [PATCH] Fix the finding logic of MediaButtonSession When we find a media button session with the given UID, we should ignore the sessions whose playback state is not set. Bug: 62373831 Test: passed CtsMediaTestCases Change-Id: I484c888c5bdbceb85dd4524c1353906efc0c4f02 --- .../com/android/server/media/MediaSessionRecord.java | 9 +++++++++ .../java/com/android/server/media/MediaSessionStack.java | 9 +++++---- 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 a275f49582c67..89e10503fcf3b 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -319,6 +319,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return mIsActive && !mDestroyed; } + /** + * Get the playback state. + * + * @return The current playback state. + */ + public PlaybackState getPlaybackState() { + return mPlaybackState; + } + /** * Check if the session is currently performing playback. * diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java index f474769bfd319..84313112a40db 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.