diff options
| -rw-r--r-- | services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java index 011659a616d3..3eb38a7029e6 100644 --- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java +++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java @@ -17,6 +17,7 @@ package com.android.server.media; import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO; +import static android.media.MediaRoute2Info.FEATURE_LIVE_VIDEO; import android.annotation.NonNull; import android.annotation.Nullable; @@ -217,6 +218,28 @@ import java.util.stream.Stream; } } + @Override + public void setRouteVolume(long requestId, String routeOriginalId, int volume) { + synchronized (mLock) { + var targetProviderProxyId = mOriginalRouteIdToProviderId.get(routeOriginalId); + var targetProviderProxyRecord = mProxyRecords.get(targetProviderProxyId); + // Holds the target route, if it's managed by a provider service. Holds null otherwise. + if (targetProviderProxyRecord != null) { + var serviceTargetRoute = + targetProviderProxyRecord.mNewOriginalIdToSourceOriginalIdMap.get( + routeOriginalId); + if (serviceTargetRoute != null) { + targetProviderProxyRecord.mProxy.setRouteVolume( + requestId, serviceTargetRoute, volume); + } else { + notifyRequestFailed( + requestId, MediaRoute2ProviderService.REASON_ROUTE_NOT_AVAILABLE); + } + } + } + super.setRouteVolume(requestId, routeOriginalId, volume); + } + /** * Returns the uid that corresponds to the given name and user handle, or {@link * Process#INVALID_UID} if a uid couldn't be found. @@ -463,11 +486,18 @@ import java.util.stream.Stream; } String id = asSystemRouteId(providerInfo.getUniqueId(), sourceRoute.getOriginalId()); - var newRoute = - new MediaRoute2Info.Builder(id, sourceRoute.getName()) - .addFeature(FEATURE_LIVE_AUDIO) - .build(); - routesMap.put(id, newRoute); + var newRouteBuilder = new MediaRoute2Info.Builder(id, sourceRoute); + if ((sourceRoute.getSupportedRoutingTypes() + & MediaRoute2Info.FLAG_ROUTING_TYPE_SYSTEM_AUDIO) + != 0) { + newRouteBuilder.addFeature(FEATURE_LIVE_AUDIO); + } + if ((sourceRoute.getSupportedRoutingTypes() + & MediaRoute2Info.FLAG_ROUTING_TYPE_SYSTEM_VIDEO) + != 0) { + newRouteBuilder.addFeature(FEATURE_LIVE_VIDEO); + } + routesMap.put(id, newRouteBuilder.build()); idMap.put(id, sourceRoute.getOriginalId()); } return new ProviderProxyRecord( |