Loading media/java/android/media/IMediaRouter2Manager.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -17,12 +17,13 @@ package android.media; import android.media.MediaRoute2ProviderInfo; import android.media.MediaRoute2Info; /** * {@hide} */ oneway interface IMediaRouter2Manager { void notifyRouteSelected(int uid, String routeId); void notifyRouteSelected(int uid, in MediaRoute2Info route); void notifyControlCategoriesChanged(int uid, in List<String> categories); void notifyProviderInfosUpdated(in List<MediaRoute2ProviderInfo> providers); } media/java/android/media/IMediaRouterService.aidl +16 −2 Original line number Diff line number Diff line Loading @@ -45,11 +45,25 @@ interface IMediaRouterService { void registerClient2AsUser(IMediaRouter2Client client, String packageName, int userId); void unregisterClient2(IMediaRouter2Client client); void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route, in Intent request); /** * Changes the selected route of the client. * * @param client Client to change it's selected route. * @param route Route to be selected. */ void selectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void setControlCategories(IMediaRouter2Client client, in List<String> categories); void registerManagerAsUser(IMediaRouter2Manager manager, String packageName, int userId); void unregisterManager(IMediaRouter2Manager manager); void setRemoteRoute(IMediaRouter2Manager manager, int uid, String routeId, boolean explicit); /** * Changes the selected route of an application. * * @param manager Manager that calls the method * @param uid UID of the client that will change the selected route. * @param route Route to be selected. */ void selectClientRoute2(IMediaRouter2Manager manager, int clientUid, in @nullable MediaRoute2Info route); } media/java/android/media/MediaRoute2Info.java +74 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import java.util.Objects; /** * Describes the properties of a route. * @hide Loading @@ -43,6 +45,8 @@ public final class MediaRoute2Info implements Parcelable { @NonNull final String mId; @Nullable final String mProviderId; @NonNull final String mName; @Nullable Loading @@ -52,6 +56,7 @@ public final class MediaRoute2Info implements Parcelable { MediaRoute2Info(@NonNull Builder builder) { mId = builder.mId; mProviderId = builder.mProviderId; mName = builder.mName; mDescription = builder.mDescription; mExtras = builder.mExtras; Loading @@ -59,28 +64,63 @@ public final class MediaRoute2Info implements Parcelable { MediaRoute2Info(@NonNull Parcel in) { mId = in.readString(); mProviderId = in.readString(); mName = in.readString(); mDescription = in.readString(); mExtras = in.readBundle(); } /** * Returns true if the route info has all of the required field * Returns true if the route info has all of the required field. * A route info only obtained from {@link com.android.server.media.MediaRouterService} * is valid. * @hide */ //TODO: Reconsider the validity of a route info when fields are added. public boolean isValid() { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName())) { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName()) || TextUtils.isEmpty(getProviderId())) { return false; } return true; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof MediaRoute2Info)) { return false; } MediaRoute2Info other = (MediaRoute2Info) obj; return Objects.equals(mId, other.mId) && Objects.equals(mProviderId, other.mProviderId) && Objects.equals(mName, other.mName) && Objects.equals(mDescription, other.mDescription) //TODO: This will be evaluated as false in most cases. Try not to. && Objects.equals(mExtras, other.mExtras); } @Override public int hashCode() { return Objects.hash(mId, mName, mDescription); } @NonNull public String getId() { return mId; } /** * Gets the provider id of the route. * @hide */ @Nullable public String getProviderId() { return mProviderId; } @NonNull public String getName() { return mName; Loading @@ -104,6 +144,7 @@ public final class MediaRoute2Info implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mId); dest.writeString(mProviderId); dest.writeString(mName); dest.writeString(mDescription); dest.writeBundle(mExtras); Loading @@ -115,6 +156,8 @@ public final class MediaRoute2Info implements Parcelable { .append("MediaRouteInfo{ ") .append("id=").append(getId()) .append(", name=").append(getName()) .append(", description=").append(getDescription()) .append(", providerId=").append(getProviderId()) .append(" }"); return result.toString(); } Loading @@ -124,6 +167,7 @@ public final class MediaRoute2Info implements Parcelable { */ public static final class Builder { String mId; String mProviderId; String mName; String mDescription; Bundle mExtras; Loading @@ -145,8 +189,14 @@ public final class MediaRoute2Info implements Parcelable { } setId(routeInfo.mId); if (!TextUtils.isEmpty(routeInfo.mProviderId)) { setProviderId(routeInfo.mProviderId); } setName(routeInfo.mName); mDescription = routeInfo.mDescription; if (routeInfo.mExtras != null) { mExtras = new Bundle(routeInfo.mExtras); } } /** Loading @@ -161,6 +211,19 @@ public final class MediaRoute2Info implements Parcelable { return this; } /** * Sets the provider id of the route. * @hide */ @NonNull public Builder setProviderId(@NonNull String providerId) { if (TextUtils.isEmpty(providerId)) { throw new IllegalArgumentException("id must not be null or empty"); } mProviderId = providerId; return this; } /** * Sets the user-visible name of the route. */ Loading @@ -182,6 +245,15 @@ public final class MediaRoute2Info implements Parcelable { return this; } /** * Sets a bundle of extras for the route. */ @NonNull public Builder setExtras(@Nullable Bundle extras) { mExtras = extras; return this; } /** * Builds the {@link MediaRoute2Info media route info}. */ Loading media/java/android/media/MediaRoute2ProviderInfo.java +23 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.util.ArrayMap; import java.util.Arrays; Loading Loading @@ -82,8 +83,11 @@ public final class MediaRoute2ProviderInfo implements Parcelable { return true; } /** * @hide */ @Nullable String getUniqueId() { public String getUniqueId() { return mUniqueId; } Loading Loading @@ -149,9 +153,21 @@ public final class MediaRoute2ProviderInfo implements Parcelable { * {@link com.android.server.media.MediaRouterService} and used to identify providers. * The id set by {@link MediaRoute2ProviderService} will be ignored. * </p> * @hide */ public Builder setUniqueId(@Nullable String uniqueId) { if (TextUtils.equals(mUniqueId, uniqueId)) { return this; } mUniqueId = uniqueId; final int count = mRoutes.size(); for (int i = 0; i < count; i++) { MediaRoute2Info route = mRoutes.valueAt(i); mRoutes.setValueAt(i, new MediaRoute2Info.Builder(route) .setProviderId(mUniqueId) .build()); } return this; } Loading @@ -164,7 +180,12 @@ public final class MediaRoute2ProviderInfo implements Parcelable { if (mRoutes.containsValue(route)) { throw new IllegalArgumentException("route descriptor already added"); } if (mUniqueId != null) { mRoutes.put(route.getId(), new MediaRoute2Info.Builder(route).setProviderId(mUniqueId).build()); } else { mRoutes.put(route.getId(), route); } return this; } Loading media/java/android/media/MediaRouter2.java +17 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.media; import android.annotation.MainThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.Intent; import android.os.Looper; Loading Loading @@ -168,6 +169,22 @@ public class MediaRouter2 { return -1; } /** * Selects the specified route. * * @param route The route to select. */ //TODO: add a parameter for category (e.g. mirroring/casting) public void selectRoute(@Nullable MediaRoute2Info route) { if (mClient != null) { try { mMediaRouterService.selectRoute2(mClient, route); } catch (RemoteException ex) { Log.e(TAG, "Unable to select route.", ex); } } } /** * Sends a media control request to be performed asynchronously by the route's destination. * @param route the route that will receive the control request Loading Loading
media/java/android/media/IMediaRouter2Manager.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -17,12 +17,13 @@ package android.media; import android.media.MediaRoute2ProviderInfo; import android.media.MediaRoute2Info; /** * {@hide} */ oneway interface IMediaRouter2Manager { void notifyRouteSelected(int uid, String routeId); void notifyRouteSelected(int uid, in MediaRoute2Info route); void notifyControlCategoriesChanged(int uid, in List<String> categories); void notifyProviderInfosUpdated(in List<MediaRoute2ProviderInfo> providers); }
media/java/android/media/IMediaRouterService.aidl +16 −2 Original line number Diff line number Diff line Loading @@ -45,11 +45,25 @@ interface IMediaRouterService { void registerClient2AsUser(IMediaRouter2Client client, String packageName, int userId); void unregisterClient2(IMediaRouter2Client client); void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route, in Intent request); /** * Changes the selected route of the client. * * @param client Client to change it's selected route. * @param route Route to be selected. */ void selectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void setControlCategories(IMediaRouter2Client client, in List<String> categories); void registerManagerAsUser(IMediaRouter2Manager manager, String packageName, int userId); void unregisterManager(IMediaRouter2Manager manager); void setRemoteRoute(IMediaRouter2Manager manager, int uid, String routeId, boolean explicit); /** * Changes the selected route of an application. * * @param manager Manager that calls the method * @param uid UID of the client that will change the selected route. * @param route Route to be selected. */ void selectClientRoute2(IMediaRouter2Manager manager, int clientUid, in @nullable MediaRoute2Info route); }
media/java/android/media/MediaRoute2Info.java +74 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import java.util.Objects; /** * Describes the properties of a route. * @hide Loading @@ -43,6 +45,8 @@ public final class MediaRoute2Info implements Parcelable { @NonNull final String mId; @Nullable final String mProviderId; @NonNull final String mName; @Nullable Loading @@ -52,6 +56,7 @@ public final class MediaRoute2Info implements Parcelable { MediaRoute2Info(@NonNull Builder builder) { mId = builder.mId; mProviderId = builder.mProviderId; mName = builder.mName; mDescription = builder.mDescription; mExtras = builder.mExtras; Loading @@ -59,28 +64,63 @@ public final class MediaRoute2Info implements Parcelable { MediaRoute2Info(@NonNull Parcel in) { mId = in.readString(); mProviderId = in.readString(); mName = in.readString(); mDescription = in.readString(); mExtras = in.readBundle(); } /** * Returns true if the route info has all of the required field * Returns true if the route info has all of the required field. * A route info only obtained from {@link com.android.server.media.MediaRouterService} * is valid. * @hide */ //TODO: Reconsider the validity of a route info when fields are added. public boolean isValid() { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName())) { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName()) || TextUtils.isEmpty(getProviderId())) { return false; } return true; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof MediaRoute2Info)) { return false; } MediaRoute2Info other = (MediaRoute2Info) obj; return Objects.equals(mId, other.mId) && Objects.equals(mProviderId, other.mProviderId) && Objects.equals(mName, other.mName) && Objects.equals(mDescription, other.mDescription) //TODO: This will be evaluated as false in most cases. Try not to. && Objects.equals(mExtras, other.mExtras); } @Override public int hashCode() { return Objects.hash(mId, mName, mDescription); } @NonNull public String getId() { return mId; } /** * Gets the provider id of the route. * @hide */ @Nullable public String getProviderId() { return mProviderId; } @NonNull public String getName() { return mName; Loading @@ -104,6 +144,7 @@ public final class MediaRoute2Info implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mId); dest.writeString(mProviderId); dest.writeString(mName); dest.writeString(mDescription); dest.writeBundle(mExtras); Loading @@ -115,6 +156,8 @@ public final class MediaRoute2Info implements Parcelable { .append("MediaRouteInfo{ ") .append("id=").append(getId()) .append(", name=").append(getName()) .append(", description=").append(getDescription()) .append(", providerId=").append(getProviderId()) .append(" }"); return result.toString(); } Loading @@ -124,6 +167,7 @@ public final class MediaRoute2Info implements Parcelable { */ public static final class Builder { String mId; String mProviderId; String mName; String mDescription; Bundle mExtras; Loading @@ -145,8 +189,14 @@ public final class MediaRoute2Info implements Parcelable { } setId(routeInfo.mId); if (!TextUtils.isEmpty(routeInfo.mProviderId)) { setProviderId(routeInfo.mProviderId); } setName(routeInfo.mName); mDescription = routeInfo.mDescription; if (routeInfo.mExtras != null) { mExtras = new Bundle(routeInfo.mExtras); } } /** Loading @@ -161,6 +211,19 @@ public final class MediaRoute2Info implements Parcelable { return this; } /** * Sets the provider id of the route. * @hide */ @NonNull public Builder setProviderId(@NonNull String providerId) { if (TextUtils.isEmpty(providerId)) { throw new IllegalArgumentException("id must not be null or empty"); } mProviderId = providerId; return this; } /** * Sets the user-visible name of the route. */ Loading @@ -182,6 +245,15 @@ public final class MediaRoute2Info implements Parcelable { return this; } /** * Sets a bundle of extras for the route. */ @NonNull public Builder setExtras(@Nullable Bundle extras) { mExtras = extras; return this; } /** * Builds the {@link MediaRoute2Info media route info}. */ Loading
media/java/android/media/MediaRoute2ProviderInfo.java +23 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.util.ArrayMap; import java.util.Arrays; Loading Loading @@ -82,8 +83,11 @@ public final class MediaRoute2ProviderInfo implements Parcelable { return true; } /** * @hide */ @Nullable String getUniqueId() { public String getUniqueId() { return mUniqueId; } Loading Loading @@ -149,9 +153,21 @@ public final class MediaRoute2ProviderInfo implements Parcelable { * {@link com.android.server.media.MediaRouterService} and used to identify providers. * The id set by {@link MediaRoute2ProviderService} will be ignored. * </p> * @hide */ public Builder setUniqueId(@Nullable String uniqueId) { if (TextUtils.equals(mUniqueId, uniqueId)) { return this; } mUniqueId = uniqueId; final int count = mRoutes.size(); for (int i = 0; i < count; i++) { MediaRoute2Info route = mRoutes.valueAt(i); mRoutes.setValueAt(i, new MediaRoute2Info.Builder(route) .setProviderId(mUniqueId) .build()); } return this; } Loading @@ -164,7 +180,12 @@ public final class MediaRoute2ProviderInfo implements Parcelable { if (mRoutes.containsValue(route)) { throw new IllegalArgumentException("route descriptor already added"); } if (mUniqueId != null) { mRoutes.put(route.getId(), new MediaRoute2Info.Builder(route).setProviderId(mUniqueId).build()); } else { mRoutes.put(route.getId(), route); } return this; } Loading
media/java/android/media/MediaRouter2.java +17 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.media; import android.annotation.MainThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.Intent; import android.os.Looper; Loading Loading @@ -168,6 +169,22 @@ public class MediaRouter2 { return -1; } /** * Selects the specified route. * * @param route The route to select. */ //TODO: add a parameter for category (e.g. mirroring/casting) public void selectRoute(@Nullable MediaRoute2Info route) { if (mClient != null) { try { mMediaRouterService.selectRoute2(mClient, route); } catch (RemoteException ex) { Log.e(TAG, "Unable to select route.", ex); } } } /** * Sends a media control request to be performed asynchronously by the route's destination. * @param route the route that will receive the control request Loading