Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb3191c0 authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge "Add support for system media route volume adjustment" into main

parents abcbc53a b58caeca
Loading
Loading
Loading
Loading
+35 −5
Original line number Diff line number Diff line
@@ -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(