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

Commit 0a926579 authored by Hyundo Moon's avatar Hyundo Moon
Browse files

Implement route control methods of RouteSessionController

This CL implements following methods in
MediaRouter2.RouteSessionController:
 - selectRoute()
 - deselectRoute()
 - transferToRoute()

Bug: 146400872
Test: atest mediaroutertest
Change-Id: Ie50067aabbf028b7c3368ccfcbd81cc8968b0b2c
parent 26ccf3f0
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -30,7 +30,7 @@ oneway interface IMediaRoute2Provider {


    void selectRoute(int sessionId, String routeId);
    void selectRoute(int sessionId, String routeId);
    void deselectRoute(int sessionId, String routeId);
    void deselectRoute(int sessionId, String routeId);
    void transferRoute(int sessionId, String routeId);
    void transferToRoute(int sessionId, String routeId);


    void notifyControlRequestSent(String id, in Intent request);
    void notifyControlRequestSent(String id, in Intent request);
    void requestSetVolume(String id, int volume);
    void requestSetVolume(String id, int volume);
+1 −0
Original line number Original line Diff line number Diff line
@@ -28,4 +28,5 @@ oneway interface IMediaRoute2ProviderClient {
    void updateState(in MediaRoute2ProviderInfo providerInfo,
    void updateState(in MediaRoute2ProviderInfo providerInfo,
            in List<RouteSessionInfo> sessionInfos);
            in List<RouteSessionInfo> sessionInfos);
    void notifySessionCreated(in @nullable RouteSessionInfo sessionInfo, long requestId);
    void notifySessionCreated(in @nullable RouteSessionInfo sessionInfo, long requestId);
    void notifySessionInfoChanged(in RouteSessionInfo sessionInfo);
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,4 +29,5 @@ oneway interface IMediaRouter2Client {
    void notifyRoutesRemoved(in List<MediaRoute2Info> routes);
    void notifyRoutesRemoved(in List<MediaRoute2Info> routes);
    void notifyRoutesChanged(in List<MediaRoute2Info> routes);
    void notifyRoutesChanged(in List<MediaRoute2Info> routes);
    void notifySessionCreated(in @nullable RouteSessionInfo sessionInfo, int requestId);
    void notifySessionCreated(in @nullable RouteSessionInfo sessionInfo, int requestId);
    void notifySessionInfoChanged(in RouteSessionInfo sessionInfo);
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,9 @@ interface IMediaRouterService {
    void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route,
    void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route,
            String controlCategory, int requestId);
            String controlCategory, int requestId);
    void setControlCategories(IMediaRouter2Client client, in List<String> categories);
    void setControlCategories(IMediaRouter2Client client, in List<String> categories);
    void selectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);
    void deselectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);
    void transferToRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route);


    void registerManager(IMediaRouter2Manager manager, String packageName);
    void registerManager(IMediaRouter2Manager manager, String packageName);
    void unregisterManager(IMediaRouter2Manager manager);
    void unregisterManager(IMediaRouter2Manager manager);
+34 −5
Original line number Original line Diff line number Diff line
@@ -134,7 +134,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     */
     */
    public final void updateSessionInfo(@NonNull RouteSessionInfo sessionInfo) {
    public final void updateSessionInfo(@NonNull RouteSessionInfo sessionInfo) {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");

        int sessionId = sessionInfo.getSessionId();
        int sessionId = sessionInfo.getSessionId();
        if (sessionInfo.getSelectedRoutes().isEmpty()) {
        if (sessionInfo.getSelectedRoutes().isEmpty()) {
            releaseSession(sessionId);
            releaseSession(sessionId);
@@ -152,6 +151,35 @@ public abstract class MediaRoute2ProviderService extends Service {
        }
        }
    }
    }


    /**
     * Notifies the session is changed.
     *
     * TODO: This method is temporary, only created for tests. Remove when the alternative is ready.
     * @hide
     */
    public final void notifySessionInfoChanged(@NonNull RouteSessionInfo sessionInfo) {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");

        int sessionId = sessionInfo.getSessionId();
        synchronized (mSessionLock) {
            if (mSessionInfo.containsKey(sessionId)) {
                mSessionInfo.put(sessionId, sessionInfo);
            } else {
                Log.w(TAG, "Ignoring unknown session info.");
                return;
            }
        }

        if (mClient == null) {
            return;
        }
        try {
            mClient.notifySessionInfoChanged(sessionInfo);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to notify session info changed.");
        }
    }

    /**
    /**
     * Notifies clients of that the session is created and ready for use. If the session can be
     * Notifies clients of that the session is created and ready for use. If the session can be
     * controlled, pass a {@link Bundle} that contains how to control it.
     * controlled, pass a {@link Bundle} that contains how to control it.
@@ -163,6 +191,7 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param requestId id of the previous request to create this session
     * @param requestId id of the previous request to create this session
     */
     */
    // TODO: fail reason?
    // TODO: fail reason?
    // TODO: Maybe better to create notifySessionCreationFailed?
    public final void notifySessionCreated(@Nullable RouteSessionInfo sessionInfo, long requestId) {
    public final void notifySessionCreated(@Nullable RouteSessionInfo sessionInfo, long requestId) {
        if (sessionInfo != null) {
        if (sessionInfo != null) {
            int sessionId = sessionInfo.getSessionId();
            int sessionId = sessionInfo.getSessionId();
@@ -269,7 +298,7 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param sessionId id of the session
     * @param sessionId id of the session
     * @param routeId id of the route
     * @param routeId id of the route
     */
     */
    public abstract void onTransferRoute(int sessionId, @NonNull String routeId);
    public abstract void onTransferToRoute(int sessionId, @NonNull String routeId);


    /**
    /**
     * Updates provider info and publishes routes and session info.
     * Updates provider info and publishes routes and session info.
@@ -364,11 +393,11 @@ public abstract class MediaRoute2ProviderService extends Service {
        }
        }


        @Override
        @Override
        public void transferRoute(int sessionId, String routeId) {
        public void transferToRoute(int sessionId, String routeId) {
            if (!checkCallerisSystem()) {
            if (!checkCallerisSystem()) {
                return;
                return;
            }
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onTransferRoute,
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onTransferToRoute,
                    MediaRoute2ProviderService.this, sessionId, routeId));
                    MediaRoute2ProviderService.this, sessionId, routeId));
        }
        }


Loading