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

Commit 361c0c9a authored by Santiago Seifert's avatar Santiago Seifert
Browse files

Implement stream expansion support for mirroring sessions

Bug: b/362507305
Test: atest CtsMediaBetterTogetherTestCases:android.media.router.cts.SystemMediaRoutingTest
Flag: com.android.media.flags.enable_mirroring_in_media_router_2
Change-Id: I04352c35e53adb3a358b2e9c1d8b7a45d1d93c85
parent a4418861
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -267,6 +267,50 @@ import java.util.stream.Stream;
        notifyRequestFailed(requestId, MediaRoute2ProviderService.REASON_ROUTE_NOT_AVAILABLE);
    }

    @Override
    public void selectRoute(long requestId, String sessionId, String routeId) {
        if (SYSTEM_SESSION_ID.equals(sessionId)) {
            super.selectRoute(requestId, sessionId, routeId);
            return;
        }
        synchronized (mLock) {
            var sessionRecord = getSessionRecordByOriginalId(sessionId);
            var proxyRecord = sessionRecord != null ? sessionRecord.getProxyRecord() : null;
            if (proxyRecord != null) {
                var targetSourceRouteId =
                        proxyRecord.mNewOriginalIdToSourceOriginalIdMap.get(routeId);
                if (targetSourceRouteId != null) {
                    proxyRecord.mProxy.selectRoute(
                            requestId, sessionRecord.getServiceSessionId(), targetSourceRouteId);
                }
                return;
            }
        }
        notifyRequestFailed(requestId, MediaRoute2ProviderService.REASON_ROUTE_NOT_AVAILABLE);
    }

    @Override
    public void deselectRoute(long requestId, String sessionId, String routeId) {
        if (SYSTEM_SESSION_ID.equals(sessionId)) {
            super.selectRoute(requestId, sessionId, routeId);
            return;
        }
        synchronized (mLock) {
            var sessionRecord = getSessionRecordByOriginalId(sessionId);
            var proxyRecord = sessionRecord != null ? sessionRecord.getProxyRecord() : null;
            if (proxyRecord != null) {
                var targetSourceRouteId =
                        proxyRecord.mNewOriginalIdToSourceOriginalIdMap.get(routeId);
                if (targetSourceRouteId != null) {
                    proxyRecord.mProxy.deselectRoute(
                            requestId, sessionRecord.getServiceSessionId(), targetSourceRouteId);
                }
                return;
            }
        }
        notifyRequestFailed(requestId, MediaRoute2ProviderService.REASON_ROUTE_NOT_AVAILABLE);
    }

    @GuardedBy("mLock")
    private SystemMediaSessionRecord getSessionRecordByOriginalId(String sessionOriginalId) {
        if (FORCE_GLOBAL_ROUTING_SESSION) {