Loading services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +45 −40 Original line number Diff line number Diff line Loading @@ -1114,9 +1114,9 @@ class MediaRouter2ServiceImpl { @Override public void onSessionCreated(@NonNull MediaRoute2Provider provider, long requestId, @NonNull RoutingSessionInfo sessionInfo) { long uniqueRequestId, @NonNull RoutingSessionInfo sessionInfo) { sendMessage(PooledLambda.obtainMessage(UserHandler::onSessionCreatedOnHandler, this, provider, requestId, sessionInfo)); this, provider, uniqueRequestId, sessionInfo)); } Loading @@ -1135,10 +1135,10 @@ class MediaRouter2ServiceImpl { } @Override public void onRequestFailed(@NonNull MediaRoute2Provider provider, long requestId, public void onRequestFailed(@NonNull MediaRoute2Provider provider, long uniqueRequestId, int reason) { sendMessage(PooledLambda.obtainMessage(UserHandler::onRequestFailedOnHandler, this, provider, requestId, reason)); this, provider, uniqueRequestId, reason)); } @Nullable Loading Loading @@ -1229,7 +1229,7 @@ class MediaRouter2ServiceImpl { return -1; } private void requestCreateSessionOnHandler(long requestId, private void requestCreateSessionOnHandler(long uniqueRequestId, @NonNull RouterRecord routerRecord, @Nullable ManagerRecord managerRecord, @NonNull MediaRoute2Info route, @Nullable Bundle sessionHints) { Loading @@ -1237,20 +1237,21 @@ class MediaRouter2ServiceImpl { if (provider == null) { Slog.w(TAG, "Ignoring session creation request since no provider found for" + " given route=" + route); notifySessionCreationFailedToRouter(routerRecord, toOriginalRequestId(requestId)); notifySessionCreationFailedToRouter(routerRecord, toOriginalRequestId(uniqueRequestId)); return; } SessionCreationRequest request = new SessionCreationRequest(routerRecord, requestId, route, managerRecord); new SessionCreationRequest(routerRecord, uniqueRequestId, route, managerRecord); mSessionCreationRequests.add(request); provider.requestCreateSession(requestId, routerRecord.mPackageName, provider.requestCreateSession(uniqueRequestId, routerRecord.mPackageName, route.getOriginalId(), sessionHints); } // routerRecord can be null if the session is system's. private void selectRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void selectRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "selecting")) { Loading @@ -1263,11 +1264,13 @@ class MediaRouter2ServiceImpl { if (provider == null) { return; } provider.selectRoute(requestId, getOriginalId(uniqueSessionId), route.getOriginalId()); provider.selectRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } // routerRecord can be null if the session is system's. private void deselectRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void deselectRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "deselecting")) { Loading @@ -1281,12 +1284,13 @@ class MediaRouter2ServiceImpl { return; } provider.deselectRoute(requestId, getOriginalId(uniqueSessionId), provider.deselectRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } // routerRecord can be null if the session is system's. private void transferToRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void transferToRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "transferring to")) { Loading @@ -1299,7 +1303,7 @@ class MediaRouter2ServiceImpl { if (provider == null) { return; } provider.transferToRoute(requestId, getOriginalId(uniqueSessionId), provider.transferToRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } Loading Loading @@ -1342,25 +1346,25 @@ class MediaRouter2ServiceImpl { return true; } private void setRouteVolumeOnHandler(long requestId, @NonNull MediaRoute2Info route, private void setRouteVolumeOnHandler(long uniqueRequestId, @NonNull MediaRoute2Info route, int volume) { final MediaRoute2Provider provider = findProvider(route.getProviderId()); if (provider == null) { Slog.w(TAG, "setRouteVolume: couldn't find provider for route=" + route); return; } provider.setRouteVolume(requestId, route.getOriginalId(), volume); provider.setRouteVolume(uniqueRequestId, route.getOriginalId(), volume); } private void setSessionVolumeOnHandler(long requestId, @NonNull String uniqueSessionId, int volume) { private void setSessionVolumeOnHandler(long uniqueRequestId, @NonNull String uniqueSessionId, int volume) { final MediaRoute2Provider provider = findProvider(getProviderId(uniqueSessionId)); if (provider == null) { Slog.w(TAG, "setSessionVolume: couldn't find provider for session " + "id=" + uniqueSessionId); return; } provider.setSessionVolume(requestId, getOriginalId(uniqueSessionId), volume); provider.setSessionVolume(uniqueRequestId, getOriginalId(uniqueSessionId), volume); } private void releaseSessionOnHandler(long uniqueRequestId, Loading Loading @@ -1398,10 +1402,10 @@ class MediaRouter2ServiceImpl { } private void onSessionCreatedOnHandler(@NonNull MediaRoute2Provider provider, long requestId, @NonNull RoutingSessionInfo sessionInfo) { long uniqueRequestId, @NonNull RoutingSessionInfo sessionInfo) { notifySessionCreatedToManagers(getManagers(), sessionInfo); if (requestId == REQUEST_ID_NONE) { if (uniqueRequestId == REQUEST_ID_NONE) { // The session is created without any matching request. return; } Loading @@ -1409,7 +1413,7 @@ class MediaRouter2ServiceImpl { SessionCreationRequest matchingRequest = null; for (SessionCreationRequest request : mSessionCreationRequests) { if (request.mRequestId == requestId if (request.mUniqueRequestId == uniqueRequestId && TextUtils.equals( request.mRoute.getProviderId(), provider.getUniqueId())) { matchingRequest = request; Loading @@ -1419,7 +1423,7 @@ class MediaRouter2ServiceImpl { if (matchingRequest == null) { Slog.w(TAG, "Ignoring session creation result for unknown request. " + "requestId=" + requestId + ", sessionInfo=" + sessionInfo); + "uniqueRequestId=" + uniqueRequestId + ", sessionInfo=" + sessionInfo); return; } Loading @@ -1428,7 +1432,7 @@ class MediaRouter2ServiceImpl { if (sessionInfo == null) { // Failed notifySessionCreationFailedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); toOriginalRequestId(uniqueRequestId)); return; } Loading @@ -1438,15 +1442,15 @@ class MediaRouter2ServiceImpl { if (!sessionInfo.getSelectedRoutes().contains(originalRouteId)) { Slog.w(TAG, "Created session doesn't match the original request." + " originalRouteId=" + originalRouteId + ", requestId=" + requestId + ", sessionInfo=" + sessionInfo); + ", uniqueRequestId=" + uniqueRequestId + ", sessionInfo=" + sessionInfo); notifySessionCreationFailedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); toOriginalRequestId(uniqueRequestId)); return; } // Succeeded notifySessionCreatedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId), sessionInfo); toOriginalRequestId(uniqueRequestId), sessionInfo); mSessionToRouterMap.put(sessionInfo.getId(), routerRecord); } Loading Loading @@ -1487,16 +1491,16 @@ class MediaRouter2ServiceImpl { } private void onRequestFailedOnHandler(@NonNull MediaRoute2Provider provider, long requestId, int reason) { if (handleSessionCreationRequestFailed(provider, requestId, reason)) { long uniqueRequestId, int reason) { if (handleSessionCreationRequestFailed(provider, uniqueRequestId, reason)) { return; } final int requesterId = toRequesterId(requestId); final int requesterId = toRequesterId(uniqueRequestId); for (ManagerRecord manager : getManagerRecords()) { if (manager.mManagerId == requesterId) { notifyRequestFailedToManager( manager.mManager, toOriginalRequestId(requestId), reason); manager.mManager, toOriginalRequestId(uniqueRequestId), reason); return; } } Loading @@ -1505,16 +1509,17 @@ class MediaRouter2ServiceImpl { // TODO: Notify router too when the related callback is introduced. } // TODO: Find a way to prevent providers from notifying error on random requestId. // TODO: Find a way to prevent providers from notifying error on random uniqueRequestId. // Solutions can be: // 1) Record the other type of requests too (not only session creation request) // 2) Throw exception on providers when they try to notify error on random requestId. // 2) Throw exception on providers when they try to notify error on // random uniqueRequestId. private boolean handleSessionCreationRequestFailed(@NonNull MediaRoute2Provider provider, long requestId, int reason) { long uniqueRequestId, int reason) { // Check whether the failure is about creating a session SessionCreationRequest matchingRequest = null; for (SessionCreationRequest request : mSessionCreationRequests) { if (request.mRequestId == requestId && TextUtils.equals( if (request.mUniqueRequestId == uniqueRequestId && TextUtils.equals( request.mRoute.getProviderId(), provider.getUniqueId())) { matchingRequest = request; break; Loading @@ -1532,10 +1537,10 @@ class MediaRouter2ServiceImpl { // The call should be made by either MediaRouter2 or MediaRouter2Manager. if (matchingRequest.mRequestedManagerRecord == null) { notifySessionCreationFailedToRouter( matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); matchingRequest.mRouterRecord, toOriginalRequestId(uniqueRequestId)); } else { notifyRequestFailedToManager(matchingRequest.mRequestedManagerRecord.mManager, toOriginalRequestId(requestId), reason); toOriginalRequestId(uniqueRequestId), reason); } return true; } Loading Loading @@ -1811,16 +1816,16 @@ class MediaRouter2ServiceImpl { final class SessionCreationRequest { public final RouterRecord mRouterRecord; public final long mRequestId; public final long mUniqueRequestId; public final MediaRoute2Info mRoute; public final ManagerRecord mRequestedManagerRecord; // requestedManagerRecord is not null only when the request is made by manager. SessionCreationRequest(@NonNull RouterRecord routerRecord, long requestId, SessionCreationRequest(@NonNull RouterRecord routerRecord, long uniqueRequestId, @NonNull MediaRoute2Info route, @Nullable ManagerRecord requestedManagerRecord) { mRouterRecord = routerRecord; mRequestId = requestId; mUniqueRequestId = uniqueRequestId; mRoute = route; mRequestedManagerRecord = requestedManagerRecord; } Loading Loading
services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +45 −40 Original line number Diff line number Diff line Loading @@ -1114,9 +1114,9 @@ class MediaRouter2ServiceImpl { @Override public void onSessionCreated(@NonNull MediaRoute2Provider provider, long requestId, @NonNull RoutingSessionInfo sessionInfo) { long uniqueRequestId, @NonNull RoutingSessionInfo sessionInfo) { sendMessage(PooledLambda.obtainMessage(UserHandler::onSessionCreatedOnHandler, this, provider, requestId, sessionInfo)); this, provider, uniqueRequestId, sessionInfo)); } Loading @@ -1135,10 +1135,10 @@ class MediaRouter2ServiceImpl { } @Override public void onRequestFailed(@NonNull MediaRoute2Provider provider, long requestId, public void onRequestFailed(@NonNull MediaRoute2Provider provider, long uniqueRequestId, int reason) { sendMessage(PooledLambda.obtainMessage(UserHandler::onRequestFailedOnHandler, this, provider, requestId, reason)); this, provider, uniqueRequestId, reason)); } @Nullable Loading Loading @@ -1229,7 +1229,7 @@ class MediaRouter2ServiceImpl { return -1; } private void requestCreateSessionOnHandler(long requestId, private void requestCreateSessionOnHandler(long uniqueRequestId, @NonNull RouterRecord routerRecord, @Nullable ManagerRecord managerRecord, @NonNull MediaRoute2Info route, @Nullable Bundle sessionHints) { Loading @@ -1237,20 +1237,21 @@ class MediaRouter2ServiceImpl { if (provider == null) { Slog.w(TAG, "Ignoring session creation request since no provider found for" + " given route=" + route); notifySessionCreationFailedToRouter(routerRecord, toOriginalRequestId(requestId)); notifySessionCreationFailedToRouter(routerRecord, toOriginalRequestId(uniqueRequestId)); return; } SessionCreationRequest request = new SessionCreationRequest(routerRecord, requestId, route, managerRecord); new SessionCreationRequest(routerRecord, uniqueRequestId, route, managerRecord); mSessionCreationRequests.add(request); provider.requestCreateSession(requestId, routerRecord.mPackageName, provider.requestCreateSession(uniqueRequestId, routerRecord.mPackageName, route.getOriginalId(), sessionHints); } // routerRecord can be null if the session is system's. private void selectRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void selectRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "selecting")) { Loading @@ -1263,11 +1264,13 @@ class MediaRouter2ServiceImpl { if (provider == null) { return; } provider.selectRoute(requestId, getOriginalId(uniqueSessionId), route.getOriginalId()); provider.selectRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } // routerRecord can be null if the session is system's. private void deselectRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void deselectRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "deselecting")) { Loading @@ -1281,12 +1284,13 @@ class MediaRouter2ServiceImpl { return; } provider.deselectRoute(requestId, getOriginalId(uniqueSessionId), provider.deselectRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } // routerRecord can be null if the session is system's. private void transferToRouteOnHandler(long requestId, @Nullable RouterRecord routerRecord, private void transferToRouteOnHandler(long uniqueRequestId, @Nullable RouterRecord routerRecord, @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) { if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route, "transferring to")) { Loading @@ -1299,7 +1303,7 @@ class MediaRouter2ServiceImpl { if (provider == null) { return; } provider.transferToRoute(requestId, getOriginalId(uniqueSessionId), provider.transferToRoute(uniqueRequestId, getOriginalId(uniqueSessionId), route.getOriginalId()); } Loading Loading @@ -1342,25 +1346,25 @@ class MediaRouter2ServiceImpl { return true; } private void setRouteVolumeOnHandler(long requestId, @NonNull MediaRoute2Info route, private void setRouteVolumeOnHandler(long uniqueRequestId, @NonNull MediaRoute2Info route, int volume) { final MediaRoute2Provider provider = findProvider(route.getProviderId()); if (provider == null) { Slog.w(TAG, "setRouteVolume: couldn't find provider for route=" + route); return; } provider.setRouteVolume(requestId, route.getOriginalId(), volume); provider.setRouteVolume(uniqueRequestId, route.getOriginalId(), volume); } private void setSessionVolumeOnHandler(long requestId, @NonNull String uniqueSessionId, int volume) { private void setSessionVolumeOnHandler(long uniqueRequestId, @NonNull String uniqueSessionId, int volume) { final MediaRoute2Provider provider = findProvider(getProviderId(uniqueSessionId)); if (provider == null) { Slog.w(TAG, "setSessionVolume: couldn't find provider for session " + "id=" + uniqueSessionId); return; } provider.setSessionVolume(requestId, getOriginalId(uniqueSessionId), volume); provider.setSessionVolume(uniqueRequestId, getOriginalId(uniqueSessionId), volume); } private void releaseSessionOnHandler(long uniqueRequestId, Loading Loading @@ -1398,10 +1402,10 @@ class MediaRouter2ServiceImpl { } private void onSessionCreatedOnHandler(@NonNull MediaRoute2Provider provider, long requestId, @NonNull RoutingSessionInfo sessionInfo) { long uniqueRequestId, @NonNull RoutingSessionInfo sessionInfo) { notifySessionCreatedToManagers(getManagers(), sessionInfo); if (requestId == REQUEST_ID_NONE) { if (uniqueRequestId == REQUEST_ID_NONE) { // The session is created without any matching request. return; } Loading @@ -1409,7 +1413,7 @@ class MediaRouter2ServiceImpl { SessionCreationRequest matchingRequest = null; for (SessionCreationRequest request : mSessionCreationRequests) { if (request.mRequestId == requestId if (request.mUniqueRequestId == uniqueRequestId && TextUtils.equals( request.mRoute.getProviderId(), provider.getUniqueId())) { matchingRequest = request; Loading @@ -1419,7 +1423,7 @@ class MediaRouter2ServiceImpl { if (matchingRequest == null) { Slog.w(TAG, "Ignoring session creation result for unknown request. " + "requestId=" + requestId + ", sessionInfo=" + sessionInfo); + "uniqueRequestId=" + uniqueRequestId + ", sessionInfo=" + sessionInfo); return; } Loading @@ -1428,7 +1432,7 @@ class MediaRouter2ServiceImpl { if (sessionInfo == null) { // Failed notifySessionCreationFailedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); toOriginalRequestId(uniqueRequestId)); return; } Loading @@ -1438,15 +1442,15 @@ class MediaRouter2ServiceImpl { if (!sessionInfo.getSelectedRoutes().contains(originalRouteId)) { Slog.w(TAG, "Created session doesn't match the original request." + " originalRouteId=" + originalRouteId + ", requestId=" + requestId + ", sessionInfo=" + sessionInfo); + ", uniqueRequestId=" + uniqueRequestId + ", sessionInfo=" + sessionInfo); notifySessionCreationFailedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); toOriginalRequestId(uniqueRequestId)); return; } // Succeeded notifySessionCreatedToRouter(matchingRequest.mRouterRecord, toOriginalRequestId(requestId), sessionInfo); toOriginalRequestId(uniqueRequestId), sessionInfo); mSessionToRouterMap.put(sessionInfo.getId(), routerRecord); } Loading Loading @@ -1487,16 +1491,16 @@ class MediaRouter2ServiceImpl { } private void onRequestFailedOnHandler(@NonNull MediaRoute2Provider provider, long requestId, int reason) { if (handleSessionCreationRequestFailed(provider, requestId, reason)) { long uniqueRequestId, int reason) { if (handleSessionCreationRequestFailed(provider, uniqueRequestId, reason)) { return; } final int requesterId = toRequesterId(requestId); final int requesterId = toRequesterId(uniqueRequestId); for (ManagerRecord manager : getManagerRecords()) { if (manager.mManagerId == requesterId) { notifyRequestFailedToManager( manager.mManager, toOriginalRequestId(requestId), reason); manager.mManager, toOriginalRequestId(uniqueRequestId), reason); return; } } Loading @@ -1505,16 +1509,17 @@ class MediaRouter2ServiceImpl { // TODO: Notify router too when the related callback is introduced. } // TODO: Find a way to prevent providers from notifying error on random requestId. // TODO: Find a way to prevent providers from notifying error on random uniqueRequestId. // Solutions can be: // 1) Record the other type of requests too (not only session creation request) // 2) Throw exception on providers when they try to notify error on random requestId. // 2) Throw exception on providers when they try to notify error on // random uniqueRequestId. private boolean handleSessionCreationRequestFailed(@NonNull MediaRoute2Provider provider, long requestId, int reason) { long uniqueRequestId, int reason) { // Check whether the failure is about creating a session SessionCreationRequest matchingRequest = null; for (SessionCreationRequest request : mSessionCreationRequests) { if (request.mRequestId == requestId && TextUtils.equals( if (request.mUniqueRequestId == uniqueRequestId && TextUtils.equals( request.mRoute.getProviderId(), provider.getUniqueId())) { matchingRequest = request; break; Loading @@ -1532,10 +1537,10 @@ class MediaRouter2ServiceImpl { // The call should be made by either MediaRouter2 or MediaRouter2Manager. if (matchingRequest.mRequestedManagerRecord == null) { notifySessionCreationFailedToRouter( matchingRequest.mRouterRecord, toOriginalRequestId(requestId)); matchingRequest.mRouterRecord, toOriginalRequestId(uniqueRequestId)); } else { notifyRequestFailedToManager(matchingRequest.mRequestedManagerRecord.mManager, toOriginalRequestId(requestId), reason); toOriginalRequestId(uniqueRequestId), reason); } return true; } Loading Loading @@ -1811,16 +1816,16 @@ class MediaRouter2ServiceImpl { final class SessionCreationRequest { public final RouterRecord mRouterRecord; public final long mRequestId; public final long mUniqueRequestId; public final MediaRoute2Info mRoute; public final ManagerRecord mRequestedManagerRecord; // requestedManagerRecord is not null only when the request is made by manager. SessionCreationRequest(@NonNull RouterRecord routerRecord, long requestId, SessionCreationRequest(@NonNull RouterRecord routerRecord, long uniqueRequestId, @NonNull MediaRoute2Info route, @Nullable ManagerRecord requestedManagerRecord) { mRouterRecord = routerRecord; mRequestId = requestId; mUniqueRequestId = uniqueRequestId; mRoute = route; mRequestedManagerRecord = requestedManagerRecord; } Loading