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

Commit 42bef14a authored by Hyundo Moon's avatar Hyundo Moon
Browse files

Unhide routing session related APIs

Bug: 147646634
Test: make update-api -j; atest mediaroutertest
Change-Id: Ia0278af6a2b62fa90e61bb278772c6369c62481d
parent ece12a89
Loading
Loading
Loading
Loading
+83 −1
Original line number Diff line number Diff line
@@ -26449,6 +26449,7 @@ package android.media {
  public final class MediaRoute2Info implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public String getClientPackageName();
    method public int getConnectionState();
    method @Nullable public CharSequence getDescription();
    method public int getDeviceType();
@@ -26470,6 +26471,9 @@ package android.media {
    field public static final int DEVICE_TYPE_REMOTE_SPEAKER = 2; // 0x2
    field public static final int DEVICE_TYPE_REMOTE_TV = 1; // 0x1
    field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
    field public static final String FEATURE_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
    field public static final String FEATURE_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
    field public static final String FEATURE_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
  }
@@ -26494,9 +26498,23 @@ package android.media {
  public abstract class MediaRoute2ProviderService extends android.app.Service {
    ctor public MediaRoute2ProviderService();
    method @NonNull public final java.util.List<android.media.RoutingSessionInfo> getAllSessionInfo();
    method @Nullable public final android.media.RoutingSessionInfo getSessionInfo(@NonNull String);
    method public final void notifyRoutes(@NonNull java.util.Collection<android.media.MediaRoute2Info>);
    method @NonNull public android.os.IBinder onBind(@NonNull android.content.Intent);
    method public final void notifySessionCreated(@NonNull android.media.RoutingSessionInfo, long);
    method public final void notifySessionCreationFailed(long);
    method public final void notifySessionReleased(@NonNull String);
    method public final void notifySessionUpdated(@NonNull android.media.RoutingSessionInfo);
    method @CallSuper @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
    method public abstract void onCreateSession(@NonNull String, @NonNull String, long, @Nullable android.os.Bundle);
    method public abstract void onDeselectRoute(@NonNull String, @NonNull String);
    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 onTransferToRoute(@NonNull String, @NonNull String);
    method public abstract void onUpdateVolume(@NonNull String, int);
    field public static final long REQUEST_ID_UNKNOWN = 0L; // 0x0L
    field public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";
  }
@@ -26624,12 +26642,22 @@ package android.media {
  }
  public class MediaRouter2 {
    method @NonNull public java.util.List<android.media.MediaRouter2.RoutingController> getControllers();
    method @NonNull public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context);
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getRoutes();
    method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RoutingControllerCallback);
    method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
    method public void requestCreateController(@NonNull android.media.MediaRoute2Info);
    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.RoutingControllerCallback);
    method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
  }
  public static interface MediaRouter2.OnGetControllerHintsListener {
    method @Nullable public android.os.Bundle onGetControllerHints(@NonNull android.media.MediaRoute2Info);
  }
  public static class MediaRouter2.RouteCallback {
    ctor public MediaRouter2.RouteCallback();
    method public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>);
