From 9c5b7cb048699237b35dad7a2a634ed6efb997c7 Mon Sep 17 00:00:00 2001 From: RoboErik Date: Thu, 15 Jan 2015 15:09:09 -0800 Subject: [PATCH] Notify the system of all remote volume changes If a volume change occurred because it was sent through the MediaController directly it wasn't showing the system's volume UI. This fixes things so the volume slider gets shown for all volume requests with the SHOW_UI flag set. bug:19036130 Change-Id: I1f7cb2e03386e2f3f7bc448cb4c38a71573775ff --- .../server/media/MediaSessionRecord.java | 2 ++ .../server/media/MediaSessionService.java | 22 ++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 03a5920dc7842..53ae1ab36b31b 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -330,6 +330,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { if (volumeBefore != mOptimisticVolume) { pushVolumeUpdate(); } + mService.notifyRemoteVolumeChanged(flags, this); if (DEBUG) { Log.d(TAG, "Adjusted optimistic volume to " + mOptimisticVolume + " max is " @@ -357,6 +358,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { if (volumeBefore != mOptimisticVolume) { pushVolumeUpdate(); } + mService.notifyRemoteVolumeChanged(flags, this); if (DEBUG) { Log.d(TAG, "Set optimistic volume to " + mOptimisticVolume + " max is " diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 22acfea583e9c..77a1fa9237936 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -143,6 +143,20 @@ public class MediaSessionService extends SystemService implements Monitor { mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, record.getUserId(), 0); } + /** + * Tells the system UI that volume has changed on a remote session. + */ + public void notifyRemoteVolumeChanged(int flags, MediaSessionRecord session) { + if (mRvc == null) { + return; + } + try { + mRvc.remoteVolumeChanged(session.getControllerBinder(), flags); + } catch (Exception e) { + Log.wtf(TAG, "Error sending volume change to system UI.", e); + } + } + public void onSessionPlaystateChange(MediaSessionRecord record, int oldState, int newState) { boolean updateSessions = false; synchronized (mLock) { @@ -864,14 +878,6 @@ public class MediaSessionService extends SystemService implements Monitor { } else { session.adjustVolume(direction, flags, getContext().getPackageName(), UserHandle.myUserId(), true); - if (session.getPlaybackType() == PlaybackInfo.PLAYBACK_TYPE_REMOTE - && mRvc != null && direction != MediaSessionManager.DIRECTION_MUTE) { - try { - mRvc.remoteVolumeChanged(session.getControllerBinder(), flags); - } catch (Exception e) { - Log.wtf(TAG, "Error sending volume change to system UI.", e); - } - } } }