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

This commit is contained in:
TreeHugger Robot
2017-10-12 01:47:26 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 11 deletions

View File

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

View File

@@ -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) {