@@ -26637,6 +26665,28 @@ package android.media {
    method public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>);
  }
  public class MediaRouter2.RoutingController {
    method public void deselectRoute(@NonNull android.media.MediaRoute2Info);
    method @Nullable public android.os.Bundle getControlHints();
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getDeselectableRoutes();
    method @NonNull public String getId();
    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 boolean isReleased();
    method public void release();
    method public void selectRoute(@NonNull android.media.MediaRoute2Info);
    method public void transferToRoute(@NonNull android.media.MediaRoute2Info);
  }
  public static class MediaRouter2.RoutingControllerCallback {
    ctor public MediaRouter2.RoutingControllerCallback();
    method public void onControllerCreated(@NonNull android.media.MediaRouter2.RoutingController);
    method public void onControllerCreationFailed(@NonNull android.media.MediaRoute2Info);
    method public void onControllerReleased(@NonNull android.media.MediaRouter2.RoutingController);
    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
  }
  public class MediaScannerConnection implements android.content.ServiceConnection {
    ctor public MediaScannerConnection(android.content.Context, android.media.MediaScannerConnection.MediaScannerConnectionClient);
    method public void connect();
@@ -27011,6 +27061,38 @@ package android.media {
    method @NonNull public android.media.RouteDiscoveryPreference.Builder setPreferredFeatures(@NonNull java.util.List<java.lang.String>);
  }
  public final class RoutingSessionInfo implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public String getClientPackageName();
    method @Nullable public android.os.Bundle getControlHints();
    method @NonNull public java.util.List<java.lang.String> getDeselectableRoutes();
    method @NonNull public String getId();
    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 void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.media.RoutingSessionInfo> CREATOR;
  }
  public static final class RoutingSessionInfo.Builder {
    ctor public RoutingSessionInfo.Builder(@NonNull String, @NonNull String);
    ctor public RoutingSessionInfo.Builder(@NonNull android.media.RoutingSessionInfo);
    method @NonNull public android.media.RoutingSessionInfo.Builder addDeselectableRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectableRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectedRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder addTransferrableRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo build();
    method @NonNull public android.media.RoutingSessionInfo.Builder clearDeselectableRoutes();
    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectableRoutes();
    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectedRoutes();
    method @NonNull public android.media.RoutingSessionInfo.Builder clearTransferrableRoutes();
    method @NonNull public android.media.RoutingSessionInfo.Builder removeDeselectableRoute(@NonNull String);
    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectableRoute(@NonNull String);
    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);
  }
  public final class Session2Command implements android.os.Parcelable {
    ctor public Session2Command(int);
    ctor public Session2Command(@NonNull String, @Nullable android.os.Bundle);
+55 −3
Original line number Diff line number Diff line
@@ -134,6 +134,59 @@ public final class MediaRoute2Info implements Parcelable {
     */
    public static final int DEVICE_TYPE_BLUETOOTH = 3;

    /**
     * Media feature: Live audio.
     * <p>
     * A route that supports live audio routing will allow the media audio stream
     * to be sent to supported destinations.  This can include internal speakers or
     * audio jacks on the device itself, A2DP devices, and more.
     * </p><p>
     * When a live audio route is selected, audio routing is transparent to the application.
     * All audio played on the media stream will be routed to the selected destination.
     * </p><p>
     * Refer to the class documentation for details about live audio routes.
     * </p>
     */
    public static final String FEATURE_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";

    /**
     * Media feature: Live video.
     * <p>
     * A route that supports live video routing will allow a mirrored version
     * of the device's primary display or a customized
     * {@link android.app.Presentation Presentation} to be sent to supported
     * destinations.
     * </p><p>
     * When a live video route is selected, audio and video routing is transparent
     * to the application.  By default, audio and video is routed to the selected
     * destination.  For certain live video routes, the application may also use a
     * {@link android.app.Presentation Presentation} to replace the mirrored view
     * on the external display with different content.
     * </p><p>
     * Refer to the class documentation for details about live video routes.
     * </p>
     *
     * @see android.app.Presentation
     */
    public static final String FEATURE_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";

    /**
     * Media feature: Remote playback.
     * <p>
     * A route that supports remote playback routing will allow an application to send
     * requests to play content remotely to supported destinations.
     * </p><p>
     * Remote playback routes destinations operate independently of the local device.
     * When a remote playback route is selected, the application can control the content
     * playing on the destination using {@link MediaRouter2.RoutingController#getControlHints()}.
     * The application may also receive status updates from the route regarding remote playback.
     * </p><p>
     * Refer to the class documentation for details about remote playback routes.
     * </p>
     */
    public static final String FEATURE_REMOTE_PLAYBACK =
            "android.media.intent.category.REMOTE_PLAYBACK";

    final String mId;
    final CharSequence mName;
    final List<String> mFeatures;
@@ -260,9 +313,8 @@ public final class MediaRoute2Info implements Parcelable {
    }

    /**
     * Gets the package name of the client that uses the route.
     * Returns null if no clients use this route.
     * @hide
     * Gets the package name of the app using the route.
     * Returns null if no apps are using this route.
     */
    @Nullable
    public String getClientPackageName() {
+10 −18
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.media;

import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;

import android.annotation.CallSuper;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Service;
@@ -64,7 +65,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     * request.
     *
     * @see #notifySessionCreated(RoutingSessionInfo, long)
     * @hide
     */
    public static final long REQUEST_ID_UNKNOWN = 0;

@@ -82,8 +82,14 @@ public abstract class MediaRoute2ProviderService extends Service {
        mHandler = new Handler(Looper.getMainLooper());
    }

    /**
     * If overriding this method, call through to the super method for any unknown actions.
     * <p>
     * {@inheritDoc}
     */
    @CallSuper
    @Override
    @NonNull
    @Nullable
    public IBinder onBind(@NonNull Intent intent) {
        //TODO: Allow binding from media router service only?
        if (SERVICE_INTERFACE.equals(intent.getAction())) {
@@ -110,7 +116,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param routeId the id of the route
     * @param volume the target volume
     * @hide
     */
    public abstract void onSetVolume(@NonNull String routeId, int volume);

@@ -119,7 +124,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param routeId id of the route
     * @param delta the delta to add to the current volume
     * @hide
     */
    public abstract void onUpdateVolume(@NonNull String routeId, int delta);

@@ -129,7 +133,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param sessionId id of the session
     * @return information of the session with the given id.
     *         null if the session is released or ID is not valid.
     * @hide
     */
    @Nullable
    public final RoutingSessionInfo getSessionInfo(@NonNull String sessionId) {
@@ -143,7 +146,6 @@ public abstract class MediaRoute2ProviderService extends Service {

    /**
     * Gets the list of {@link RoutingSessionInfo session info} that the provider service maintains.
     * @hide
     */
    @NonNull
    public final List<RoutingSessionInfo> getAllSessionInfo() {
@@ -163,7 +165,7 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param requestId id of the previous request to create this session provided in
     *                  {@link #onCreateSession(String, String, long, Bundle)}
     * @see #onCreateSession(String, String, long, Bundle)
     * @hide
     * @see #getSessionInfo(String)
     */
    public final void notifySessionCreated(@NonNull RoutingSessionInfo sessionInfo,
            long requestId) {
@@ -197,7 +199,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param requestId id of the previous request to create the session provided in
     *                  {@link #onCreateSession(String, String, long, Bundle)}.
     * @see #onCreateSession(String, String, long, Bundle)
     * @hide
     */
    public final void notifySessionCreationFailed(long requestId) {
        if (mClient == null) {
@@ -213,8 +214,6 @@ public abstract class MediaRoute2ProviderService extends Service {
    /**
     * Notifies the existing session is updated. For example, when
     * {@link RoutingSessionInfo#getSelectedRoutes() selected routes} are changed.
     *
     * @hide
     */
    public final void notifySessionUpdated(@NonNull RoutingSessionInfo sessionInfo) {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
@@ -244,7 +243,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param sessionId id of the released session.
     * @see #onReleaseSession(String)
     * @hide
     */
    public final void notifySessionReleased(@NonNull String sessionId) {
        if (TextUtils.isEmpty(sessionId)) {
@@ -296,7 +294,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @see RoutingSessionInfo.Builder#Builder(String, String)
     * @see RoutingSessionInfo.Builder#addSelectedRoute(String)
     * @see RoutingSessionInfo.Builder#setControlHints(Bundle)
     * @hide
     */
    public abstract void onCreateSession(@NonNull String packageName, @NonNull String routeId,
            long requestId, @Nullable Bundle sessionHints);
@@ -314,7 +311,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     * @param sessionId id of the session being released.
     * @see #notifySessionReleased(String)
     * @see #getSessionInfo(String)
     * @hide
     */
    public abstract void onReleaseSession(@NonNull String sessionId);

@@ -326,7 +322,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param sessionId id of the session
     * @param routeId id of the route
     * @hide
     */
    public abstract void onSelectRoute(@NonNull String sessionId, @NonNull String routeId);

@@ -338,7 +333,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param sessionId id of the session
     * @param routeId id of the route
     * @hide
     */
    public abstract void onDeselectRoute(@NonNull String sessionId, @NonNull String routeId);

@@ -350,7 +344,6 @@ public abstract class MediaRoute2ProviderService extends Service {
     *
     * @param sessionId id of the session
     * @param routeId id of the route
     * @hide
     */
    public abstract void onTransferToRoute(@NonNull String sessionId, @NonNull String routeId);

@@ -370,9 +363,8 @@ public abstract class MediaRoute2ProviderService extends Service {
     * </p>
     *
     * @param preference the new discovery preference
     *
     * TODO: This method needs tests.
     */
    // TODO: This method needs tests.
    public void onDiscoveryPreferenceChanged(@NonNull RouteDiscoveryPreference preference) {}

    /**
+177 −170

File changed.

Preview size limit exceeded, changes collapsed.

+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import java.util.Objects;

/**
 * Describes a routing session which is created when a media route is selected.
 * @hide
 */
public final class RoutingSessionInfo implements Parcelable {
    @NonNull
Loading