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

Commit 0e4fcfe9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Set the global priority session immediately after its flag is set" into oc-mr1-dev

parents 15c8747a fa85b603
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -784,6 +784,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
                mService.enforcePhoneStatePermission(pid, uid);
            }
            mFlags = flags;
            if ((flags & MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY) != 0) {
                final long token = Binder.clearCallingIdentity();
                try {
                    mService.setGlobalPrioritySession(MediaSessionRecord.this);
                } finally {
                    Binder.restoreCallingIdentity(token);
                }
            }
            mHandler.post(MessageHandler.MSG_UPDATE_SESSION_STATE);
        }

+18 −11
Original line number Diff line number Diff line
@@ -178,17 +178,6 @@ public class MediaSessionService extends SystemService implements Monitor {
                return;
            }
            if ((record.getFlags() & MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY) != 0) {
                if (mGlobalPrioritySession != record) {
                    Log.d(TAG, "Global priority session is changed from " + mGlobalPrioritySession
                            + " to " + record);
                    mGlobalPrioritySession = record;
                    if (user != null && user.mPriorityStack.contains(record)) {
                        // Handle the global priority session separately.
                        // Otherwise, it will be the media button session even after it becomes
                        // inactive because it has been the lastly played media app.
                        user.mPriorityStack.removeSession(record);
                    }
                }
                if (DEBUG_KEY_EVENT) {
                    Log.d(TAG, "Global priority session is updated, active=" + record.isActive());
                }
@@ -204,6 +193,24 @@ public class MediaSessionService extends SystemService implements Monitor {
        }
    }

    public void setGlobalPrioritySession(MediaSessionRecord record) {
        synchronized (mLock) {
            FullUserRecord user = getFullUserRecordLocked(record.getUserId());
            if (mGlobalPrioritySession != record) {
                Log.d(TAG, "Global priority session is changed from " + mGlobalPrioritySession
                        + " to " + record);
                mGlobalPrioritySession = record;
                if (user != null && user.mPriorityStack.contains(record)) {
                    // Handle the global priority session separately.
                    // Otherwise, it can be the media button session regardless of the active state
                    // because it or other system components might have been the lastly played media
                    // app.
                    user.mPriorityStack.removeSession(record);
                }
            }
        }
    }

    private List<MediaSessionRecord> getActiveSessionsLocked(int userId) {
        List<MediaSessionRecord> records = new ArrayList<>();
        if (userId == UserHandle.USER_ALL) {