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
This commit is contained in:
RoboErik
2015-01-15 15:09:09 -08:00
committed by Erik Pasternak
parent fd846dfbf1
commit 9c5b7cb048
2 changed files with 16 additions and 8 deletions

View File

@@ -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 "

View File

@@ -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);
}
}
}
}