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

Commit 8239e3f3 authored by Kyunglyul Hyun's avatar Kyunglyul Hyun Committed by Android (Google) Code Review
Browse files

Merge "MediaRouter2: Add group volume"

parents ca8106f2 5161b37e
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -26882,7 +26882,8 @@ package android.media {
    method public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference);
    method public abstract void onReleaseSession(@NonNull String);
    method public abstract void onSelectRoute(@NonNull String, @NonNull String);
    method public abstract void onSetVolume(@NonNull String, int);
    method public abstract void onSetRouteVolume(@NonNull String, int);
    method public abstract void onSetSessionVolume(@NonNull String, int);
    method public abstract void onTransferToRoute(@NonNull String, @NonNull String);
    field public static final long REQUEST_ID_UNKNOWN = 0L; // 0x0L
    field public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";
@@ -27043,9 +27044,13 @@ package android.media {
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectableRoutes();
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectedRoutes();
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getTransferrableRoutes();
    method public int getVolume();
    method public int getVolumeHandling();
    method public int getVolumeMax();
    method public boolean isReleased();
    method public void release();
    method public void selectRoute(@NonNull android.media.MediaRoute2Info);
    method public void setVolume(int);
    method public void transferToRoute(@NonNull android.media.MediaRoute2Info);
  }
@@ -27440,6 +27445,9 @@ package android.media {
    method @NonNull public java.util.List<java.lang.String> getSelectableRoutes();
    method @NonNull public java.util.List<java.lang.String> getSelectedRoutes();
    method @NonNull public java.util.List<java.lang.String> getTransferrableRoutes();
    method public int getVolume();
    method public int getVolumeHandling();
    method public int getVolumeMax();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.media.RoutingSessionInfo> CREATOR;
  }
@@ -27461,6 +27469,9 @@ package android.media {
    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectedRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder removeTransferrableRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder setControlHints(@Nullable android.os.Bundle);
    method @NonNull public android.media.RoutingSessionInfo.Builder setVolume(int);
    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeHandling(int);
    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeMax(int);
  }
  public final class Session2Command implements android.os.Parcelable {
+2 −1
Original line number Diff line number Diff line
@@ -36,5 +36,6 @@ oneway interface IMediaRoute2Provider {
    void transferToRoute(String sessionId, String routeId);

    void notifyControlRequestSent(String id, in Intent request);
    void requestSetVolume(String id, int volume);
    void setRouteVolume(String routeId, int volume);
    void setSessionVolume(String sessionId, int volume);
}
+5 −2
Original line number Diff line number Diff line
@@ -51,7 +51,8 @@ interface IMediaRouterService {
    void unregisterClient2(IMediaRouter2Client client);
    void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route,
            in Intent request);
    void requestSetVolume2(IMediaRouter2Client client, in MediaRoute2Info route, int volume);
    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);
@@ -67,8 +68,10 @@ interface IMediaRouterService {
    void requestCreateClientSession(IMediaRouter2Manager manager, String packageName,
        in @nullable MediaRoute2Info route, int requestId);

    void requestSetVolume2Manager(IMediaRouter2Manager manager,
    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,
+23 −5
Original line number Diff line number Diff line
@@ -122,16 +122,25 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @hide
     */
    //TODO: Discuss what to use for request (e.g., Intent? Request class?)
    public abstract void onControlRequest(@NonNull String routeId, @NonNull Intent request);
    public void onControlRequest(@NonNull String routeId, @NonNull Intent request) {}

    /**
     * Called when requestSetVolume is called on a route of the provider.
     * Called when a volume setting is requested on a route of the provider
     *
     * @param routeId the id of the route
     * @param volume the target volume
     * @see MediaRoute2Info#getVolumeMax()
     */
    public abstract void onSetVolume(@NonNull String routeId, int volume);
    public abstract void onSetRouteVolume(@NonNull String routeId, int volume);

    /**
     * Called when {@link MediaRouter2.RoutingController#setVolume(int)} is called on
     * a routing session of the provider
     *
     * @param sessionId the id of the routing session
     * @param volume the target volume
     */
    public abstract void onSetSessionVolume(@NonNull String sessionId, int volume);

    /**
     * Gets information of the session with the given id.
@@ -513,12 +522,21 @@ public abstract class MediaRoute2ProviderService extends Service {
        }

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

        @Override
        public void setSessionVolume(String sessionId, int volume) {
            if (!checkCallerisSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSetSessionVolume,
                    MediaRoute2ProviderService.this, sessionId, volume));
        }
    }
}
+75 −2
Original line number Diff line number Diff line
@@ -446,7 +446,7 @@ public class MediaRouter2 {
     * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}.
     * @hide
     */
    public void requestSetVolume(@NonNull MediaRoute2Info route, int volume) {
    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
        Objects.requireNonNull(route, "route must not be null");

        Client2 client;
@@ -455,7 +455,7 @@ public class MediaRouter2 {
        }
        if (client != null) {
            try {
                mMediaRouterService.requestSetVolume2(client, route, volume);
                mMediaRouterService.setRouteVolume2(client, route, volume);
            } catch (RemoteException ex) {
                Log.e(TAG, "Unable to send control request.", ex);
            }
@@ -884,6 +884,43 @@ public class MediaRouter2 {
            }
        }

        /**
         * Gets information about how volume is handled on the session.
         *
         * @return {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or
         * {@link MediaRoute2Info#PLAYBACK_VOLUME_VARIABLE}
         */
        @MediaRoute2Info.PlaybackVolume
        public int getVolumeHandling() {
            synchronized (mControllerLock) {
                return mSessionInfo.getVolumeHandling();
            }
        }

        /**
         * Gets the maximum volume of the session.
         */
        public int getVolumeMax() {
            synchronized (mControllerLock) {
                return mSessionInfo.getVolumeMax();
            }
        }

        /**
         * Gets the current volume of the session.
         * <p>
         * When it's available, it represents the volume of routing session, which is a group
         * of selected routes. To get the volume of a route,
         * use {@link MediaRoute2Info#getVolume()}.
         * </p>
         * @see MediaRoute2Info#getVolume()
         */
        public int getVolume() {
            synchronized (mControllerLock) {
                return mSessionInfo.getVolume();
            }
        }

        /**
         * Returns true if this controller is released, false otherwise.
         * If it is released, then all other getters from this instance may return invalid values.
@@ -1039,6 +1076,42 @@ public class MediaRouter2 {
            }
        }

        /**
         * Requests a volume change for the remote session asynchronously.
         *
         * @param volume The new volume value between 0 and {@link RoutingController#getVolumeMax}
         *               (inclusive).
         * @see #getVolume()
         */
        public void setVolume(int volume) {
            if (getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED) {
                Log.w(TAG, "setVolume: the routing session has fixed volume. Ignoring.");
                return;
            }
            if (volume < 0 || volume > getVolumeMax()) {
                Log.w(TAG, "setVolume: the target volume is out of range. Ignoring");
                return;
            }

            synchronized (mControllerLock) {
                if (mIsReleased) {
                    Log.w(TAG, "setVolume is called on released controller. Ignoring.");
                    return;
                }
            }
            Client2 client;
            synchronized (sRouterLock) {
                client = mClient;
            }
            if (client != null) {
                try {
                    mMediaRouterService.setSessionVolume2(client, getId(), volume);
                } catch (RemoteException ex) {
                    Log.e(TAG, "setVolume: Failed to deliver request.", ex);
                }
            }
        }

        /**
         * Release this controller and corresponding session.
         * Any operations on this controller after calling this method will be ignored.
Loading