Merge "Throw when setting RLP with privileged routers" into main
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index f27a8de..6b67d14 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -460,6 +460,9 @@
* updates} in order to keep the system UI in a consistent state. You can also call this method
* at any other point to update the listing preference dynamically.
*
+ * <p>Any calls to this method from a privileged router will throw an {@link
+ * UnsupportedOperationException}.
+ *
* <p>Notes:
*
* <ol>
@@ -476,24 +479,7 @@
* route listing. When null, the system uses its default listing criteria.
*/
public void setRouteListingPreference(@Nullable RouteListingPreference routeListingPreference) {
- synchronized (mLock) {
- if (Objects.equals(mRouteListingPreference, routeListingPreference)) {
- // Nothing changed. We return early to save a call to the system server.
- return;
- }
- mRouteListingPreference = routeListingPreference;
- try {
- if (mStub == null) {
- MediaRouter2Stub stub = new MediaRouter2Stub();
- mMediaRouterService.registerRouter2(stub, mImpl.getPackageName());
- mStub = stub;
- }
- mMediaRouterService.setRouteListingPreference(mStub, mRouteListingPreference);
- } catch (RemoteException ex) {
- ex.rethrowFromSystemServer();
- }
- notifyRouteListingPreferenceUpdated(routeListingPreference);
- }
+ mImpl.setRouteListingPreference(routeListingPreference);
}
/**
@@ -1962,6 +1948,8 @@
void unregisterRouteCallback();
+ void setRouteListingPreference(@Nullable RouteListingPreference preference);
+
List<MediaRoute2Info> getAllRoutes();
void setOnGetControllerHintsListener(OnGetControllerHintsListener listener);
@@ -2102,6 +2090,12 @@
// Do nothing.
}
+ @Override
+ public void setRouteListingPreference(@Nullable RouteListingPreference preference) {
+ throw new UnsupportedOperationException(
+ "RouteListingPreference cannot be set by a privileged MediaRouter2 instance.");
+ }
+
/** Gets the list of all discovered routes. */
@Override
public List<MediaRoute2Info> getAllRoutes() {
@@ -2892,6 +2886,28 @@
}
}
+ @Override
+ public void setRouteListingPreference(@Nullable RouteListingPreference preference) {
+ synchronized (mLock) {
+ if (Objects.equals(mRouteListingPreference, preference)) {
+ // Nothing changed. We return early to save a call to the system server.
+ return;
+ }
+ mRouteListingPreference = preference;
+ try {
+ if (mStub == null) {
+ MediaRouter2Stub stub = new MediaRouter2Stub();
+ mMediaRouterService.registerRouter2(stub, mImpl.getPackageName());
+ mStub = stub;
+ }
+ mMediaRouterService.setRouteListingPreference(mStub, mRouteListingPreference);
+ } catch (RemoteException ex) {
+ ex.rethrowFromSystemServer();
+ }
+ notifyRouteListingPreferenceUpdated(preference);
+ }
+ }
+
/**
* Returns {@link Collections#emptyList()}. Local routes can only access routes related to
* their {@link RouteDiscoveryPreference} through {@link #getRoutes()}.