summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt1
-rw-r--r--media/java/android/media/MediaRoute2Info.java47
-rw-r--r--media/java/android/media/MediaRoute2ProviderInfo.java19
-rw-r--r--media/java/android/media/MediaRouter2.java15
-rw-r--r--media/java/android/media/MediaRouter2Manager.java19
-rw-r--r--media/java/android/media/flags/media_better_together.aconfig7
6 files changed, 70 insertions, 38 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index f9e772649e43..cfbf9e55c7dc 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -24940,6 +24940,7 @@ package android.media {
method @Nullable public android.net.Uri getIconUri();
method @NonNull public String getId();
method @NonNull public CharSequence getName();
+ method @FlaggedApi("com.android.media.flags.enable_media_route_2_info_provider_package_name") @Nullable public String getProviderPackageName();
method @FlaggedApi("com.android.media.flags.enable_route_visibility_control_api") @NonNull public java.util.List<java.util.Set<java.lang.String>> getRequiredPermissions();
method @FlaggedApi("com.android.media.flags.enable_built_in_speaker_route_suitability_statuses") public int getSuitabilityStatus();
method @FlaggedApi("com.android.media.flags.enable_mirroring_in_media_router_2") public int getSupportedRoutingTypes();
diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java
index 037b97a61b3f..248efde4902c 100644
--- a/media/java/android/media/MediaRoute2Info.java
+++ b/media/java/android/media/MediaRoute2Info.java
@@ -21,6 +21,7 @@ import static android.media.audio.Flags.FLAG_ENABLE_MULTICHANNEL_GROUP_DEVICE;
import static com.android.media.flags.Flags.FLAG_ENABLE_AUDIO_POLICIES_DEVICE_AND_BLUETOOTH_CONTROLLER;
import static com.android.media.flags.Flags.FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES;
+import static com.android.media.flags.Flags.FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME;
import static com.android.media.flags.Flags.FLAG_ENABLE_MIRRORING_IN_MEDIA_ROUTER_2;
import static com.android.media.flags.Flags.FLAG_ENABLE_NEW_MEDIA_ROUTE_2_INFO_TYPES;
import static com.android.media.flags.Flags.FLAG_ENABLE_NEW_WIRED_MEDIA_ROUTE_2_INFO_TYPES;
@@ -631,7 +632,7 @@ public final class MediaRoute2Info implements Parcelable {
@ConnectionState
private final int mConnectionState;
private final String mClientPackageName;
- private final String mPackageName;
+ private final String mProviderPackageName;
@PlaybackVolume private final int mVolumeHandling;
private final int mVolumeMax;
private final int mVolume;
@@ -655,7 +656,7 @@ public final class MediaRoute2Info implements Parcelable {
mDescription = builder.mDescription;
mConnectionState = builder.mConnectionState;
mClientPackageName = builder.mClientPackageName;
- mPackageName = builder.mPackageName;
+ mProviderPackageName = builder.mProviderPackageName;
mVolumeHandling = builder.mVolumeHandling;
mVolumeMax = builder.mVolumeMax;
mVolume = builder.mVolume;
@@ -681,7 +682,7 @@ public final class MediaRoute2Info implements Parcelable {
mDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mConnectionState = in.readInt();
mClientPackageName = in.readString();
- mPackageName = in.readString();
+ mProviderPackageName = in.readString();
mVolumeHandling = in.readInt();
mVolumeMax = in.readInt();
mVolume = in.readInt();
@@ -801,14 +802,19 @@ public final class MediaRoute2Info implements Parcelable {
}
/**
- * Gets the package name of the provider that published the route.
- * <p>
- * It is set by the system service.
- * @hide
+ * Gets the package name of the {@link MediaRoute2ProviderService provider} that published the
+ * route, or null if it has not yet been populated.
+ *
+ * <p>The package name of the route provider is populated by the system as part of {@link
+ * MediaRoute2ProviderService#notifyRoutes(java.util.Collection)}. As a result, it's expectable
+ * that a {@link MediaRoute2Info} instance that hasn't yet been published will have a null
+ * provider package name. Otherwise, routes obtained via {@link MediaRouter2} should have a
+ * populated provider package name.
*/
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
@Nullable
- public String getPackageName() {
- return mPackageName;
+ public String getProviderPackageName() {
+ return mProviderPackageName;
}
/**
@@ -943,10 +949,13 @@ public final class MediaRoute2Info implements Parcelable {
/**
* Returns whether this route is visible to the package with the given name.
+ *
* @hide
*/
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
public boolean isVisibleTo(String packageName) {
- return !mIsVisibilityRestricted || getPackageName().equals(packageName)
+ return !mIsVisibilityRestricted
+ || TextUtils.equals(getProviderPackageName(), packageName)
|| mAllowedPackages.contains(packageName);
}
@@ -1020,7 +1029,7 @@ public final class MediaRoute2Info implements Parcelable {
pw.println(indent + "mDescription=" + mDescription);
pw.println(indent + "mConnectionState=" + mConnectionState);
pw.println(indent + "mClientPackageName=" + mClientPackageName);
- pw.println(indent + "mPackageName=" + mPackageName);
+ pw.println(indent + "mProviderPackageName=" + mProviderPackageName);
dumpVolume(pw, indent);
@@ -1059,7 +1068,7 @@ public final class MediaRoute2Info implements Parcelable {
&& Objects.equals(mDescription, other.mDescription)
&& (mConnectionState == other.mConnectionState)
&& Objects.equals(mClientPackageName, other.mClientPackageName)
- && Objects.equals(mPackageName, other.mPackageName)
+ && Objects.equals(mProviderPackageName, other.mProviderPackageName)
&& (mVolumeHandling == other.mVolumeHandling)
&& (mVolumeMax == other.mVolumeMax)
&& (mVolume == other.mVolume)
@@ -1086,7 +1095,7 @@ public final class MediaRoute2Info implements Parcelable {
mDescription,
mConnectionState,
mClientPackageName,
- mPackageName,
+ mProviderPackageName,
mVolumeHandling,
mVolumeMax,
mVolume,
@@ -1162,7 +1171,7 @@ public final class MediaRoute2Info implements Parcelable {
TextUtils.writeToParcel(mDescription, dest, flags);
dest.writeInt(mConnectionState);
dest.writeString(mClientPackageName);
- dest.writeString(mPackageName);
+ dest.writeString(mProviderPackageName);
dest.writeInt(mVolumeHandling);
dest.writeInt(mVolumeMax);
dest.writeInt(mVolume);
@@ -1314,7 +1323,7 @@ public final class MediaRoute2Info implements Parcelable {
@ConnectionState
private int mConnectionState;
private String mClientPackageName;
- private String mPackageName;
+ private String mProviderPackageName;
@PlaybackVolume private int mVolumeHandling = PLAYBACK_VOLUME_FIXED;
private int mVolumeMax;
private int mVolume;
@@ -1387,7 +1396,7 @@ public final class MediaRoute2Info implements Parcelable {
mDescription = routeInfo.mDescription;
mConnectionState = routeInfo.mConnectionState;
mClientPackageName = routeInfo.mClientPackageName;
- mPackageName = routeInfo.mPackageName;
+ mProviderPackageName = routeInfo.mProviderPackageName;
mVolumeHandling = routeInfo.mVolumeHandling;
mVolumeMax = routeInfo.mVolumeMax;
mVolume = routeInfo.mVolume;
@@ -1534,11 +1543,13 @@ public final class MediaRoute2Info implements Parcelable {
/**
* Sets the package name of the route.
+ *
* @hide
*/
+ // It is set by the MediaRouterService.
@NonNull
- public Builder setPackageName(@NonNull String packageName) {
- mPackageName = packageName;
+ public Builder setProviderPackageName(@NonNull String providerPackageName) {
+ mProviderPackageName = providerPackageName;
return this;
}
diff --git a/media/java/android/media/MediaRoute2ProviderInfo.java b/media/java/android/media/MediaRoute2ProviderInfo.java
index 809ee23a2b2e..bcc8cbbc2b91 100644
--- a/media/java/android/media/MediaRoute2ProviderInfo.java
+++ b/media/java/android/media/MediaRoute2ProviderInfo.java
@@ -152,11 +152,11 @@ public final class MediaRoute2ProviderInfo implements Parcelable {
/**
* Sets the package name and unique id of the provider info.
- * <p>
- * The unique id is automatically set by
- * {@link com.android.server.media.MediaRouterService} and used to identify providers.
- * The id set by {@link MediaRoute2ProviderService} will be ignored.
- * </p>
+ *
+ * <p>The unique id is automatically set by {@link
+ * com.android.server.media.MediaRouterService} and used to identify providers. The id set
+ * by {@link MediaRoute2ProviderService} will be ignored.
+ *
* @hide
*/
@NonNull
@@ -168,10 +168,11 @@ public final class MediaRoute2ProviderInfo implements Parcelable {
final ArrayMap<String, MediaRoute2Info> newRoutes = new ArrayMap<>();
for (Map.Entry<String, MediaRoute2Info> entry : mRoutes.entrySet()) {
- MediaRoute2Info routeWithProviderId = new MediaRoute2Info.Builder(entry.getValue())
- .setPackageName(packageName)
- .setProviderId(mUniqueId)
- .build();
+ MediaRoute2Info routeWithProviderId =
+ new MediaRoute2Info.Builder(entry.getValue())
+ .setProviderPackageName(packageName)
+ .setProviderId(mUniqueId)
+ .build();
newRoutes.put(routeWithProviderId.getOriginalId(), routeWithProviderId);
}
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index 3ac5de38f886..245360c925ad 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -19,6 +19,7 @@ package android.media;
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
import static com.android.media.flags.Flags.FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES;
import static com.android.media.flags.Flags.FLAG_ENABLE_GET_TRANSFERABLE_ROUTES;
+import static com.android.media.flags.Flags.FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME;
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_SCREEN_OFF_SCANNING;
@@ -1398,6 +1399,7 @@ public final class MediaRouter2 {
requestCreateController(controller, route, managerRequestId);
}
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
private List<MediaRoute2Info> getSortedRoutes(
List<MediaRoute2Info> routes, List<String> packageOrder) {
if (packageOrder.isEmpty()) {
@@ -1412,11 +1414,13 @@ public final class MediaRouter2 {
ArrayList<MediaRoute2Info> sortedRoutes = new ArrayList<>(routes);
// take the negative for descending order
sortedRoutes.sort(
- Comparator.comparingInt(r -> -packagePriority.getOrDefault(r.getPackageName(), 0)));
+ Comparator.comparingInt(
+ r -> -packagePriority.getOrDefault(r.getProviderPackageName(), 0)));
return sortedRoutes;
}
@GuardedBy("mLock")
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
private List<MediaRoute2Info> filterRoutesWithCompositePreferenceLocked(
List<MediaRoute2Info> routes) {
@@ -1429,10 +1433,10 @@ public final class MediaRouter2 {
continue;
}
if (!mDiscoveryPreference.getAllowedPackages().isEmpty()
- && (route.getPackageName() == null
+ && (route.getProviderPackageName() == null
|| !mDiscoveryPreference
.getAllowedPackages()
- .contains(route.getPackageName()))) {
+ .contains(route.getProviderPackageName()))) {
continue;
}
if (mDiscoveryPreference.shouldRemoveDuplicates()) {
@@ -3643,6 +3647,7 @@ public final class MediaRouter2 {
}
}
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
@Override
public List<MediaRoute2Info> filterRoutesWithIndividualPreference(
List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryPreference) {
@@ -3652,10 +3657,10 @@ public final class MediaRouter2 {
continue;
}
if (!discoveryPreference.getAllowedPackages().isEmpty()
- && (route.getPackageName() == null
+ && (route.getProviderPackageName() == null
|| !discoveryPreference
.getAllowedPackages()
- .contains(route.getPackageName()))) {
+ .contains(route.getProviderPackageName()))) {
continue;
}
filteredRoutes.add(route);
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java
index 7e1dccf2d366..3854747f46e0 100644
--- a/media/java/android/media/MediaRouter2Manager.java
+++ b/media/java/android/media/MediaRouter2Manager.java
@@ -20,9 +20,11 @@ import static android.media.MediaRouter2.SCANNING_STATE_NOT_SCANNING;
import static android.media.MediaRouter2.SCANNING_STATE_WHILE_INTERACTIVE;
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+import static com.android.media.flags.Flags.FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME;
import android.Manifest;
import android.annotation.CallbackExecutor;
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -285,6 +287,7 @@ public final class MediaRouter2Manager {
(route) -> sessionInfo.isSystemSession() ^ route.isSystemRoute());
}
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
private List<MediaRoute2Info> getSortedRoutes(RouteDiscoveryPreference preference) {
if (!preference.shouldRemoveDuplicates()) {
synchronized (mRoutesLock) {
@@ -302,12 +305,15 @@ public final class MediaRouter2Manager {
routes = new ArrayList<>(mRoutes.values());
}
// take the negative for descending order
- routes.sort(Comparator.comparingInt(
- r -> -packagePriority.getOrDefault(r.getPackageName(), 0)));
+ routes.sort(
+ Comparator.comparingInt(
+ r -> -packagePriority.getOrDefault(r.getProviderPackageName(), 0)));
return routes;
}
- private List<MediaRoute2Info> getFilteredRoutes(@NonNull RoutingSessionInfo sessionInfo,
+ @FlaggedApi(FLAG_ENABLE_MEDIA_ROUTE_2_INFO_PROVIDER_PACKAGE_NAME)
+ private List<MediaRoute2Info> getFilteredRoutes(
+ @NonNull RoutingSessionInfo sessionInfo,
boolean includeSelectedRoutes,
@Nullable Predicate<MediaRoute2Info> additionalFilter) {
Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
@@ -336,9 +342,10 @@ public final class MediaRouter2Manager {
continue;
}
if (!discoveryPreference.getAllowedPackages().isEmpty()
- && (route.getPackageName() == null
- || !discoveryPreference.getAllowedPackages()
- .contains(route.getPackageName()))) {
+ && (route.getProviderPackageName() == null
+ || !discoveryPreference
+ .getAllowedPackages()
+ .contains(route.getProviderPackageName()))) {
continue;
}
if (additionalFilter != null && !additionalFilter.test(route)) {
diff --git a/media/java/android/media/flags/media_better_together.aconfig b/media/java/android/media/flags/media_better_together.aconfig
index bbe8e4ed7b34..4398b261377b 100644
--- a/media/java/android/media/flags/media_better_together.aconfig
+++ b/media/java/android/media/flags/media_better_together.aconfig
@@ -60,6 +60,13 @@ flag {
}
flag {
+ name: "enable_media_route_2_info_provider_package_name"
+ namespace: "media_better_together"
+ description: "Enables a new API to obtain the provider package name from MediaRoute2Info."
+ bug: "378788958"
+}
+
+flag {
name: "enable_mirroring_in_media_router_2"
namespace: "media_better_together"
description: "Enables support for mirroring routes in the MediaRouter2 framework, allowing Output Switcher to offer mirroring routes."