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

Commit 78ae53ff authored by Hyundo Moon's avatar Hyundo Moon Committed by Android (Google) Code Review
Browse files

Merge "Unhide routing session related APIs"

parents 3243dd66 42bef14a
Loading
Loading
Loading
Loading
+83 −1
Original line number Diff line number Diff line
@@ -26477,6 +26477,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();
@@ -26498,6 +26499,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
  }
@@ -26522,9 +26526,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";
  }
@@ -26652,12 +26670,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>);
@@ -26665,6 +26693,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();
@@ -27039,6 +27089,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