diff options
| author | 2017-10-12 01:47:26 +0000 | |
|---|---|---|
| committer | 2017-10-12 01:47:26 +0000 | |
| commit | 0e4fcfe95dc08c39d21d9d8974bebf7e77794354 (patch) | |
| tree | 7dfa1f6f376205a60bdc1e87ab45fbb416bd59be | |
| parent | 15c8747ad9e6c53c92beccb312ed4c1fe2acf89f (diff) | |
| parent | fa85b603ef2a89c985647e3395caa4467e0aab63 (diff) | |
Merge "Set the global priority session immediately after its flag is set" into oc-mr1-dev
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionService.java | 29 |
2 files changed, 26 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 0b11479a162a..664d2f9789f0 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -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); } diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index b102dde30a94..aa652445c45a 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -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) { |