Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c5b7cb0 authored by RoboErik's avatar RoboErik Committed by Erik Pasternak
Browse files

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
parent fd846dfb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 "
+14 −8
Original line number Diff line number Diff line
@@ -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);
                    }
                }
            }
        }