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

Commit b09389e2 authored by Alex Dadukin's avatar Alex Dadukin
Browse files

Update transfer meta-data in RoutingSessionInfo on route re-selection

Bug: b/279555229
Test: mp droid
Change-Id: I6ba5d242149bef57b635926802b506460909eb38
parent 50144b52
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.media;
import android.media.MediaRoute2Info;
import android.media.RoutingSessionInfo;
import android.os.Bundle;
import android.os.UserHandle;

/**
 * @hide
@@ -35,5 +36,6 @@ oneway interface IMediaRouter2 {
     * Call MediaRouterService#requestCreateSessionWithRouter2 to pass the result.
     */
    void requestCreateSessionByManager(long uniqueRequestId, in RoutingSessionInfo oldSession,
        in MediaRoute2Info route);
        in MediaRoute2Info route, in UserHandle transferInitiatorUserHandle,
        in String transferInitiatorPackageName);
}
+4 −2
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ interface IMediaRouterService {

    void requestCreateSessionWithRouter2(IMediaRouter2 router, int requestId, long managerRequestId,
            in RoutingSessionInfo oldSession, in MediaRoute2Info route,
            in @nullable Bundle sessionHints);
            in @nullable Bundle sessionHints, in UserHandle transferInitiatorUserHandle,
            in String transferInitiatorPackageName);
    void selectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
    void deselectRouteWithRouter2(IMediaRouter2 router, String sessionId, in MediaRoute2Info route);
    void transferToRouteWithRouter2(IMediaRouter2 router, String sessionId,
@@ -84,7 +85,8 @@ interface IMediaRouterService {
    void stopScan(IMediaRouter2Manager manager);

    void requestCreateSessionWithManager(IMediaRouter2Manager manager, int requestId,
            in RoutingSessionInfo oldSession, in @nullable MediaRoute2Info route);
            in RoutingSessionInfo oldSession, in @nullable MediaRoute2Info route,
            in UserHandle transferInitiatorUserHandle, in String transferInitiatorPackageName);
    void selectRouteWithManager(IMediaRouter2Manager manager, int requestId,
            String sessionId, in MediaRoute2Info route);
    void deselectRouteWithManager(IMediaRouter2Manager manager, int requestId,
+35 −10
Original line number Diff line number Diff line
@@ -739,7 +739,9 @@ public final class MediaRouter2 {
    void requestCreateController(
            @NonNull RoutingController controller,
            @NonNull MediaRoute2Info route,
            long managerRequestId) {
            long managerRequestId,
            @NonNull UserHandle transferInitiatorUserHandle,
            @NonNull String transferInitiatorPackageName) {

        final int requestId = mNextRequestId.getAndIncrement();

@@ -768,7 +770,9 @@ public final class MediaRouter2 {
                        managerRequestId,
                        controller.getRoutingSessionInfo(),
                        route,
                        controllerHints);
                        controllerHints,
                        transferInitiatorUserHandle,
                        transferInitiatorPackageName);
            } catch (RemoteException ex) {
                Log.e(TAG, "createControllerForTransfer: "
                                + "Failed to request for creating a controller.", ex);
@@ -1085,7 +1089,11 @@ public final class MediaRouter2 {
    }

    void onRequestCreateControllerByManagerOnHandler(
            RoutingSessionInfo oldSession, MediaRoute2Info route, long managerRequestId) {
            RoutingSessionInfo oldSession,
            MediaRoute2Info route,
            long managerRequestId,
            @NonNull UserHandle transferInitiatorUserHandle,
            @NonNull String transferInitiatorPackageName) {
        Log.i(
                TAG,
                TextUtils.formatSimple(
@@ -1102,7 +1110,8 @@ public final class MediaRouter2 {
        if (controller == null) {
            return;
        }
        requestCreateController(controller, route, managerRequestId);
        requestCreateController(controller, route, managerRequestId, transferInitiatorUserHandle,
                transferInitiatorPackageName);
    }

    private List<MediaRoute2Info> getSortedRoutes(
@@ -2027,14 +2036,20 @@ public final class MediaRouter2 {

        @Override
        public void requestCreateSessionByManager(
                long managerRequestId, RoutingSessionInfo oldSession, MediaRoute2Info route) {
                long managerRequestId,
                RoutingSessionInfo oldSession,
                MediaRoute2Info route,
                UserHandle transferInitiatorUserHandle,
                String transferInitiatorPackageName) {
            mHandler.sendMessage(
                    obtainMessage(
                            MediaRouter2::onRequestCreateControllerByManagerOnHandler,
                            MediaRouter2.this,
                            oldSession,
                            route,
                            managerRequestId));
                            managerRequestId,
                            transferInitiatorUserHandle,
                            transferInitiatorPackageName));
        }
    }

@@ -2339,7 +2354,8 @@ public final class MediaRouter2 {
                        transferInitiatorUserHandle,
                        transferInitiatorPackageName);
            } else {
                requestCreateSession(sessionInfo, route);
                requestCreateSession(sessionInfo, route, transferInitiatorUserHandle,
                        transferInitiatorPackageName);
            }
        }

@@ -2395,7 +2411,10 @@ public final class MediaRouter2 {
         * @param route The {@link MediaRoute2Info route} to transfer to.
         */
        private void requestCreateSession(
                @NonNull RoutingSessionInfo oldSession, @NonNull MediaRoute2Info route) {
                @NonNull RoutingSessionInfo oldSession,
                @NonNull MediaRoute2Info route,
                @NonNull UserHandle transferInitiatorUserHandle,
                @NonNull String transferInitiatorPackageName) {
            if (TextUtils.isEmpty(oldSession.getClientPackageName())) {
                Log.w(TAG, "requestCreateSession: Can't create a session without package name.");
                this.onTransferFailed(oldSession, route);
@@ -2406,7 +2425,12 @@ public final class MediaRouter2 {

            try {
                mMediaRouterService.requestCreateSessionWithManager(
                        mClient, requestId, oldSession, route);
                        mClient,
                        requestId,
                        oldSession,
                        route,
                        transferInitiatorUserHandle,
                        transferInitiatorPackageName);
            } catch (RemoteException ex) {
                throw ex.rethrowFromSystemServer();
            }
@@ -3133,7 +3157,8 @@ public final class MediaRouter2 {
                return;
            }

            requestCreateController(controller, route, MANAGER_REQUEST_ID_NONE);
            requestCreateController(controller, route, MANAGER_REQUEST_ID_NONE,
                    android.os.Process.myUserHandle(), mContext.getPackageName());
        }

        @Override
+7 −4
Original line number Diff line number Diff line
@@ -521,8 +521,8 @@ public final class MediaRouter2Manager {
            transferToRoute(
                    sessionInfo, route, transferInitiatorUserHandle, transferInitiatorPackageName);
        } else {
            // TODO: b/279555229 - propagate transferInitiationUid to remote routes as well.
            requestCreateSession(sessionInfo, route);
            requestCreateSession(sessionInfo, route, transferInitiatorUserHandle,
                    transferInitiatorPackageName);
        }
    }

@@ -911,7 +911,9 @@ public final class MediaRouter2Manager {
        }
    }

    private void requestCreateSession(RoutingSessionInfo oldSession, MediaRoute2Info route) {
    private void requestCreateSession(RoutingSessionInfo oldSession, MediaRoute2Info route,
            @NonNull UserHandle transferInitiatorUserHandle,
            @NonNull String transferInitiationPackageName) {
        if (TextUtils.isEmpty(oldSession.getClientPackageName())) {
            Log.w(TAG, "requestCreateSession: Can't create a session without package name.");
            notifyTransferFailed(oldSession, route);
@@ -922,7 +924,8 @@ public final class MediaRouter2Manager {

        try {
            mMediaRouterService.requestCreateSessionWithManager(
                    mClient, requestId, oldSession, route);
                    mClient, requestId, oldSession, route, transferInitiatorUserHandle,
                    transferInitiationPackageName);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
+3 −2
Original line number Diff line number Diff line
@@ -57,11 +57,12 @@ abstract class MediaRoute2Provider {

    public abstract void requestCreateSession(
            long requestId,
            UserHandle userHandle,
            String packageName,
            String routeId,
            @Nullable Bundle sessionHints,
            @RoutingSessionInfo.TransferReason int transferReason);
            @RoutingSessionInfo.TransferReason int transferReason,
            @NonNull UserHandle transferInitiatorUserHandle,
            @NonNull String transferInitiatorPackageName);

    public abstract void releaseSession(long requestId, String sessionId);

Loading