From 745b35004a75df7dedac139041fd77fbcc9348cd Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Tue, 11 Feb 2020 15:37:12 +0900 Subject: [PATCH] Fix MediaSession.Token#equals() This also fixes the Activity#setMediaController() which previously ignored because the MediaSessionService failed to find session set to the foreground activity. Bug: 149006225 Test: Run MediaActivityTest in CtsMediaTestCases Change-Id: I8a22665a109ce480ae9604f5c7262bf2b3c2db8c --- media/java/android/media/session/MediaSession.java | 6 +++--- .../systemui/volume/VolumeDialogControllerImplTest.java | 5 +++-- .../java/com/android/server/media/MediaSessionRecord.java | 2 +- .../server/notification/NotificationComparatorTest.java | 5 +++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 486c0c25a7373..8bf462c5a5cfd 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -196,7 +196,7 @@ public final class MediaSession { .getSystemService(Context.MEDIA_SESSION_SERVICE); try { mBinder = manager.createSession(mCbStub, tag, sessionInfo); - mSessionToken = new Token(mBinder.getController()); + mSessionToken = new Token(Process.myUid(), mBinder.getController()); mController = new MediaController(context, mSessionToken); } catch (RemoteException e) { throw new RuntimeException("Remote error creating session.", e); @@ -771,8 +771,8 @@ public final class MediaSession { /** * @hide */ - public Token(ISessionController binder) { - mUid = Process.myUid(); + public Token(int uid, ISessionController binder) { + mUid = uid; mBinder = binder; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index 80aa6f6c49bc1..8cc83dd99b53b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -29,6 +29,7 @@ import android.content.IntentFilter; import android.media.AudioManager; import android.media.session.MediaSession; import android.os.Handler; +import android.os.Process; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; @@ -116,13 +117,13 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { @Test public void testOnRemoteVolumeChanged_newStream_noNullPointer() { - MediaSession.Token token = new MediaSession.Token(null); + MediaSession.Token token = new MediaSession.Token(Process.myUid(), null); mVolumeController.mMediaSessionsCallbacksW.onRemoteVolumeChanged(token, 0); } @Test public void testOnRemoteRemove_newStream_noNullPointer() { - MediaSession.Token token = new MediaSession.Token(null); + MediaSession.Token token = new MediaSession.Token(Process.myUid(), null); mVolumeController.mMediaSessionsCallbacksW.onRemoteRemoved(token); } diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 9f47b349d3fc0..67f9782d1a6d7 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -172,7 +172,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mTag = tag; mSessionInfo = sessionInfo; mController = new ControllerStub(); - mSessionToken = new MediaSession.Token(mController); + mSessionToken = new MediaSession.Token(ownerUid, mController); mSession = new SessionStub(); mSessionCb = new SessionCb(cb); mService = service; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java index a328568da7ed9..b9ffd65ee20eb 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.when; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; import android.app.Notification; import android.app.NotificationChannel; @@ -33,6 +33,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.media.session.MediaSession; import android.os.Build; +import android.os.Process; import android.os.UserHandle; import android.provider.Settings; import android.service.notification.StatusBarNotification; @@ -140,7 +141,7 @@ public class NotificationComparatorTest extends UiServiceTestCase { Notification n3 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setStyle(new Notification.MediaStyle() - .setMediaSession(new MediaSession.Token(null))) + .setMediaSession(new MediaSession.Token(Process.myUid(), null))) .build(); mRecordDefaultMedia = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "media", uid2, uid2, n3, new UserHandle(userId),