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

Commit 56337496 authored by Hyundo Moon's avatar Hyundo Moon
Browse files

MediaRouter2: Refactor internal classes

This CL introduces following changes:
 - Remove ambiguous 'client' word usages
 - Clarify AIDL file names and related classes/methods/fields
 - Reorder AIDL methods

Bug: 149642195
Test: CTS and atest mediaroutertest
Change-Id: I53656c3be52ab8deb3fbf96bf7caf9a3476d7af6
parent 0a3c802e
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -17,24 +17,25 @@
package android.media;

import android.content.Intent;
import android.media.IMediaRoute2ProviderClient;
import android.media.IMediaRoute2ProviderServiceCallback;
import android.media.RouteDiscoveryPreference;
import android.os.Bundle;

/**
 * {@hide}
 */
oneway interface IMediaRoute2Provider {
    void setClient(IMediaRoute2ProviderClient client);
    void requestCreateSession(String packageName, String routeId, long requestId,
            in @nullable Bundle sessionHints);
    void releaseSession(String sessionId);
oneway interface IMediaRoute2ProviderService {
    // Note: When changing this file, match the order of methods below with
    // MediaRoute2ProviderService#MediaRoute2ProviderServiceStub for readability.
    void setCallback(IMediaRoute2ProviderServiceCallback callback);
    void updateDiscoveryPreference(in RouteDiscoveryPreference discoveryPreference);
    void setRouteVolume(String routeId, int volume);

    void requestCreateSession(String packageName, String routeId, long requestId,
            in @nullable Bundle sessionHints);
    void selectRoute(String sessionId, String routeId);
    void deselectRoute(String sessionId, String routeId);
    void transferToRoute(String sessionId, String routeId);

    void setRouteVolume(String routeId, int volume);
    void setSessionVolume(String sessionId, int volume);
    void releaseSession(String sessionId);
}
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import android.os.Bundle;
/**
 * @hide
 */
oneway interface IMediaRoute2ProviderClient {
oneway interface IMediaRoute2ProviderServiceCallback {
    // TODO: Change it to updateRoutes?
    void updateState(in MediaRoute2ProviderInfo providerInfo);
    void notifySessionCreated(in RoutingSessionInfo sessionInfo, long requestId);
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import android.os.Bundle;
/**
 * @hide
 */
oneway interface IMediaRouter2Client {
oneway interface IMediaRouter2 {
    void notifyRestoreRoute();
    void notifyRoutesAdded(in List<MediaRoute2Info> routes);
    void notifyRoutesRemoved(in List<MediaRoute2Info> routes);
+33 −30
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.media;

import android.content.Intent;
import android.media.IMediaRouter2Client;
import android.media.IMediaRouter2;
import android.media.IMediaRouter2Manager;
import android.media.IMediaRouterClient;
import android.media.MediaRoute2Info;
@@ -44,40 +44,43 @@ interface IMediaRouterService {
    void requestSetVolume(IMediaRouterClient client, String routeId, int volume);
    void requestUpdateVolume(IMediaRouterClient client, String routeId, int direction);

    // Methods for media router 2
    // Note: When changing this file, match the order of methods below with 
    // MediaRouterService.java for readability.

    // Methods for MediaRouter2
    List<MediaRoute2Info> getSystemRoutes();
    RoutingSessionInfo getSystemSessionInfo();
    void registerClient2(IMediaRouter2Client client, String packageName);
    void unregisterClient2(IMediaRouter2Client client);
    void setRouteVolume2(IMediaRouter2Client client, in MediaRoute2Info route, int volume);
    void setSessionVolume2(IMediaRouter2Client client, String sessionId, int volume);

    void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route, int requestId,
            in @nullable Bundle sessionHints);
    void setDiscoveryRequest2(IMediaRouter2Client client, in RouteDiscoveryPreference preference);
    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 releaseSession(IMediaRouter2Client client, String sessionId);
    void registerRouter2(IMediaRouter2 router, String packageName);
    void unregisterRouter2(IMediaRouter2 router);
    void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
            in RouteDiscoveryPreference preference);
    void setRouteVolumeWithRouter2(IMediaRouter2 router, in MediaRoute2Info route, int volume);

    void requestCreateSessionWithRouter2(IMediaRouter2 router, in MediaRoute2Info route,
            int requestId, 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,
            in MediaRoute2Info route);
    void setSessionVolumeWithRouter2(IMediaRouter2 router, String sessionId, int volume);
    void releaseSessionWithRouter2(IMediaRouter2 router, String sessionId);

    // Methods for MediaRouter2Manager
    List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager);
    void registerManager(IMediaRouter2Manager manager, String packageName);
    void unregisterManager(IMediaRouter2Manager manager);
    void setRouteVolumeWithManager(IMediaRouter2Manager manager, in MediaRoute2Info route,
            int volume);

    void requestCreateClientSession(IMediaRouter2Manager manager, String packageName,
    void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
            in @nullable MediaRoute2Info route, int requestId);

    void setRouteVolume2Manager(IMediaRouter2Manager manager,
            in MediaRoute2Info route, int volume);
    void setSessionVolume2Manager(IMediaRouter2Manager manager,
            String sessionId, int volume);

    List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager);
    void selectClientRoute(IMediaRouter2Manager manager,
            String sessionId, in MediaRoute2Info route);
    void deselectClientRoute(IMediaRouter2Manager manager,
            String sessionId, in MediaRoute2Info route);
    void transferToClientRoute(IMediaRouter2Manager manager,
            String sessionId, in MediaRoute2Info route);
    void releaseClientSession(IMediaRouter2Manager manager, String sessionId);

    void selectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
            in MediaRoute2Info route);
    void deselectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
            in MediaRoute2Info route);
    void transferToRouteWithManager(IMediaRouter2Manager manager, String sessionId,
            in MediaRoute2Info route);
    void setSessionVolumeWithManager(IMediaRouter2Manager manager, String sessionId, int volume);
    void releaseSessionWithManager(IMediaRouter2Manager manager, String sessionId);
}
+42 −42
Original line number Diff line number Diff line
@@ -84,8 +84,8 @@ public abstract class MediaRoute2ProviderService extends Service {
    private final Handler mHandler;
    private final Object mSessionLock = new Object();
    private final AtomicBoolean mStatePublishScheduled = new AtomicBoolean(false);
    private ProviderStub mStub;
    private IMediaRoute2ProviderClient mClient;
    private MediaRoute2ProviderServiceStub mStub;
    private IMediaRoute2ProviderServiceCallback mRemoteCallback;
    private MediaRoute2ProviderInfo mProviderInfo;

    @GuardedBy("mSessionLock")
@@ -107,7 +107,7 @@ public abstract class MediaRoute2ProviderService extends Service {
        //TODO: Allow binding from media router service only?
        if (SERVICE_INTERFACE.equals(intent.getAction())) {
            if (mStub == null) {
                mStub = new ProviderStub();
                mStub = new MediaRoute2ProviderServiceStub();
            }
            return mStub;
        }
@@ -185,14 +185,14 @@ public abstract class MediaRoute2ProviderService extends Service {
            mSessionInfo.put(sessionInfo.getId(), sessionInfo);
        }

        if (mClient == null) {
        if (mRemoteCallback == null) {
            return;
        }
        try {
            // TODO: Calling binder calls in multiple thread may cause timing issue.
            //       Consider to change implementations to avoid the problems.
            //       For example, post binder calls, always send all sessions at once, etc.
            mClient.notifySessionCreated(sessionInfo, requestId);
            mRemoteCallback.notifySessionCreated(sessionInfo, requestId);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to notify session created.");
        }
@@ -206,11 +206,11 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @see #onCreateSession(String, String, long, Bundle)
     */
    public final void notifySessionCreationFailed(long requestId) {
        if (mClient == null) {
        if (mRemoteCallback == null) {
            return;
        }
        try {
            mClient.notifySessionCreationFailed(requestId);
            mRemoteCallback.notifySessionCreationFailed(requestId);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to notify session creation failed.");
        }
@@ -233,11 +233,11 @@ public abstract class MediaRoute2ProviderService extends Service {
            }
        }

        if (mClient == null) {
        if (mRemoteCallback == null) {
            return;
        }
        try {
            mClient.notifySessionUpdated(sessionInfo);
            mRemoteCallback.notifySessionUpdated(sessionInfo);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to notify session info changed.");
        }
@@ -263,11 +263,11 @@ public abstract class MediaRoute2ProviderService extends Service {
            return;
        }

        if (mClient == null) {
        if (mRemoteCallback == null) {
            return;
        }
        try {
            mClient.notifySessionReleased(sessionInfo);
            mRemoteCallback.notifySessionReleased(sessionInfo);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to notify session info changed.");
        }
@@ -382,8 +382,8 @@ public abstract class MediaRoute2ProviderService extends Service {
        schedulePublishState();
    }

    void setClient(IMediaRoute2ProviderClient client) {
        mClient = client;
    void setCallback(IMediaRoute2ProviderServiceCallback callback) {
        mRemoteCallback = callback;
        schedulePublishState();
    }

@@ -398,7 +398,7 @@ public abstract class MediaRoute2ProviderService extends Service {
            return;
        }

        if (mClient == null) {
        if (mRemoteCallback == null) {
            return;
        }

@@ -407,60 +407,56 @@ public abstract class MediaRoute2ProviderService extends Service {
            sessionInfos = new ArrayList<>(mSessionInfo.values());
        }
        try {
            mClient.updateState(mProviderInfo);
            mRemoteCallback.updateState(mProviderInfo);
        } catch (RemoteException ex) {
            Log.w(TAG, "Failed to send onProviderInfoUpdated");
        }
    }

    final class ProviderStub extends IMediaRoute2Provider.Stub {
        ProviderStub() { }
    final class MediaRoute2ProviderServiceStub extends IMediaRoute2ProviderService.Stub {
        MediaRoute2ProviderServiceStub() { }

        boolean checkCallerisSystem() {
            return Binder.getCallingUid() == Process.SYSTEM_UID;
        }

        @Override
        public void setClient(IMediaRoute2ProviderClient client) {
        public void setCallback(IMediaRoute2ProviderServiceCallback callback) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::setClient,
                    MediaRoute2ProviderService.this, client));
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::setCallback,
                    MediaRoute2ProviderService.this, callback));
        }

        @Override
        public void requestCreateSession(String packageName, String routeId, long requestId,
                @Nullable Bundle requestCreateSession) {
        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onCreateSession,
                    MediaRoute2ProviderService.this, packageName, routeId, requestId,
                    requestCreateSession));
            mHandler.sendMessage(obtainMessage(
                    MediaRoute2ProviderService::onDiscoveryPreferenceChanged,
                    MediaRoute2ProviderService.this, discoveryPreference));
        }

        @Override
        public void releaseSession(@NonNull String sessionId) {
        public void setRouteVolume(String routeId, int volume) {
            if (!checkCallerisSystem()) {
                return;
            }
            if (TextUtils.isEmpty(sessionId)) {
                Log.w(TAG, "releaseSession: Ignoring empty sessionId from system service.");
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onReleaseSession,
                    MediaRoute2ProviderService.this, sessionId));
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetRouteVolume,
                    MediaRoute2ProviderService.this, routeId, volume));
        }

        @Override
        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
        public void requestCreateSession(String packageName, String routeId, long requestId,
                @Nullable Bundle requestCreateSession) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(
                    MediaRoute2ProviderService::onDiscoveryPreferenceChanged,
                    MediaRoute2ProviderService.this, discoveryPreference));
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onCreateSession,
                    MediaRoute2ProviderService.this, packageName, routeId, requestId,
                    requestCreateSession));
        }

        @Override
@@ -503,21 +499,25 @@ public abstract class MediaRoute2ProviderService extends Service {
        }

        @Override
        public void setRouteVolume(String routeId, int volume) {
        public void setSessionVolume(String sessionId, int volume) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetRouteVolume,
                    MediaRoute2ProviderService.this, routeId, volume));
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetSessionVolume,
                    MediaRoute2ProviderService.this, sessionId, volume));
        }

        @Override
        public void setSessionVolume(String sessionId, int volume) {
        public void releaseSession(@NonNull String sessionId) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetSessionVolume,
                    MediaRoute2ProviderService.this, sessionId, volume));
            if (TextUtils.isEmpty(sessionId)) {
                Log.w(TAG, "releaseSession: Ignoring empty sessionId from system service.");
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onReleaseSession,
                    MediaRoute2ProviderService.this, sessionId));
        }
    }
}
Loading