From 83c4635e12a18ede60a792795a7e2b7e9c1b90c9 Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Thu, 30 Mar 2017 18:19:17 +0900 Subject: [PATCH] MediaSessionService: Clear calling identity for incoming calls from apps This only clears calling identity if MediaSessionRecord calls APIs of MediaSessionService. Bug: 36682559 Test: Run CtsMediaTest (MediaSessionTest and MediaSessionManagerTest) and Manual test (Checked that a media app that changes the active state and supports cast doesn't crash) Change-Id: Ia4a441b692ea7da606b1bafbe9a6c3f8fd690518 --- .../server/media/MediaSessionRecord.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index ee348cf71c883..a275f49582c67 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -751,7 +751,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { @Override public void setActive(boolean active) { mIsActive = active; - mService.updateSession(MediaSessionRecord.this); + final long token = Binder.clearCallingIdentity(); + try { + mService.updateSession(MediaSessionRecord.this); + } finally { + Binder.restoreCallingIdentity(token); + } mHandler.post(MessageHandler.MSG_UPDATE_SESSION_STATE); } @@ -862,7 +867,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } if (typeChanged) { - mService.onSessionPlaybackTypeChanged(MediaSessionRecord.this); + final long token = Binder.clearCallingIdentity(); + try { + mService.onSessionPlaybackTypeChanged(MediaSessionRecord.this); + } finally { + Binder.restoreCallingIdentity(token); + } mHandler.post(MessageHandler.MSG_UPDATE_VOLUME); } } @@ -877,7 +887,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { mMaxVolume = max; } if (typeChanged) { - mService.onSessionPlaybackTypeChanged(MediaSessionRecord.this); + final long token = Binder.clearCallingIdentity(); + try { + mService.onSessionPlaybackTypeChanged(MediaSessionRecord.this); + } finally { + Binder.restoreCallingIdentity(token); + } mHandler.post(MessageHandler.MSG_UPDATE_VOLUME); } }