From fa3d0eff2d666a8ec4b247299007e6b2b4125720 Mon Sep 17 00:00:00 2001 From: Hyundo Moon Date: Mon, 13 Apr 2020 00:27:44 +0900 Subject: [PATCH 1/2] Do not check router's permission on requests from MediaRouter2Manager In order to allow getting the session creation requests from MediaRouter2Manager, this CL moves the permission check to inside requestCreateSessionWithRouter2Locked(). Bug: 153811416 Test: Builds successfully Change-Id: Ief4b7f4bb73404bcf81427d19e3a753c7d78ec5b --- .../server/media/MediaRouter2ServiceImpl.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index c3413e8d2934b..ed9caab13c889 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -622,6 +622,16 @@ class MediaRouter2ServiceImpl { return; } + if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission + && !TextUtils.equals(route.getId(), + routerRecord.mUserRecord.mHandler.mSystemProvider.getDefaultRoute().getId())) { + Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to" + + route); + routerRecord.mUserRecord.mHandler.notifySessionCreationFailedToRouter( + routerRecord, requestId); + return; + } + long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId); routerRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::requestCreateSessionOnHandler, @@ -1272,15 +1282,6 @@ class MediaRouter2ServiceImpl { toOriginalRequestId(uniqueRequestId)); return; } - if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission - && !TextUtils.equals(route.getId(), - mSystemProvider.getDefaultRoute().getId())) { - Slog.w(TAG, "MODIFY_AUDIO_ROUTING permission is required to transfer to" - + route); - notifySessionCreationFailedToRouter(routerRecord, - toOriginalRequestId(uniqueRequestId)); - return; - } SessionCreationRequest request = new SessionCreationRequest(routerRecord, uniqueRequestId, route, managerRecord); From 1f066685c0044bfaf34c120547bcfc2072c26a02 Mon Sep 17 00:00:00 2001 From: Hyundo Moon Date: Mon, 13 Apr 2020 04:04:15 +0900 Subject: [PATCH 2/2] Allow MediaRouter2Manager releasing the session created w/o request When a RoutingSessionInfo is created without MediaRouter2(Manager)'s request (i.e. created with REQUEST_ID_NONE by provider), the MediaRouter2Manager cannot release the session. This CL makes the manager be able to release those sessions. Bug: 153832566 Test: Using platform-dev Support7Demos, 1) Select any sample route (Variable volume~) 2) Using SampleOutputSwitcher, select phone 3) The sample route's screen disappears => Without this CL, the screen doesn't go away. Change-Id: Ibf61ba52012c2785d2807288dcb338266156efd9 --- .../android/server/media/MediaRouter2ServiceImpl.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index ed9caab13c889..0d899974cf93e 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -925,9 +925,6 @@ class MediaRouter2ServiceImpl { RouterRecord routerRecord = managerRecord.mUserRecord.mHandler .findRouterforSessionLocked(uniqueSessionId); - if (routerRecord == null) { - return; - } long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId); managerRecord.mUserRecord.mHandler.sendMessage( @@ -1405,11 +1402,11 @@ class MediaRouter2ServiceImpl { } private void releaseSessionOnHandler(long uniqueRequestId, - @NonNull RouterRecord routerRecord, @NonNull String uniqueSessionId) { + @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId) { final RouterRecord matchingRecord = mSessionToRouterMap.get(uniqueSessionId); if (matchingRecord != routerRecord) { - Slog.w(TAG, "Ignoring releasing session from non-matching router." - + " packageName=" + routerRecord.mPackageName + Slog.w(TAG, "Ignoring releasing session from non-matching router. packageName=" + + (routerRecord == null ? null : routerRecord.mPackageName) + " uniqueSessionId=" + uniqueSessionId); return; }