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

Commit ffcaf4ad authored by Sungsoo Lim's avatar Sungsoo Lim Committed by android-build-merger
Browse files

Merge "Guard remote volume controllers with a lock" into qt-dev am: ec300169

am: 94b3270c

Change-Id: I368619b6efc75b965cd2ff919f52797586252b3e
parents 71c29c22 94b3270c
Loading
Loading
Loading
Loading
+38 −29
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
    private AudioPlayerStateMonitor mAudioPlayerStateMonitor;

    // Used to notify System UI and Settings when remote volume was changed.
    @GuardedBy("mLock")
    final RemoteCallbackList<IRemoteVolumeController> mRemoteVolumeControllers =
            new RemoteCallbackList<>();

@@ -287,6 +288,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
        if (!session.isActive()) {
            return;
        }
        synchronized (mLock) {
            int size = mRemoteVolumeControllers.beginBroadcast();
            MediaSession.Token token = session.getSessionToken();
            for (int i = size - 1; i >= 0; i--) {
@@ -299,6 +301,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            }
            mRemoteVolumeControllers.finishBroadcast();
        }
    }

    @Override
    public void onSessionPlaystateChanged(MediaSessionRecord record, int oldState, int newState) {
@@ -647,6 +650,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            return;
        }

        synchronized (mLock) {
            int size = mRemoteVolumeControllers.beginBroadcast();
            MediaSessionRecord record = user.mPriorityStack.getDefaultRemoteSession(userId);
            MediaSession.Token token = record == null ? null : record.getSessionToken();
@@ -661,6 +665,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            }
            mRemoteVolumeControllers.finishBroadcast();
        }
    }

    void pushSession2TokensChangedLocked(int userId) {
        List<Session2Token> allSession2Tokens = getSession2TokensLocked(USER_ALL);
@@ -1676,6 +1681,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            final int pid = Binder.getCallingPid();
            final int uid = Binder.getCallingUid();
            final long token = Binder.clearCallingIdentity();
            synchronized (mLock) {
                try {
                    enforceStatusBarServicePermission("listen for volume changes", pid, uid);
                    mRemoteVolumeControllers.register(rvc);
@@ -1683,12 +1689,14 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
                    Binder.restoreCallingIdentity(token);
                }
            }
        }

        @Override
        public void unregisterRemoteVolumeController(IRemoteVolumeController rvc) {
            final int pid = Binder.getCallingPid();
            final int uid = Binder.getCallingUid();
            final long token = Binder.clearCallingIdentity();
            synchronized (mLock) {
                try {
                    enforceStatusBarServicePermission("listen for volume changes", pid, uid);
                    mRemoteVolumeControllers.unregister(rvc);
@@ -1696,6 +1704,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
                    Binder.restoreCallingIdentity(token);
                }
            }
        }

        @Override
        public boolean isGlobalPriorityActive() {