From 9c7854014d86a3bb2c4f2f8e3b8ca7f1e01df7df Mon Sep 17 00:00:00 2001 From: RoboErik Date: Tue, 11 Nov 2014 16:52:26 -0800 Subject: [PATCH] Use the suggested stream if it's currently active This makes the MediaSessionService check if the suggested stream is active when dispatching a volume event and prefer it to a remote session if it is. This mostly affects apps that use Activity.setVolumeControlStream. bug:18318480 Change-Id: Ib8825394bf7a223fbd92bcb2c3ecb7c596ce7c29 --- .../android/server/media/MediaSessionService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 02c9fcb517ac3..ba18f48a21e08 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -805,7 +805,12 @@ public class MediaSessionService extends SystemService implements Monitor { + flags + ", suggestedStream=" + suggestedStream); } - if (session == null) { + boolean preferSuggestedStream = false; + if (isValidLocalStreamType(suggestedStream) + && AudioSystem.isStreamActive(suggestedStream, 0)) { + preferSuggestedStream = true; + } + if (session == null || preferSuggestedStream) { if ((flags & AudioManager.FLAG_ACTIVE_MEDIA_ONLY) != 0 && !AudioSystem.isStreamActive(AudioManager.STREAM_MUSIC, 0)) { if (DEBUG) { @@ -959,6 +964,12 @@ public class MediaSessionService extends SystemService implements Monitor { return keyCode == KeyEvent.KEYCODE_HEADSETHOOK; } + // we only handle public stream types, which are 0-5 + private boolean isValidLocalStreamType(int streamType) { + return streamType >= AudioManager.STREAM_VOICE_CALL + && streamType <= AudioManager.STREAM_NOTIFICATION; + } + private KeyEventWakeLockReceiver mKeyEventReceiver = new KeyEventWakeLockReceiver(mHandler); class KeyEventWakeLockReceiver extends ResultReceiver implements Runnable,