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

Commit 5f4ded9a authored by Iván Budnik's avatar Iván Budnik
Browse files

Promote setRouteVolume from SystemAPI to public API

The promotion is needed for companion apps implementing their Output
Switcher dialogs. The change is part of a wide line of work tracked in
b/192657812, which implements the necessary public APIs in MediaRouter2
for watch devices to be able to provide Output Switcher dialogs that
control media routing of the phone via their companion apps. The main
objective for the API is to provide feature parity with the phone's
Output Switcher implementation.

The child tickets of b/192657812 hold information about the other API
changes that have been made across the last few quarters towards the
same effort.

b/325323765 more context about the criticality of this API.

Bug: 325323765
Test: atest SystemMediaRouter2
API-Coverage-Bug: 325451153
Change-Id: I43b0a963d52a74e9df1779fe64baf768963ce49e
parent e746322b
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -24553,6 +24553,7 @@ package android.media {
    method @FlaggedApi("com.android.media.flags.enable_screen_off_scanning") @NonNull public android.media.MediaRouter2.ScanToken requestScan(@NonNull android.media.MediaRouter2.ScanRequest);
    method @FlaggedApi("com.android.media.flags.enable_screen_off_scanning") @NonNull public android.media.MediaRouter2.ScanToken requestScan(@NonNull android.media.MediaRouter2.ScanRequest);
    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
    method public void setRouteListingPreference(@Nullable android.media.RouteListingPreference);
    method public void setRouteListingPreference(@Nullable android.media.RouteListingPreference);
    method @FlaggedApi("com.android.media.flags.enable_privileged_routing_for_media_routing_control") @RequiresPermission(anyOf={android.Manifest.permission.MEDIA_CONTENT_CONTROL, android.Manifest.permission.MEDIA_ROUTING_CONTROL}) public void setRouteVolume(@NonNull android.media.MediaRoute2Info, int);
    method public boolean showSystemOutputSwitcher();
    method public boolean showSystemOutputSwitcher();
    method public void stop();
    method public void stop();
    method public void transferTo(@NonNull android.media.MediaRoute2Info);
    method public void transferTo(@NonNull android.media.MediaRoute2Info);
+0 −1
Original line number Original line Diff line number Diff line
@@ -7109,7 +7109,6 @@ package android.media {
  public final class MediaRouter2 {
  public final class MediaRouter2 {
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getAllRoutes();
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getAllRoutes();
    method @Nullable public String getClientPackageName();
    method @Nullable public String getClientPackageName();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void setRouteVolume(@NonNull android.media.MediaRoute2Info, int);
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void startScan();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void startScan();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void stopScan();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void stopScan();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void transfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRoute2Info);
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void transfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRoute2Info);
+18 −9
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import static com.android.media.flags.Flags.FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES;
import static com.android.media.flags.Flags.FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES;
import static com.android.media.flags.Flags.FLAG_ENABLE_CROSS_USER_ROUTING_IN_MEDIA_ROUTER2;
import static com.android.media.flags.Flags.FLAG_ENABLE_CROSS_USER_ROUTING_IN_MEDIA_ROUTER2;
import static com.android.media.flags.Flags.FLAG_ENABLE_GET_TRANSFERABLE_ROUTES;
import static com.android.media.flags.Flags.FLAG_ENABLE_GET_TRANSFERABLE_ROUTES;
import static com.android.media.flags.Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL;
import static com.android.media.flags.Flags.FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2;
import static com.android.media.flags.Flags.FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2;
import static com.android.media.flags.Flags.FLAG_ENABLE_SCREEN_OFF_SCANNING;
import static com.android.media.flags.Flags.FLAG_ENABLE_SCREEN_OFF_SCANNING;


@@ -989,17 +990,24 @@ public final class MediaRouter2 {
    }
    }


    /**
    /**
     * Requests a volume change for the route asynchronously.
     * Sets the volume for a specific route.
     * It may have no effect if the route is currently not selected.
     *
     *
     * <p>This will be no-op for non-system media routers.
     * <p>The call may have no effect if the route is currently not selected.
     *
     * <p>This method is only supported by {@link #getInstance(Context, String) proxy MediaRouter2
     * instances}. Use {@link RoutingController#setVolume(int) RoutingController#setVolume(int)}
     * instead for {@link #getInstance(Context) local MediaRouter2 instances}.</p>
     *
     *
     * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}.
     * @param volume The new volume value between 0 and {@link MediaRoute2Info#getVolumeMax}.
     * @see #getInstance(Context, String)
     * @throws UnsupportedOperationException If called on a {@link #getInstance(Context) local
     * @hide
     * router instance}.
     */
     */
    @SystemApi
    @FlaggedApi(FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
    @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
    @RequiresPermission(
            anyOf = {
                Manifest.permission.MEDIA_CONTENT_CONTROL,
                Manifest.permission.MEDIA_ROUTING_CONTROL
            })
    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
        Objects.requireNonNull(route, "route must not be null");
        Objects.requireNonNull(route, "route must not be null");


@@ -3464,10 +3472,11 @@ public final class MediaRouter2 {
            return result;
            return result;
        }
        }


        /** No-op. Local routers cannot modify the volume of specific routes. */
        /** Local routers cannot modify the volume of specific routes. */
        @Override
        @Override
        public void setRouteVolume(MediaRoute2Info route, int volume) {
        public void setRouteVolume(MediaRoute2Info route, int volume) {
            // Do nothing.
            throw new UnsupportedOperationException(
                    "setRouteVolume is only supported by proxy routers. See javadoc.");
            // If this API needs to be public, use IMediaRouterService#setRouteVolumeWithRouter2()
            // If this API needs to be public, use IMediaRouterService#setRouteVolumeWithRouter2()
        }
        }