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

Commit 6a2f1d67 authored by Kyunglyul Hyun's avatar Kyunglyul Hyun
Browse files

MediaRouter: Defer releasing routing controller when transfer

In order to allow media router to communicate with the old routing
controller for synchronizing media status during transfer,
this CL postpone releasing the old routing controller.

Basically media router should release the old routing controller by
itself when it's done with the old routing controller.
If it didn't, the old routing controller is automatically released
after timeout (30s for now)

This CL also clarifies "old routing controller" in onTransfer callback.
Now it is consistent regardless of who requested transfer.

A request from MediaRouter2Manager is handled by MediaRouter2 to
simplify session creation logic.
Limitation of this approach is that a routing session unknown to
MediaRouter2 can't be transferred to a different provider but it is out
of R scope so it's okay.

Bug: 158713035
Test: CTS test && atest mediaroutertest && manually transfer using
support v7 demos

Change-Id: I168af69e2a25240227aea0fd9e892eaa91e78ee3
parent 1d1bc0f5
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ oneway interface IMediaRouter2 {
    void notifySessionReleased(in RoutingSessionInfo sessionInfo);
    /**
     * Gets hints of the new session for the given route.
     * Call MediaRouterService#notifySessionHintsForCreatingSession to pass the result.
     * Call MediaRouterService#requestCreateSessionWithRouter2 to pass the result.
     */
    void getSessionHintsForCreatingSession(long uniqueRequestId, in MediaRoute2Info route);
    void requestCreateSessionByManager(long uniqueRequestId, in RoutingSessionInfo oldSession,
        in MediaRoute2Info route);
}
+5 −6
Original line number Diff line number Diff line
@@ -57,10 +57,9 @@ interface IMediaRouterService {
            in RouteDiscoveryPreference preference);
    void setRouteVolumeWithRouter2(IMediaRouter2 router, in MediaRoute2Info route, int volume);

    void requestCreateSessionWithRouter2(IMediaRouter2 router, int requestId,
            in MediaRoute2Info route, in @nullable Bundle sessionHints);
    void notifySessionHintsForCreatingSession(IMediaRouter2 router, long uniqueRequestId,
                in MediaRoute2Info route, in @nullable Bundle sessionHints);
    void requestCreateSessionWithRouter2(IMediaRouter2 router, int requestId, long managerRequestId,
            in RoutingSessionInfo oldSession, in MediaRoute2Info route,
            in @nullable Bundle sessionHints);
    void selectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
    void deselectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
    void transferToRouteWithRouter2(IMediaRouter2 router, String sessionId,
@@ -76,7 +75,7 @@ interface IMediaRouterService {
            in MediaRoute2Info route, int volume);

    void requestCreateSessionWithManager(IMediaRouter2Manager manager, int requestId,
            String packageName, in @nullable MediaRoute2Info route);
            in RoutingSessionInfo oldSession, in @nullable MediaRoute2Info route);
    void selectRouteWithManager(IMediaRouter2Manager manager, int requestId,
            String sessionId, in MediaRoute2Info route);
    void deselectRouteWithManager(IMediaRouter2Manager manager, int requestId,
+191 −156

File changed.

Preview size limit exceeded, changes collapsed.

+7 −2
Original line number Diff line number Diff line
@@ -54,6 +54,12 @@ import java.util.stream.Collectors;
public final class MediaRouter2Manager {
    private static final String TAG = "MR2Manager";
    private static final Object sLock = new Object();
    /**
     * The request ID for requests not asked by this instance.
     * Shouldn't be used for a valid request.
     * @hide
     */
    public static final int REQUEST_ID_NONE = 0;
    /** @hide */
    @VisibleForTesting
    public static final int TRANSFER_TIMEOUT_MS = 30_000;
@@ -480,7 +486,6 @@ public final class MediaRouter2Manager {
            notifyTransferFailed(matchingRequest.mOldSessionInfo, requestedRoute);
            return;
        }
        releaseSession(matchingRequest.mOldSessionInfo);
        notifyTransferred(matchingRequest.mOldSessionInfo, sessionInfo);
    }

@@ -777,7 +782,7 @@ public final class MediaRouter2Manager {
        if (client != null) {
            try {
                mMediaRouterService.requestCreateSessionWithManager(
                        client, requestId, oldSession.getClientPackageName(), route);
                        client, requestId, oldSession, route);
            } catch (RemoteException ex) {
                Log.e(TAG, "requestCreateSession: Failed to send a request", ex);
            }
+1 −1
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ public final class RoutingSessionInfo implements Parcelable {
    }

    /**
     * Gets information about how volume is handled on the session.
     * Gets the information about how volume is handled on the session.
     *
     * @return {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or
     * {@link MediaRoute2Info#PLAYBACK_VOLUME_VARIABLE}.
Loading