From dc79a7a8daa039001515b7288528c87a3de28e48 Mon Sep 17 00:00:00 2001 From: Hyundo Moon Date: Thu, 16 Jan 2020 15:18:33 +0900 Subject: [PATCH] Remove route features from RoutingSessionInfo related APIs Bug: 147786965 Test: atest mediaroutertest Change-Id: I2dcb1a1a40b4d40e3557fd70bcc7111f748886b2 --- .../android/media/IMediaRoute2Provider.aidl | 3 +- .../android/media/IMediaRouterService.aidl | 6 +- .../media/MediaRoute2ProviderService.java | 19 ++--- media/java/android/media/MediaRouter2.java | 51 +++--------- .../android/media/RoutingSessionInfo.java | 31 +------ .../SampleMediaRoute2ProviderService.java | 6 +- .../mediaroutertest/MediaRouter2Test.java | 52 ++++-------- .../RoutingSessionInfoTest.java | 82 ++++++------------- .../server/media/MediaRoute2Provider.java | 3 +- .../media/MediaRoute2ProviderProxy.java | 12 +-- .../server/media/MediaRouter2ServiceImpl.java | 41 +++------- .../server/media/MediaRouterService.java | 4 +- .../media/SystemMediaRoute2Provider.java | 3 +- 13 files changed, 85 insertions(+), 228 deletions(-) diff --git a/media/java/android/media/IMediaRoute2Provider.aidl b/media/java/android/media/IMediaRoute2Provider.aidl index 5dd0b1c915bdf..aa38e51480691 100644 --- a/media/java/android/media/IMediaRoute2Provider.aidl +++ b/media/java/android/media/IMediaRoute2Provider.aidl @@ -24,8 +24,7 @@ import android.media.IMediaRoute2ProviderClient; */ oneway interface IMediaRoute2Provider { void setClient(IMediaRoute2ProviderClient client); - void requestCreateSession(String packageName, String routeId, - String routeFeature, long requestId); + void requestCreateSession(String packageName, String routeId, long requestId); void releaseSession(String sessionId); void selectRoute(String sessionId, String routeId); diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl index 3cdaa0794b31d..2d3e185e967c8 100644 --- a/media/java/android/media/IMediaRouterService.aidl +++ b/media/java/android/media/IMediaRouterService.aidl @@ -47,12 +47,12 @@ interface IMediaRouterService { List getSystemRoutes(); void registerClient2(IMediaRouter2Client client, String packageName); void unregisterClient2(IMediaRouter2Client client); - void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route, in Intent request); + void sendControlRequest(IMediaRouter2Client client, in MediaRoute2Info route, + in Intent request); void requestSetVolume2(IMediaRouter2Client client, in MediaRoute2Info route, int volume); void requestUpdateVolume2(IMediaRouter2Client client, in MediaRoute2Info route, int direction); - void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route, - String routeFeature, int requestId); + void requestCreateSession(IMediaRouter2Client client, in MediaRoute2Info route, int requestId); void setDiscoveryRequest2(IMediaRouter2Client client, in RouteDiscoveryPreference preference); void selectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route); void deselectRoute(IMediaRouter2Client client, String sessionId, in MediaRoute2Info route); diff --git a/media/java/android/media/MediaRoute2ProviderService.java b/media/java/android/media/MediaRoute2ProviderService.java index 6d9aea512f014..5a3de6d60277b 100644 --- a/media/java/android/media/MediaRoute2ProviderService.java +++ b/media/java/android/media/MediaRoute2ProviderService.java @@ -161,8 +161,8 @@ public abstract class MediaRoute2ProviderService extends Service { * @param sessionInfo information of the new session. * The {@link RoutingSessionInfo#getId() id} of the session must be unique. * @param requestId id of the previous request to create this session provided in - * {@link #onCreateSession(String, String, String, long)} - * @see #onCreateSession(String, String, String, long) + * {@link #onCreateSession(String, String, long)} + * @see #onCreateSession(String, String, long) * @hide */ public final void notifySessionCreated(@NonNull RoutingSessionInfo sessionInfo, @@ -196,8 +196,8 @@ public abstract class MediaRoute2ProviderService extends Service { * Notifies clients of that the session could not be created. * * @param requestId id of the previous request to create the session provided in - * {@link #onCreateSession(String, String, String, long)}. - * @see #onCreateSession(String, String, String, long) + * {@link #onCreateSession(String, String, long)}. + * @see #onCreateSession(String, String, long) * @hide */ public final void notifySessionCreationFailed(long requestId) { @@ -289,16 +289,15 @@ public abstract class MediaRoute2ProviderService extends Service { * * @param packageName the package name of the application that selected the route * @param routeId the id of the route initially being connected - * @param routeFeature the route feature of the new session * @param requestId the id of this session creation request * - * @see RoutingSessionInfo.Builder#Builder(String, String, String) + * @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, - @NonNull String routeFeature, long requestId); + long requestId); /** * Called when the session should be released. A client of the session or system can request @@ -433,14 +432,12 @@ public abstract class MediaRoute2ProviderService extends Service { } @Override - public void requestCreateSession(String packageName, String routeId, - String routeFeature, long requestId) { + public void requestCreateSession(String packageName, String routeId, long requestId) { if (!checkCallerisSystem()) { return; } mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onCreateSession, - MediaRoute2ProviderService.this, packageName, routeId, routeFeature, - requestId)); + MediaRoute2ProviderService.this, packageName, routeId, requestId)); } @Override diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index bc4da10ac3b1c..971b08d17cdbe 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -284,26 +284,20 @@ public class MediaRouter2 { * Requests the media route provider service to create a session with the given route. * * @param route the route you want to create a session with. - * @param routeFeature the route feature of the session. Should not be empty. * * @see SessionCallback#onSessionCreated * @see SessionCallback#onSessionCreationFailed * @hide */ @NonNull - public void requestCreateSession(@NonNull MediaRoute2Info route, - @NonNull String routeFeature) { + public void requestCreateSession(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); - if (TextUtils.isEmpty(routeFeature)) { - throw new IllegalArgumentException("routeFeature must not be empty"); - } // TODO: Check the given route exists - // TODO: Check the route supports the given routeFeature final int requestId; requestId = mSessionCreationRequestCnt.getAndIncrement(); - SessionCreationRequest request = new SessionCreationRequest(requestId, route, routeFeature); + SessionCreationRequest request = new SessionCreationRequest(requestId, route); mSessionCreationRequests.add(request); Client2 client; @@ -312,7 +306,7 @@ public class MediaRouter2 { } if (client != null) { try { - mMediaRouterService.requestCreateSession(client, route, routeFeature, requestId); + mMediaRouterService.requestCreateSession(client, route, requestId); } catch (RemoteException ex) { Log.e(TAG, "Unable to request to create session.", ex); mHandler.sendMessage(obtainMessage(MediaRouter2::createControllerOnHandler, @@ -468,27 +462,18 @@ public class MediaRouter2 { mSessionCreationRequests.remove(matchingRequest); MediaRoute2Info requestedRoute = matchingRequest.mRoute; - String requestedRouteFeature = matchingRequest.mRouteFeature; if (sessionInfo == null) { // TODO: We may need to distinguish between failure and rejection. // One way can be introducing 'reason'. - notifySessionCreationFailed(requestedRoute, requestedRouteFeature); - return; - } else if (!TextUtils.equals(requestedRouteFeature, - sessionInfo.getRouteFeature())) { - Log.w(TAG, "The session has different route feature from what we requested. " - + "(requested=" + requestedRouteFeature - + ", actual=" + sessionInfo.getRouteFeature() - + ")"); - notifySessionCreationFailed(requestedRoute, requestedRouteFeature); + notifySessionCreationFailed(requestedRoute); return; } else if (!sessionInfo.getSelectedRoutes().contains(requestedRoute.getId())) { Log.w(TAG, "The session does not contain the requested route. " + "(requestedRouteId=" + requestedRoute.getId() + ", actualRoutes=" + sessionInfo.getSelectedRoutes() + ")"); - notifySessionCreationFailed(requestedRoute, requestedRouteFeature); + notifySessionCreationFailed(requestedRoute); return; } else if (!TextUtils.equals(requestedRoute.getProviderId(), sessionInfo.getProviderId())) { @@ -496,7 +481,7 @@ public class MediaRouter2 { + "(requested route's providerId=" + requestedRoute.getProviderId() + ", actual providerId=" + sessionInfo.getProviderId() + ")"); - notifySessionCreationFailed(requestedRoute, requestedRouteFeature); + notifySessionCreationFailed(requestedRoute); return; } } @@ -617,10 +602,10 @@ public class MediaRouter2 { } } - private void notifySessionCreationFailed(MediaRoute2Info route, String routeFeature) { + private void notifySessionCreationFailed(MediaRoute2Info route) { for (SessionCallbackRecord record: mSessionCallbackRecords) { record.mExecutor.execute( - () -> record.mSessionCallback.onSessionCreationFailed(route, routeFeature)); + () -> record.mSessionCallback.onSessionCreationFailed(route)); } } @@ -688,10 +673,8 @@ public class MediaRouter2 { * Called when the session creation request failed. * * @param requestedRoute the route info which was used for the request - * @param requestedRouteFeature the route feature which was used for the request */ - public void onSessionCreationFailed(@NonNull MediaRoute2Info requestedRoute, - @NonNull String requestedRouteFeature) {} + public void onSessionCreationFailed(@NonNull MediaRoute2Info requestedRoute) {} /** * Called when the session info has changed. @@ -752,16 +735,6 @@ public class MediaRouter2 { } } - /** - * @return the feature which is used by the session mainly. - */ - @NonNull - public String getRouteFeature() { - synchronized (mControllerLock) { - return mSessionInfo.getRouteFeature(); - } - } - /** * @return the control hints used to control routing session if available. */ @@ -1012,7 +985,6 @@ public class MediaRouter2 { StringBuilder result = new StringBuilder() .append("RoutingController{ ") .append("sessionId=").append(getSessionId()) - .append(", routeFeature=").append(getRouteFeature()) .append(", selectedRoutes={") .append(selectedRoutes) .append("}") @@ -1122,13 +1094,10 @@ public class MediaRouter2 { final class SessionCreationRequest { public final MediaRoute2Info mRoute; - public final String mRouteFeature; public final int mRequestId; - SessionCreationRequest(int requestId, @NonNull MediaRoute2Info route, - @NonNull String routeFeature) { + SessionCreationRequest(int requestId, @NonNull MediaRoute2Info route) { mRoute = route; - mRouteFeature = routeFeature; mRequestId = requestId; } } diff --git a/media/java/android/media/RoutingSessionInfo.java b/media/java/android/media/RoutingSessionInfo.java index 96acf6cec5b45..228addebe0296 100644 --- a/media/java/android/media/RoutingSessionInfo.java +++ b/media/java/android/media/RoutingSessionInfo.java @@ -51,7 +51,6 @@ public final class RoutingSessionInfo implements Parcelable { final String mId; final String mClientPackageName; - final String mRouteFeature; @Nullable final String mProviderId; final List mSelectedRoutes; @@ -66,7 +65,6 @@ public final class RoutingSessionInfo implements Parcelable { mId = builder.mId; mClientPackageName = builder.mClientPackageName; - mRouteFeature = builder.mRouteFeature; mProviderId = builder.mProviderId; // TODO: Needs to check that the routes already have unique IDs. @@ -87,7 +85,6 @@ public final class RoutingSessionInfo implements Parcelable { mId = ensureString(src.readString()); mClientPackageName = ensureString(src.readString()); - mRouteFeature = ensureString(src.readString()); mProviderId = src.readString(); mSelectedRoutes = ensureList(src.createStringArrayList()); @@ -119,7 +116,7 @@ public final class RoutingSessionInfo implements Parcelable { * In order to ensure uniqueness in {@link MediaRouter2} side, the value of this method * can be different from what was set in {@link MediaRoute2ProviderService}. * - * @see Builder#Builder(String, String, String) + * @see Builder#Builder(String, String) */ @NonNull public String getId() { @@ -131,7 +128,7 @@ public final class RoutingSessionInfo implements Parcelable { } /** - * Gets the original id set by {@link Builder#Builder(String, String, String)}. + * Gets the original id set by {@link Builder#Builder(String, String)}. * @hide */ @NonNull @@ -147,15 +144,6 @@ public final class RoutingSessionInfo implements Parcelable { return mClientPackageName; } - /** - * Gets the route feature of the session. - * Routes that don't have the feature can't be selected into the session. - */ - @NonNull - public String getRouteFeature() { - return mRouteFeature; - } - /** * Gets the provider id of the session. * @hide @@ -214,7 +202,6 @@ public final class RoutingSessionInfo implements Parcelable { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(mId); dest.writeString(mClientPackageName); - dest.writeString(mRouteFeature); dest.writeString(mProviderId); dest.writeStringList(mSelectedRoutes); dest.writeStringList(mSelectableRoutes); @@ -235,7 +222,6 @@ public final class RoutingSessionInfo implements Parcelable { RoutingSessionInfo other = (RoutingSessionInfo) obj; return Objects.equals(mId, other.mId) && Objects.equals(mClientPackageName, other.mClientPackageName) - && Objects.equals(mRouteFeature, other.mRouteFeature) && Objects.equals(mProviderId, other.mProviderId) && Objects.equals(mSelectedRoutes, other.mSelectedRoutes) && Objects.equals(mSelectableRoutes, other.mSelectableRoutes) @@ -245,7 +231,7 @@ public final class RoutingSessionInfo implements Parcelable { @Override public int hashCode() { - return Objects.hash(mId, mClientPackageName, mRouteFeature, mProviderId, + return Objects.hash(mId, mClientPackageName, mProviderId, mSelectedRoutes, mSelectableRoutes, mDeselectableRoutes, mTransferrableRoutes); } @@ -254,7 +240,6 @@ public final class RoutingSessionInfo implements Parcelable { StringBuilder result = new StringBuilder() .append("RoutingSessionInfo{ ") .append("sessionId=").append(mId) - .append(", routeFeature=").append(mRouteFeature) .append(", selectedRoutes={") .append(String.join(",", mSelectedRoutes)) .append("}") @@ -295,7 +280,6 @@ public final class RoutingSessionInfo implements Parcelable { public static final class Builder { final String mId; final String mClientPackageName; - final String mRouteFeature; String mProviderId; final List mSelectedRoutes; final List mSelectableRoutes; @@ -314,22 +298,16 @@ public final class RoutingSessionInfo implements Parcelable { * @param id ID of the session. Must not be empty. * @param clientPackageName package name of the client app which uses this session. * If is is unknown, then just use an empty string. - * @param routeFeature the route feature of session. Must not be empty. * @see MediaRoute2Info#getId() */ - public Builder(@NonNull String id, @NonNull String clientPackageName, - @NonNull String routeFeature) { + public Builder(@NonNull String id, @NonNull String clientPackageName) { if (TextUtils.isEmpty(id)) { throw new IllegalArgumentException("id must not be empty"); } Objects.requireNonNull(clientPackageName, "clientPackageName must not be null"); - if (TextUtils.isEmpty(routeFeature)) { - throw new IllegalArgumentException("routeFeature must not be empty"); - } mId = id; mClientPackageName = clientPackageName; - mRouteFeature = routeFeature; mSelectedRoutes = new ArrayList<>(); mSelectableRoutes = new ArrayList<>(); mDeselectableRoutes = new ArrayList<>(); @@ -347,7 +325,6 @@ public final class RoutingSessionInfo implements Parcelable { mId = sessionInfo.mId; mClientPackageName = sessionInfo.mClientPackageName; - mRouteFeature = sessionInfo.mRouteFeature; mProviderId = sessionInfo.mProviderId; mSelectedRoutes = new ArrayList<>(sessionInfo.mSelectedRoutes); diff --git a/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java b/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java index ed93112d5288c..cc2d1b1939702 100644 --- a/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java +++ b/media/tests/MediaRouteProvider/src/com/android/mediarouteprovider/example/SampleMediaRoute2ProviderService.java @@ -167,8 +167,7 @@ public class SampleMediaRoute2ProviderService extends MediaRoute2ProviderService } @Override - public void onCreateSession(String packageName, String routeId, String routeFeature, - long requestId) { + public void onCreateSession(String packageName, String routeId, long requestId) { MediaRoute2Info route = mRoutes.get(routeId); if (route == null || TextUtils.equals(ROUTE_ID3_SESSION_CREATION_FAILED, routeId)) { // Tell the router that session cannot be created by passing null as sessionInfo. @@ -185,8 +184,7 @@ public class SampleMediaRoute2ProviderService extends MediaRoute2ProviderService .build()); mRouteIdToSessionId.put(routeId, sessionId); - RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - sessionId, packageName, routeFeature) + RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder(sessionId, packageName) .addSelectedRoute(routeId) .addSelectableRoute(ROUTE_ID4_TO_SELECT_AND_DESELECT) .addTransferrableRoute(ROUTE_ID5_TO_TRANSFER_TO) diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2Test.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2Test.java index 59e1122707a50..e782aae7c2d04 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2Test.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2Test.java @@ -172,21 +172,8 @@ public class MediaRouter2Test { } @Test - public void testRequestCreateSessionWithInvalidArguments() { - String routeFeature = "routeFeature"; - MediaRoute2Info route = new MediaRoute2Info.Builder("id", "name") - .addFeature(routeFeature) - .build(); - - // Tests null route - assertThrows(NullPointerException.class, - () -> mRouter2.requestCreateSession(null, routeFeature)); - - // Tests null or empty route feature - assertThrows(IllegalArgumentException.class, - () -> mRouter2.requestCreateSession(route, null)); - assertThrows(IllegalArgumentException.class, - () -> mRouter2.requestCreateSession(route, "")); + public void testRequestCreateSessionWithNullRoute() { + assertThrows(NullPointerException.class, () -> mRouter2.requestCreateSession(null)); } @Test @@ -208,14 +195,12 @@ public class MediaRouter2Test { public void onSessionCreated(RoutingController controller) { assertNotNull(controller); assertTrue(createRouteMap(controller.getSelectedRoutes()).containsKey(ROUTE_ID1)); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller.getRouteFeature())); controllers.add(controller); successLatch.countDown(); } @Override - public void onSessionCreationFailed(MediaRoute2Info requestedRoute, - String requestedRouteFeature) { + public void onSessionCreationFailed(MediaRoute2Info requestedRoute) { failureLatch.countDown(); } }; @@ -226,7 +211,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(route, FEATURE_SAMPLE); + mRouter2.requestCreateSession(route); assertTrue(successLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); // onSessionCreationFailed should not be called. @@ -260,10 +245,8 @@ public class MediaRouter2Test { } @Override - public void onSessionCreationFailed(MediaRoute2Info requestedRoute, - String requestedRouteFeature) { + public void onSessionCreationFailed(MediaRoute2Info requestedRoute) { assertEquals(route, requestedRoute); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, requestedRouteFeature)); failureLatch.countDown(); } }; @@ -274,7 +257,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(route, FEATURE_SAMPLE); + mRouter2.requestCreateSession(route); assertTrue(failureLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); // onSessionCreated should not be called. @@ -304,8 +287,7 @@ public class MediaRouter2Test { } @Override - public void onSessionCreationFailed(MediaRoute2Info requestedRoute, - String requestedRouteFeature) { + public void onSessionCreationFailed(MediaRoute2Info requestedRoute) { failureLatch.countDown(); } }; @@ -322,8 +304,8 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(route1, FEATURE_SAMPLE); - mRouter2.requestCreateSession(route2, FEATURE_SAMPLE); + mRouter2.requestCreateSession(route1); + mRouter2.requestCreateSession(route2); assertTrue(successLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); // onSessionCreationFailed should not be called. @@ -337,8 +319,6 @@ public class MediaRouter2Test { assertNotEquals(controller1.getSessionId(), controller2.getSessionId()); assertTrue(createRouteMap(controller1.getSelectedRoutes()).containsKey(ROUTE_ID1)); assertTrue(createRouteMap(controller2.getSelectedRoutes()).containsKey(ROUTE_ID2)); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller1.getRouteFeature())); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller2.getRouteFeature())); } finally { releaseControllers(createdControllers); @@ -369,8 +349,7 @@ public class MediaRouter2Test { } @Override - public void onSessionCreationFailed(MediaRoute2Info requestedRoute, - String requestedRouteFeature) { + public void onSessionCreationFailed(MediaRoute2Info requestedRoute) { failureLatch.countDown(); } }; @@ -381,7 +360,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(route, FEATURE_SAMPLE); + mRouter2.requestCreateSession(route); // Unregisters session callback mRouter2.unregisterSessionCallback(sessionCallback); @@ -417,7 +396,6 @@ public class MediaRouter2Test { public void onSessionCreated(RoutingController controller) { assertNotNull(controller); assertTrue(getRouteIds(controller.getSelectedRoutes()).contains(ROUTE_ID1)); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller.getRouteFeature())); controllers.add(controller); onSessionCreatedLatch.countDown(); } @@ -470,7 +448,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(routeToCreateSessionWith, FEATURE_SAMPLE); + mRouter2.requestCreateSession(routeToCreateSessionWith); assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertEquals(1, controllers.size()); @@ -515,7 +493,6 @@ public class MediaRouter2Test { public void onSessionCreated(RoutingController controller) { assertNotNull(controller); assertTrue(getRouteIds(controller.getSelectedRoutes()).contains(ROUTE_ID1)); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller.getRouteFeature())); controllers.add(controller); onSessionCreatedLatch.countDown(); } @@ -552,7 +529,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(routeToCreateSessionWith, FEATURE_SAMPLE); + mRouter2.requestCreateSession(routeToCreateSessionWith); assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertEquals(1, controllers.size()); @@ -594,7 +571,6 @@ public class MediaRouter2Test { public void onSessionCreated(RoutingController controller) { assertNotNull(controller); assertTrue(getRouteIds(controller.getSelectedRoutes()).contains(ROUTE_ID1)); - assertTrue(TextUtils.equals(FEATURE_SAMPLE, controller.getRouteFeature())); controllers.add(controller); onSessionCreatedLatch.countDown(); } @@ -617,7 +593,7 @@ public class MediaRouter2Test { try { mRouter2.registerSessionCallback(mExecutor, sessionCallback); - mRouter2.requestCreateSession(routeToCreateSessionWith, FEATURE_SAMPLE); + mRouter2.requestCreateSession(routeToCreateSessionWith); assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertEquals(1, controllers.size()); diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/RoutingSessionInfoTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/RoutingSessionInfoTest.java index 3f5973615e32c..704dca0427edf 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/RoutingSessionInfoTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/RoutingSessionInfoTest.java @@ -57,65 +57,32 @@ public class RoutingSessionInfoTest { public void testBuilderConstructorWithInvalidValues() { final String nullId = null; final String nullClientPackageName = null; - final String nullRouteFeature = null; final String emptyId = ""; // Note: An empty string as client package name is valid. - final String emptyRouteFeature = ""; final String validId = TEST_ID; final String validClientPackageName = TEST_CLIENT_PACKAGE_NAME; - final String validRouteFeature = TEST_ROUTE_FEATURE; // ID is invalid assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, validClientPackageName, validRouteFeature)); + nullId, validClientPackageName)); assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, validClientPackageName, validRouteFeature)); + emptyId, validClientPackageName)); // client package name is invalid (null) assertThrows(NullPointerException.class, () -> new RoutingSessionInfo.Builder( - validId, nullClientPackageName, validRouteFeature)); + validId, nullClientPackageName)); - // route feature is invalid + // Both are invalid assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - validId, validClientPackageName, nullRouteFeature)); + nullId, nullClientPackageName)); assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - validId, validClientPackageName, emptyRouteFeature)); - - // Two arguments are invalid - (1) ID and clientPackageName - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, nullClientPackageName, validRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, nullClientPackageName, validRouteFeature)); - - // Two arguments are invalid - (2) ID and routeFeature - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, validClientPackageName, nullRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, validClientPackageName, emptyRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, validClientPackageName, nullRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, validClientPackageName, emptyRouteFeature)); - - // Two arguments are invalid - (3) clientPackageName and routeFeature - // Note that this throws NullPointerException. - assertThrows(NullPointerException.class, () -> new RoutingSessionInfo.Builder( - validId, nullClientPackageName, nullRouteFeature)); - assertThrows(NullPointerException.class, () -> new RoutingSessionInfo.Builder( - validId, nullClientPackageName, emptyRouteFeature)); - - // All arguments are invalid - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, nullClientPackageName, nullRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - nullId, nullClientPackageName, emptyRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, nullClientPackageName, nullRouteFeature)); - assertThrows(IllegalArgumentException.class, () -> new RoutingSessionInfo.Builder( - emptyId, nullClientPackageName, emptyRouteFeature)); + emptyId, nullClientPackageName)); + } + @Test + public void testBuilderCopyConstructorWithNull() { // Null RouteInfo (1-argument constructor) final RoutingSessionInfo nullRoutingSessionInfo = null; assertThrows(NullPointerException.class, @@ -127,13 +94,13 @@ public class RoutingSessionInfoTest { // An empty string for client package name is valid. (for unknown cases) // Creating builder with it should not throw any exception. RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder( - TEST_ID, "" /* clientPackageName*/, TEST_ROUTE_FEATURE); + TEST_ID, "" /* clientPackageName*/); } @Test public void testBuilderBuildWithEmptySelectedRoutesThrowsIAE() { RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE); + TEST_ID, TEST_CLIENT_PACKAGE_NAME); // Note: Calling build() without adding any selected routes. assertThrows(IllegalArgumentException.class, () -> builder.build()); } @@ -141,7 +108,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderAddRouteMethodsWithIllegalArgumentsThrowsIAE() { RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE); + TEST_ID, TEST_CLIENT_PACKAGE_NAME); final String nullRouteId = null; final String emptyRouteId = ""; @@ -168,7 +135,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderRemoveRouteMethodsWithIllegalArgumentsThrowsIAE() { RoutingSessionInfo.Builder builder = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE); + TEST_ID, TEST_CLIENT_PACKAGE_NAME); final String nullRouteId = null; final String emptyRouteId = ""; @@ -198,7 +165,7 @@ public class RoutingSessionInfoTest { controlHints.putString(TEST_KEY, TEST_VALUE); RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -212,7 +179,6 @@ public class RoutingSessionInfoTest { assertEquals(TEST_ID, sessionInfo.getId()); assertEquals(TEST_CLIENT_PACKAGE_NAME, sessionInfo.getClientPackageName()); - assertEquals(TEST_ROUTE_FEATURE, sessionInfo.getRouteFeature()); assertEquals(2, sessionInfo.getSelectedRoutes().size()); assertEquals(TEST_ROUTE_ID_0, sessionInfo.getSelectedRoutes().get(0)); @@ -239,7 +205,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderAddRouteMethodsWithBuilderCopyConstructor() { RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectableRoute(TEST_ROUTE_ID_2) .addDeselectableRoute(TEST_ROUTE_ID_4) @@ -273,7 +239,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderRemoveRouteMethods() { RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .removeSelectedRoute(TEST_ROUTE_ID_1) @@ -308,7 +274,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderRemoveRouteMethodsWithBuilderCopyConstructor() { RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -342,7 +308,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderClearRouteMethods() { RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .clearSelectedRoutes() @@ -374,7 +340,7 @@ public class RoutingSessionInfoTest { @Test public void testBuilderClearRouteMethodsWithBuilderCopyConstructor() { RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -408,7 +374,7 @@ public class RoutingSessionInfoTest { controlHints.putString(TEST_KEY, TEST_VALUE); RoutingSessionInfo sessionInfo1 = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -421,7 +387,7 @@ public class RoutingSessionInfoTest { .build(); RoutingSessionInfo sessionInfo2 = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -443,7 +409,7 @@ public class RoutingSessionInfoTest { controlHints.putString(TEST_KEY, TEST_VALUE); RoutingSessionInfo sessionInfo1 = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -467,7 +433,7 @@ public class RoutingSessionInfoTest { controlHints.putString(TEST_KEY, TEST_VALUE); RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) @@ -530,7 +496,7 @@ public class RoutingSessionInfoTest { controlHints.putString(TEST_KEY, TEST_VALUE); RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder( - TEST_ID, TEST_CLIENT_PACKAGE_NAME, TEST_ROUTE_FEATURE) + TEST_ID, TEST_CLIENT_PACKAGE_NAME) .addSelectedRoute(TEST_ROUTE_ID_0) .addSelectedRoute(TEST_ROUTE_ID_1) .addSelectableRoute(TEST_ROUTE_ID_2) diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java index 408c1c9b7d184..b186771031fc4 100644 --- a/services/core/java/com/android/server/media/MediaRoute2Provider.java +++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java @@ -49,8 +49,7 @@ abstract class MediaRoute2Provider { mCallback = callback; } - public abstract void requestCreateSession(String packageName, String routeId, - String routeType, long requestId); + public abstract void requestCreateSession(String packageName, String routeId, long requestId); public abstract void releaseSession(String sessionId); public abstract void selectRoute(String sessionId, String routeId); diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java index 3840d02060164..4b992be467928 100644 --- a/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java +++ b/services/core/java/com/android/server/media/MediaRoute2ProviderProxy.java @@ -73,11 +73,9 @@ final class MediaRoute2ProviderProxy extends MediaRoute2Provider implements Serv } @Override - public void requestCreateSession(String packageName, String routeId, String routeType, - long requestId) { + public void requestCreateSession(String packageName, String routeId, long requestId) { if (mConnectionReady) { - mActiveConnection.requestCreateSession(packageName, routeId, routeType, - requestId); + mActiveConnection.requestCreateSession(packageName, routeId, requestId); updateBinding(); } } @@ -429,11 +427,9 @@ final class MediaRoute2ProviderProxy extends MediaRoute2Provider implements Serv mClient.dispose(); } - public void requestCreateSession(String packageName, String routeId, String routeType, - long requestId) { + public void requestCreateSession(String packageName, String routeId, long requestId) { try { - mProvider.requestCreateSession(packageName, routeId, - routeType, requestId); + mProvider.requestCreateSession(packageName, routeId, requestId); } catch (RemoteException ex) { Slog.e(TAG, "Failed to deliver request to create a session.", ex); } diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 161afb51cbfbf..45d50b33357e5 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -178,18 +178,14 @@ class MediaRouter2ServiceImpl { } public void requestCreateSession(IMediaRouter2Client client, MediaRoute2Info route, - String routeFeature, int requestId) { + int requestId) { Objects.requireNonNull(client, "client must not be null"); Objects.requireNonNull(route, "route must not be null"); - if (TextUtils.isEmpty(routeFeature)) { - throw new IllegalArgumentException("routeFeature must not be empty"); - } final long token = Binder.clearCallingIdentity(); - try { synchronized (mLock) { - requestCreateSessionLocked(client, route, routeFeature, requestId); + requestCreateSessionLocked(client, route, requestId); } } finally { Binder.restoreCallingIdentity(token); @@ -450,7 +446,7 @@ class MediaRouter2ServiceImpl { } private void requestCreateSessionLocked(@NonNull IMediaRouter2Client client, - @NonNull MediaRoute2Info route, @NonNull String routeFeature, long requestId) { + @NonNull MediaRoute2Info route, long requestId) { final IBinder binder = client.asBinder(); final Client2Record clientRecord = mAllClientRecords.get(binder); @@ -462,8 +458,7 @@ class MediaRouter2ServiceImpl { if (clientRecord != null) { clientRecord.mUserRecord.mHandler.sendMessage( obtainMessage(UserHandler::requestCreateSessionOnHandler, - clientRecord.mUserRecord.mHandler, - clientRecord, route, routeFeature, requestId)); + clientRecord.mUserRecord.mHandler, clientRecord, route, requestId)); } } @@ -624,7 +619,7 @@ class MediaRouter2ServiceImpl { if (clientRecord != null && managerRecord.mTrusted) { //TODO: select route feature properly requestCreateSessionLocked(clientRecord.mClient, route, - route.getFeatures().get(0), uniqueRequestId); + uniqueRequestId); } } } @@ -985,7 +980,7 @@ class MediaRouter2ServiceImpl { } private void requestCreateSessionOnHandler(Client2Record clientRecord, - MediaRoute2Info route, String routeFeature, long requestId) { + MediaRoute2Info route, long requestId) { final MediaRoute2Provider provider = findProvider(route.getProviderId()); if (provider == null) { @@ -995,20 +990,13 @@ class MediaRouter2ServiceImpl { return; } - if (!route.getFeatures().contains(routeFeature)) { - Slog.w(TAG, "Ignoring session creation request since the given route=" + route - + " doesn't support the given feature=" + routeFeature); - notifySessionCreationFailed(clientRecord, toClientRequestId(requestId)); - return; - } - // TODO: Apply timeout for each request (How many seconds should we wait?) - SessionCreationRequest request = new SessionCreationRequest( - clientRecord, route, routeFeature, requestId); + SessionCreationRequest request = + new SessionCreationRequest(clientRecord, route, requestId); mSessionCreationRequests.add(request); provider.requestCreateSession(clientRecord.mPackageName, route.getOriginalId(), - routeFeature, requestId); + requestId); } private void selectRouteOnHandler(@NonNull Client2Record clientRecord, @@ -1173,15 +1161,11 @@ class MediaRouter2ServiceImpl { } String originalRouteId = matchingRequest.mRoute.getId(); - String originalRouteFeature = matchingRequest.mRouteFeature; Client2Record client2Record = matchingRequest.mClientRecord; - if (!sessionInfo.getSelectedRoutes().contains(originalRouteId) - || !TextUtils.equals(originalRouteFeature, - sessionInfo.getRouteFeature())) { + if (!sessionInfo.getSelectedRoutes().contains(originalRouteId)) { Slog.w(TAG, "Created session doesn't match the original request." + " originalRouteId=" + originalRouteId - + ", originalRouteFeature=" + originalRouteFeature + ", requestId=" + requestId + ", sessionInfo=" + sessionInfo); notifySessionCreationFailed(matchingRequest.mClientRecord, toClientRequestId(requestId)); @@ -1470,15 +1454,12 @@ class MediaRouter2ServiceImpl { final class SessionCreationRequest { public final Client2Record mClientRecord; public final MediaRoute2Info mRoute; - public final String mRouteFeature; public final long mRequestId; SessionCreationRequest(@NonNull Client2Record clientRecord, - @NonNull MediaRoute2Info route, - @NonNull String routeFeature, long requestId) { + @NonNull MediaRoute2Info route, long requestId) { mClientRecord = clientRecord; mRoute = route; - mRouteFeature = routeFeature; mRequestId = requestId; } } diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java index c80a898184bc0..aad963688cc50 100644 --- a/services/core/java/com/android/server/media/MediaRouterService.java +++ b/services/core/java/com/android/server/media/MediaRouterService.java @@ -460,8 +460,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub // Binder call @Override public void requestCreateSession(IMediaRouter2Client client, MediaRoute2Info route, - String routeType, int requestId) { - mService2.requestCreateSession(client, route, routeType, requestId); + int requestId) { + mService2.requestCreateSession(client, route, requestId); } // Binder call diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java index 6695227fd236d..3759ba9743faf 100644 --- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java +++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java @@ -96,8 +96,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { } @Override - public void requestCreateSession(String packageName, String routeId, String routeType, - long requestId) { + public void requestCreateSession(String packageName, String routeId, long requestId) { // Do nothing }