diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 439e9bd2624e1..c67d54f793070 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -151,7 +151,7 @@ class MediaRouter2ServiceImpl { mContext.registerReceiver(mScreenOnOffReceiver, screenOnOffIntentFilter); } - // Methods that implement MediaRouter2 operations. + // Start of methods that implement MediaRouter2 operations. @NonNull public void enforceMediaContentControlPermission() { @@ -199,46 +199,6 @@ class MediaRouter2ServiceImpl { } } - @NonNull - public RoutingSessionInfo getSystemSessionInfo( - @Nullable String packageName, boolean setDeviceRouteSelected) { - final int uid = Binder.getCallingUid(); - final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); - final boolean hasModifyAudioRoutingPermission = mContext.checkCallingOrSelfPermission( - android.Manifest.permission.MODIFY_AUDIO_ROUTING) - == PackageManager.PERMISSION_GRANTED; - - final long token = Binder.clearCallingIdentity(); - try { - RoutingSessionInfo systemSessionInfo = null; - synchronized (mLock) { - UserRecord userRecord = getOrCreateUserRecordLocked(userId); - List sessionInfos; - if (hasModifyAudioRoutingPermission) { - if (setDeviceRouteSelected) { - systemSessionInfo = userRecord.mHandler.mSystemProvider - .generateDeviceRouteSelectedSessionInfo(packageName); - } else { - sessionInfos = userRecord.mHandler.mSystemProvider.getSessionInfos(); - if (sessionInfos != null && !sessionInfos.isEmpty()) { - systemSessionInfo = new RoutingSessionInfo.Builder(sessionInfos.get(0)) - .setClientPackageName(packageName).build(); - } else { - Slog.w(TAG, "System provider does not have any session info."); - } - } - } else { - systemSessionInfo = new RoutingSessionInfo.Builder( - userRecord.mHandler.mSystemProvider.getDefaultSessionInfo()) - .setClientPackageName(packageName).build(); - } - } - return systemSessionInfo; - } finally { - Binder.restoreCallingIdentity(token); - } - } - public void registerRouter2(@NonNull IMediaRouter2 router, @NonNull String packageName) { Objects.requireNonNull(router, "router must not be null"); if (TextUtils.isEmpty(packageName)) { @@ -418,7 +378,9 @@ class MediaRouter2ServiceImpl { } } - // Methods that implement MediaRouter2Manager operations. + // End of methods that implement MediaRouter2 operations. + + // Start of methods that implement MediaRouter2Manager operations. @NonNull public List getRemoteSessions(@NonNull IMediaRouter2Manager manager) { @@ -610,6 +572,52 @@ class MediaRouter2ServiceImpl { } } + // End of methods that implement MediaRouter2Manager operations. + + // Start of methods that implements operations for both MediaRouter2 and MediaRouter2Manager. + + @NonNull + public RoutingSessionInfo getSystemSessionInfo( + @Nullable String packageName, boolean setDeviceRouteSelected) { + final int uid = Binder.getCallingUid(); + final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); + final boolean hasModifyAudioRoutingPermission = mContext.checkCallingOrSelfPermission( + android.Manifest.permission.MODIFY_AUDIO_ROUTING) + == PackageManager.PERMISSION_GRANTED; + + final long token = Binder.clearCallingIdentity(); + try { + RoutingSessionInfo systemSessionInfo = null; + synchronized (mLock) { + UserRecord userRecord = getOrCreateUserRecordLocked(userId); + List sessionInfos; + if (hasModifyAudioRoutingPermission) { + if (setDeviceRouteSelected) { + systemSessionInfo = userRecord.mHandler.mSystemProvider + .generateDeviceRouteSelectedSessionInfo(packageName); + } else { + sessionInfos = userRecord.mHandler.mSystemProvider.getSessionInfos(); + if (sessionInfos != null && !sessionInfos.isEmpty()) { + systemSessionInfo = new RoutingSessionInfo.Builder(sessionInfos.get(0)) + .setClientPackageName(packageName).build(); + } else { + Slog.w(TAG, "System provider does not have any session info."); + } + } + } else { + systemSessionInfo = new RoutingSessionInfo.Builder( + userRecord.mHandler.mSystemProvider.getDefaultSessionInfo()) + .setClientPackageName(packageName).build(); + } + } + return systemSessionInfo; + } finally { + Binder.restoreCallingIdentity(token); + } + } + + // End of methods that implements operations for both MediaRouter2 and MediaRouter2Manager. + public void dump(@NonNull PrintWriter pw, @NonNull String prefix) { pw.println(prefix + "MediaRouter2ServiceImpl"); @@ -678,6 +686,8 @@ class MediaRouter2ServiceImpl { return mUserManagerInternal.getProfileParentId(userId) == mCurrentActiveUserId; } + // Start of locked methods that are used by MediaRouter2. + @GuardedBy("mLock") private void registerRouter2Locked(@NonNull IMediaRouter2 router, int uid, int pid, @NonNull String packageName, int userId, boolean hasConfigureWifiDisplayPermission, @@ -952,6 +962,10 @@ class MediaRouter2ServiceImpl { DUMMY_REQUEST_ID, routerRecord, uniqueSessionId)); } + // End of locked methods that are used by MediaRouter2. + + // Start of locked methods that are used by MediaRouter2Manager. + private List getRemoteSessionsLocked( @NonNull IMediaRouter2Manager manager) { final IBinder binder = manager.asBinder(); @@ -1260,6 +1274,10 @@ class MediaRouter2ServiceImpl { uniqueRequestId, routerRecord, uniqueSessionId)); } + // End of locked methods that are used by MediaRouter2Manager. + + // Start of locked methods that are used by both MediaRouter2 and MediaRouter2Manager. + @GuardedBy("mLock") private UserRecord getOrCreateUserRecordLocked(int userId) { UserRecord userRecord = mUserRecords.get(userId); @@ -1294,6 +1312,8 @@ class MediaRouter2ServiceImpl { } } + // End of locked methods that are used by both MediaRouter2 and MediaRouter2Manager. + static long toUniqueRequestId(int requesterId, int originalRequestId) { return ((long) requesterId << 32) | originalRequestId; }