diff options
| -rw-r--r-- | api/current.txt | 25 | ||||
| -rw-r--r-- | media/java/android/media/MediaRouter2.java | 336 | ||||
| -rw-r--r-- | media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java | 55 |
3 files changed, 240 insertions, 176 deletions
diff --git a/api/current.txt b/api/current.txt index dd06fc3c6aa3..7a5753a43ca7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -27020,12 +27020,19 @@ package android.media { 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 registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback); 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 registerTransferCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.TransferCallback); method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener); - method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.RoutingControllerCallback); + method public void transferTo(@Nullable android.media.MediaRoute2Info); + method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback); method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback); + method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback); + } + + public static class MediaRouter2.ControllerCallback { + ctor public MediaRouter2.ControllerCallback(); + method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController); } public static interface MediaRouter2.OnGetControllerHintsListener { @@ -27046,7 +27053,6 @@ package android.media { 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> getTransferableRoutes(); method public int getVolume(); method public int getVolumeHandling(); method public int getVolumeMax(); @@ -27054,15 +27060,12 @@ package android.media { method public void release(); method public void selectRoute(@NonNull android.media.MediaRoute2Info); method public void setVolume(int); - 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 static class MediaRouter2.TransferCallback { + ctor public MediaRouter2.TransferCallback(); + method public void onTransferFailed(@NonNull android.media.MediaRoute2Info); + method public void onTransferred(@NonNull android.media.MediaRouter2.RoutingController, @Nullable android.media.MediaRouter2.RoutingController); } public class MediaScannerConnection implements android.content.ServiceConnection { diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index 5111411d2a5f..6281ccd3dcc9 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -65,7 +65,8 @@ public class MediaRouter2 { private final CopyOnWriteArrayList<RouteCallbackRecord> mRouteCallbackRecords = new CopyOnWriteArrayList<>(); - + private final CopyOnWriteArrayList<TransferCallbackRecord> mTransferCallbackRecords = + new CopyOnWriteArrayList<>(); private final CopyOnWriteArrayList<ControllerCallbackRecord> mControllerCallbackRecords = new CopyOnWriteArrayList<>(); @@ -280,22 +281,21 @@ public class MediaRouter2 { } /** - * Registers a callback to get updates on creations and changes of - * {@link RoutingController routing controllers}. + * Registers a callback to get the result of {@link #transferTo(MediaRoute2Info)}. * If you register the same callback twice or more, it will be ignored. * * @param executor the executor to execute the callback on * @param callback the callback to register - * @see #unregisterControllerCallback + * @see #unregisterTransferCallback */ - public void registerControllerCallback(@NonNull @CallbackExecutor Executor executor, - @NonNull RoutingControllerCallback callback) { + public void registerTransferCallback(@NonNull @CallbackExecutor Executor executor, + @NonNull TransferCallback callback) { Objects.requireNonNull(executor, "executor must not be null"); Objects.requireNonNull(callback, "callback must not be null"); - ControllerCallbackRecord record = new ControllerCallbackRecord(executor, callback); - if (!mControllerCallbackRecords.addIfAbsent(record)) { - Log.w(TAG, "Ignoring the same controller callback"); + TransferCallbackRecord record = new TransferCallbackRecord(executor, callback); + if (!mTransferCallbackRecords.addIfAbsent(record)) { + Log.w(TAG, "registerTransferCallback: Ignoring the same callback"); return; } } @@ -305,13 +305,45 @@ public class MediaRouter2 { * If the callback has not been added or been removed already, it is ignored. * * @param callback the callback to unregister - * @see #registerControllerCallback + * @see #registerTransferCallback + */ + public void unregisterTransferCallback(@NonNull TransferCallback callback) { + Objects.requireNonNull(callback, "callback must not be null"); + + if (!mTransferCallbackRecords.remove(new TransferCallbackRecord(null, callback))) { + Log.w(TAG, "unregisterTransferCallback: Ignoring an unknown callback"); + return; + } + } + + /** + * Registers a {@link ControllerCallback}. + * If you register the same callback twice or more, it will be ignored. + * @see #unregisterControllerCallback(ControllerCallback) */ - public void unregisterControllerCallback(@NonNull RoutingControllerCallback callback) { + public void registerControllerCallback(@NonNull @CallbackExecutor Executor executor, + @NonNull ControllerCallback callback) { + Objects.requireNonNull(executor, "executor must not be null"); + Objects.requireNonNull(callback, "callback must not be null"); + + ControllerCallbackRecord record = new ControllerCallbackRecord(executor, callback); + if (!mControllerCallbackRecords.addIfAbsent(record)) { + Log.w(TAG, "registerControllerCallback: Ignoring the same callback"); + return; + } + } + + /** + * Unregisters a {@link ControllerCallback}. The callback will no longer receive + * events. If the callback has not been added or been removed already, it is ignored. + * @see #registerControllerCallback(Executor, ControllerCallback) + */ + public void unregisterControllerCallback( + @NonNull ControllerCallback callback) { Objects.requireNonNull(callback, "callback must not be null"); if (!mControllerCallbackRecords.remove(new ControllerCallbackRecord(null, callback))) { - Log.w(TAG, "Ignoring unknown controller callback"); + Log.w(TAG, "unregisterControllerCallback: Ignoring an unknown callback"); return; } } @@ -319,7 +351,7 @@ public class MediaRouter2 { /** * Sets an {@link OnGetControllerHintsListener} to send hints when creating a * {@link RoutingController}. To send the hints, listener should be set <em>BEFORE</em> calling - * {@link #requestCreateController(MediaRoute2Info)}. + * {@link #transferTo(MediaRoute2Info)}. * * @param listener A listener to send optional app-specific hints when creating a controller. * {@code null} for unset. @@ -329,28 +361,52 @@ public class MediaRouter2 { } /** - * Requests the media route provider service to create a {@link RoutingController} - * with the given route. + * Transfers the current media to the given route. + * If it's necessary a new {@link RoutingController} is created or it is handled within + * the current controller. * - * @param route the route you want to create a controller with. - * @throws IllegalArgumentException if the given route is - * {@link MediaRoute2Info#isSystemRoute() system route} + * @param route the route you want to transfer the current media to. Pass {@code null} to + * stop routing of the current media. * - * @see RoutingControllerCallback#onControllerCreated - * @see RoutingControllerCallback#onControllerCreationFailed + * @see TransferCallback#onTransferred + * @see TransferCallback#onTransferFailed */ - public void requestCreateController(@NonNull MediaRoute2Info route) { - Objects.requireNonNull(route, "route must not be null"); - if (route.isSystemRoute()) { - throw new IllegalArgumentException("Can't create a route controller with " - + "a system route. Use getSystemController()."); + public void transferTo(@Nullable MediaRoute2Info route) { + List<RoutingController> controllers = getControllers(); + RoutingController controller = controllers.get(controllers.size() - 1); + + transfer(controller, route); + } + + /** + * Transfers the media of a routing controller to the given route. + * @param controller a routing controller controlling media routing. + * @param route the route you want to transfer the media to. Pass {@code null} to stop + * routing controlled by the given controller. + * @hide + */ + void transfer(@NonNull RoutingController controller, @Nullable MediaRoute2Info route) { + Objects.requireNonNull(controller, "controller must not be null"); + + if (route == null) { + controller.release(); + return; } + // TODO: Check the given route exists + // TODO: Check thread-safety + if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) { + controller.transferToRoute(route); + return; + } + + controller.release(); final int requestId; requestId = mControllerCreationRequestCnt.getAndIncrement(); - ControllerCreationRequest request = new ControllerCreationRequest(requestId, route); + ControllerCreationRequest request = + new ControllerCreationRequest(requestId, controller, route); mControllerCreationRequests.add(request); OnGetControllerHintsListener listener = mOnGetControllerHintsListener; @@ -371,7 +427,7 @@ public class MediaRouter2 { mMediaRouterService.requestCreateSessionWithRouter2( stub, route, requestId, controllerHints); } catch (RemoteException ex) { - Log.e(TAG, "Unable to request to create controller.", ex); + Log.e(TAG, "transfer: Unable to request to create controller.", ex); mHandler.sendMessage(obtainMessage(MediaRouter2::createControllerOnHandler, MediaRouter2.this, null, requestId)); } @@ -385,7 +441,7 @@ public class MediaRouter2 { * Note: The system controller can't be released. Calling {@link RoutingController#release()} * will be ignored. * <p> - * This method will always return the same instance. + * This method always returns the same instance. */ @NonNull public RoutingController getSystemController() { @@ -493,9 +549,9 @@ public class MediaRouter2 { } /** - * Creates a controller and calls the {@link RoutingControllerCallback#onControllerCreated}. + * Creates a controller and calls the {@link TransferCallback#onTransferred}. * If the controller creation has failed, then it calls - * {@link RoutingControllerCallback#onControllerCreationFailed}. + * {@link TransferCallback#onTransferFailed}. * <p> * Pass {@code null} to sessionInfo for the failure case. */ @@ -516,14 +572,14 @@ public class MediaRouter2 { if (sessionInfo == null) { // TODO: We may need to distinguish between failure and rejection. // One way can be introducing 'reason'. - notifyControllerCreationFailed(requestedRoute); + notifyTransferFailed(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() + ")"); - notifyControllerCreationFailed(requestedRoute); + notifyTransferFailed(requestedRoute); return; } else if (!TextUtils.equals(requestedRoute.getProviderId(), sessionInfo.getProviderId())) { @@ -531,17 +587,18 @@ public class MediaRouter2 { + "(requested route's providerId=" + requestedRoute.getProviderId() + ", actual providerId=" + sessionInfo.getProviderId() + ")"); - notifyControllerCreationFailed(requestedRoute); + notifyTransferFailed(requestedRoute); return; } } if (sessionInfo != null) { - RoutingController controller = new RoutingController(sessionInfo); + RoutingController newController = new RoutingController(sessionInfo); synchronized (sRouterLock) { - mRoutingControllers.put(controller.getId(), controller); + mRoutingControllers.put(newController.getId(), newController); } - notifyControllerCreated(controller); + notifyTransferred(matchingRequest != null ? matchingRequest.mController : + getSystemController(), newController); } } @@ -657,31 +714,32 @@ public class MediaRouter2 { } } - private void notifyControllerCreated(RoutingController controller) { - for (ControllerCallbackRecord record: mControllerCallbackRecords) { + private void notifyTransferred(RoutingController oldController, + RoutingController newController) { + for (TransferCallbackRecord record: mTransferCallbackRecords) { record.mExecutor.execute( - () -> record.mControllerCallback.onControllerCreated(controller)); + () -> record.mTransferCallback.onTransferred(oldController, + newController)); } } - private void notifyControllerCreationFailed(MediaRoute2Info route) { - for (ControllerCallbackRecord record: mControllerCallbackRecords) { + private void notifyTransferFailed(MediaRoute2Info route) { + for (TransferCallbackRecord record: mTransferCallbackRecords) { record.mExecutor.execute( - () -> record.mControllerCallback.onControllerCreationFailed(route)); + () -> record.mTransferCallback.onTransferFailed(route)); } } private void notifyControllerUpdated(RoutingController controller) { for (ControllerCallbackRecord record: mControllerCallbackRecords) { - record.mExecutor.execute( - () -> record.mControllerCallback.onControllerUpdated(controller)); + record.mExecutor.execute(() -> record.mCallback.onControllerUpdated(controller)); } } private void notifyControllerReleased(RoutingController controller) { - for (ControllerCallbackRecord record: mControllerCallbackRecords) { + for (TransferCallbackRecord record: mTransferCallbackRecords) { record.mExecutor.execute( - () -> record.mControllerCallback.onControllerReleased(controller)); + () -> record.mTransferCallback.onTransferred(controller, null)); } } @@ -714,48 +772,28 @@ public class MediaRouter2 { } /** - * Callback for receiving a result of {@link RoutingController} creation and updates. + * Callback for receiving events on media transfer. */ - public static class RoutingControllerCallback { + public static class TransferCallback { /** - * Called when the {@link RoutingController} is created. - * A {@link RoutingController} can be created by calling - * {@link #requestCreateController(MediaRoute2Info)}, or by the system. + * Called when a media is transferred between two different routing controllers. + * This can happen by calling {@link #transferTo(MediaRoute2Info)} or + * {@link RoutingController#release()}. * - * @param controller the controller to control routes + * @param oldController the previous controller that controlled routing. + * @param newController the new controller to control routing or {@code null} if the + * previous controller is released. + * @see #transferTo(MediaRoute2Info) */ - public void onControllerCreated(@NonNull RoutingController controller) {} + public void onTransferred(@NonNull RoutingController oldController, + @Nullable RoutingController newController) {} /** - * Called when the controller creation request failed. - * - * @param requestedRoute the route info which was used for the creation request - */ - public void onControllerCreationFailed(@NonNull MediaRoute2Info requestedRoute) {} - - /** - * Called when the controller is updated. - * - * @param controller the updated controller. Can be the system controller. - * @see #getSystemController() - */ - public void onControllerUpdated(@NonNull RoutingController controller) {} - - /** - * Called when a routing controller is released. It can be released in two cases: - * <ul> - * <li>When {@link RoutingController#release()} is called.</li> - * <li>When the remote session in the provider is destroyed.</li> - * </ul> - * {@link RoutingController#isReleased()} will always return {@code true} - * for the {@code controller} here. + * Called when {@link #transferTo(MediaRoute2Info)} failed. * - * @see RoutingController#release() - * @see RoutingController#isReleased() + * @param requestedRoute the route info which was used for the transfer. */ - // TODO: Add tests for checking whether this method is called. - // TODO: When service process dies, this should be called. - public void onControllerReleased(@NonNull RoutingController controller) {} + public void onTransferFailed(@NonNull MediaRoute2Info requestedRoute) {} } /** @@ -769,8 +807,8 @@ public class MediaRouter2 { * The {@link Bundle} returned here will be sent to media route provider service as a hint. * <p> * To send hints when creating the controller, set the listener before calling - * {@link #requestCreateController(MediaRoute2Info)}. The method will be called - * on the same thread which calls {@link #requestCreateController(MediaRoute2Info)}. + * {@link #transferTo(MediaRoute2Info)}. The method will be called + * on the same thread which calls {@link #transferTo(MediaRoute2Info)}. * * @param route The route to create controller with * @return An optional bundle of app-specific arguments to send to the provider, @@ -783,9 +821,23 @@ public class MediaRouter2 { } /** + * Callback for receiving {@link RoutingController} updates. + */ + public static class ControllerCallback { + /** + * Called when a controller is updated. (e.g., the selected routes of the + * controller is changed or the volume of the controller is changed.) + * + * @param controller the updated controller. Can be the system controller. + * @see #getSystemController() + */ + public void onControllerUpdated(@NonNull RoutingController controller) { } + } + + /** * A class to control media routing session in media route provider. - * For example, selecting/deselcting/transferring routes to session can be done through this - * class. Instances are created by {@link #requestCreateController(MediaRoute2Info)}. + * For example, selecting/deselecting/transferring routes to a session can be done through this + * class. Instances are created by {@link #transferTo(MediaRoute2Info)}. */ public class RoutingController { private final Object mControllerLock = new Object(); @@ -801,7 +853,7 @@ public class MediaRouter2 { } /** - * @return the ID of the controller + * @return the ID of the controller. It is globally unique. */ @NonNull public String getId() { @@ -851,16 +903,6 @@ public class MediaRouter2 { } /** - * @return the unmodifiable list of transferable routes for the session. - */ - @NonNull - public List<MediaRoute2Info> getTransferableRoutes() { - synchronized (mControllerLock) { - return getRoutesWithIdsLocked(mSessionInfo.getTransferableRoutes()); - } - } - - /** * Gets information about how volume is handled on the session. * * @return {@link MediaRoute2Info#PLAYBACK_VOLUME_FIXED} or @@ -919,9 +961,10 @@ public class MediaRouter2 { * </ul> * If the route doesn't meet any of above conditions, it will be ignored. * + * @see #deselectRoute(MediaRoute2Info) * @see #getSelectedRoutes() * @see #getSelectableRoutes() - * @see RoutingControllerCallback#onControllerUpdated + * @see ControllerCallback#onControllerUpdated */ public void selectRoute(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); @@ -968,7 +1011,7 @@ public class MediaRouter2 { * * @see #getSelectedRoutes() * @see #getDeselectableRoutes() - * @see RoutingControllerCallback#onControllerUpdated + * @see ControllerCallback#onControllerUpdated */ public void deselectRoute(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); @@ -1008,35 +1051,33 @@ public class MediaRouter2 { * Transfers to a given route for the remote session. The given route must satisfy * all of the following conditions: * <ul> - * <li>ID should not be included in {@link #getSelectedRoutes()}</li> - * <li>ID should be included in {@link #getTransferableRoutes()}</li> + * <li>ID should not be included in {@link RoutingSessionInfo#getSelectedRoutes()}</li> + * <li>ID should be included in {@link RoutingSessionInfo#getTransferableRoutes()}</li> * </ul> * If the route doesn't meet any of above conditions, it will be ignored. * - * @see #getSelectedRoutes() - * @see #getTransferableRoutes() - * @see RoutingControllerCallback#onControllerUpdated + * @see RoutingSessionInfo#getSelectedRoutes() + * @see RoutingSessionInfo#getTransferableRoutes() + * @see ControllerCallback#onControllerUpdated */ - public void transferToRoute(@NonNull MediaRoute2Info route) { + void transferToRoute(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); synchronized (mControllerLock) { if (mIsReleased) { Log.w(TAG, "transferToRoute() called on released controller. Ignoring."); return; } - } - List<MediaRoute2Info> selectedRoutes = getSelectedRoutes(); - if (checkRouteListContainsRouteId(selectedRoutes, route.getId())) { - Log.w(TAG, "Ignoring transferring to a route that is already added. route=" - + route); - return; - } + if (mSessionInfo.getSelectedRoutes().contains(route.getId())) { + Log.w(TAG, "Ignoring transferring to a route that is already added. " + + "route=" + route); + return; + } - List<MediaRoute2Info> transferableRoutes = getTransferableRoutes(); - if (!checkRouteListContainsRouteId(transferableRoutes, route.getId())) { - Log.w(TAG, "Ignoring transferring to a non-transferable route=" + route); - return; + if (!mSessionInfo.getTransferableRoutes().contains(route.getId())) { + Log.w(TAG, "Ignoring transferring to a non-transferrable route=" + route); + return; + } } MediaRouter2Stub stub; @@ -1132,8 +1173,6 @@ public class MediaRouter2 { .map(MediaRoute2Info::getId).collect(Collectors.toList()); List<String> deselectableRoutes = getDeselectableRoutes().stream() .map(MediaRoute2Info::getId).collect(Collectors.toList()); - List<String> transferableRoutes = getTransferableRoutes().stream() - .map(MediaRoute2Info::getId).collect(Collectors.toList()); StringBuilder result = new StringBuilder() .append("RoutingController{ ") @@ -1147,19 +1186,12 @@ public class MediaRouter2 { .append(", deselectableRoutes={") .append(deselectableRoutes) .append("}") - .append(", transferableRoutes={") - .append(transferableRoutes) - .append("}") .append(" }"); return result.toString(); } - /** - * TODO: Change this to package private. (Hidden for debugging purposes) - * @hide - */ @NonNull - public RoutingSessionInfo getRoutingSessionInfo() { + RoutingSessionInfo getRoutingSessionInfo() { synchronized (mControllerLock) { return mSessionInfo; } @@ -1205,7 +1237,7 @@ public class MediaRouter2 { } } - final class RouteCallbackRecord { + static final class RouteCallbackRecord { public final Executor mExecutor; public final RouteCallback mRouteCallback; public final RouteDiscoveryPreference mPreference; @@ -1234,13 +1266,41 @@ public class MediaRouter2 { } } - final class ControllerCallbackRecord { + static final class TransferCallbackRecord { public final Executor mExecutor; - public final RoutingControllerCallback mControllerCallback; + public final TransferCallback mTransferCallback; - ControllerCallbackRecord(@NonNull Executor executor, - @NonNull RoutingControllerCallback controllerCallback) { - mControllerCallback = controllerCallback; + TransferCallbackRecord(@NonNull Executor executor, + @NonNull TransferCallback transferCallback) { + mTransferCallback = transferCallback; + mExecutor = executor; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof TransferCallbackRecord)) { + return false; + } + return mTransferCallback + == ((TransferCallbackRecord) obj).mTransferCallback; + } + + @Override + public int hashCode() { + return mTransferCallback.hashCode(); + } + } + + static final class ControllerCallbackRecord { + public final Executor mExecutor; + public final ControllerCallback mCallback; + + ControllerCallbackRecord(@Nullable Executor executor, + @NonNull ControllerCallback callback) { + mCallback = callback; mExecutor = executor; } @@ -1252,23 +1312,25 @@ public class MediaRouter2 { if (!(obj instanceof ControllerCallbackRecord)) { return false; } - return mControllerCallback - == ((ControllerCallbackRecord) obj).mControllerCallback; + return mCallback == ((ControllerCallbackRecord) obj).mCallback; } @Override public int hashCode() { - return mControllerCallback.hashCode(); + return mCallback.hashCode(); } } - final class ControllerCreationRequest { - public final MediaRoute2Info mRoute; + static final class ControllerCreationRequest { public final int mRequestId; + public final RoutingController mController; + public final MediaRoute2Info mRoute; - ControllerCreationRequest(int requestId, @NonNull MediaRoute2Info route) { - mRoute = route; + ControllerCreationRequest(int requestId, @NonNull RoutingController controller, + @NonNull MediaRoute2Info route) { mRequestId = requestId; + mController = controller; + mRoute = route; } } diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index ca7c36cacfb9..e80562b3fd1c 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -39,7 +39,7 @@ import android.content.Context; import android.media.MediaRoute2Info; import android.media.MediaRouter2; import android.media.MediaRouter2.RouteCallback; -import android.media.MediaRouter2.RoutingControllerCallback; +import android.media.MediaRouter2.TransferCallback; import android.media.MediaRouter2Manager; import android.media.MediaRouter2Utils; import android.media.RouteDiscoveryPreference; @@ -79,7 +79,7 @@ public class MediaRouter2ManagerTest { private final List<MediaRouter2Manager.Callback> mManagerCallbacks = new ArrayList<>(); private final List<RouteCallback> mRouteCallbacks = new ArrayList<>(); - private final List<RoutingControllerCallback> mControllerCallbacks = new ArrayList<>(); + private final List<MediaRouter2.TransferCallback> mTransferCallbacks = new ArrayList<>(); public static final List<String> FEATURES_ALL = new ArrayList(); public static final List<String> FEATURES_SPECIAL = new ArrayList(); @@ -153,18 +153,14 @@ public class MediaRouter2ManagerTest { MediaRoute2Info routeToRemove = routes.get(ROUTE_ID2); - try { - SampleMediaRoute2ProviderService sInstance = - SampleMediaRoute2ProviderService.getInstance(); - assertNotNull(sInstance); - sInstance.removeRoute(ROUTE_ID2); - assertTrue(removedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); - - sInstance.addRoute(routeToRemove); - assertTrue(addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); - } finally { - mRouter2.unregisterRouteCallback(routeCallback); - } + SampleMediaRoute2ProviderService sInstance = + SampleMediaRoute2ProviderService.getInstance(); + assertNotNull(sInstance); + sInstance.removeRoute(ROUTE_ID2); + assertTrue(removedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); + + sInstance.addRoute(routeToRemove); + assertTrue(addedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } /** @@ -198,10 +194,14 @@ public class MediaRouter2ManagerTest { addManagerCallback(new MediaRouter2Manager.Callback()); //TODO: remove this when it's not necessary. addRouterCallback(new MediaRouter2.RouteCallback()); - addSessionCallback(new RoutingControllerCallback() { + addTransferCallback(new MediaRouter2.TransferCallback() { @Override - public void onControllerCreated(MediaRouter2.RoutingController controller) { - if (createRouteMap(controller.getSelectedRoutes()).containsKey(ROUTE_ID1)) { + public void onTransferred(MediaRouter2.RoutingController oldController, + MediaRouter2.RoutingController newController) { + if (newController == null) { + return; + } + if (createRouteMap(newController.getSelectedRoutes()).containsKey(ROUTE_ID1)) { latch.countDown(); } } @@ -363,7 +363,7 @@ public class MediaRouter2ManagerTest { int currentVolume = sessionInfo.getVolume(); int targetVolume = (currentVolume == 0) ? 1 : (currentVolume - 1); - RoutingControllerCallback routingControllerCallback = new RoutingControllerCallback() { + MediaRouter2.ControllerCallback controllerCallback = new MediaRouter2.ControllerCallback() { @Override public void onControllerUpdated(MediaRouter2.RoutingController controller) { if (!TextUtils.equals(sessionInfo.getId(), controller.getId())) { @@ -374,7 +374,6 @@ public class MediaRouter2ManagerTest { } } }; - mRouter2.registerControllerCallback(mExecutor, routingControllerCallback); addManagerCallback(new MediaRouter2Manager.Callback() { @Override @@ -390,12 +389,12 @@ public class MediaRouter2ManagerTest { } }); - mManager.setSessionVolume(sessionInfo, targetVolume); - try { + mRouter2.registerControllerCallback(mExecutor, controllerCallback); + mManager.setSessionVolume(sessionInfo, targetVolume); assertTrue(volumeChangedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } finally { - mRouter2.unregisterControllerCallback(routingControllerCallback); + mRouter2.unregisterControllerCallback(controllerCallback); } } @@ -491,9 +490,9 @@ public class MediaRouter2ManagerTest { mRouter2.registerRouteCallback(mExecutor, routeCallback, RouteDiscoveryPreference.EMPTY); } - private void addSessionCallback(RoutingControllerCallback controllerCallback) { - mControllerCallbacks.add(controllerCallback); - mRouter2.registerControllerCallback(mExecutor, controllerCallback); + private void addTransferCallback(TransferCallback transferCallback) { + mTransferCallbacks.add(transferCallback); + mRouter2.registerTransferCallback(mExecutor, transferCallback); } private void clearCallbacks() { @@ -507,10 +506,10 @@ public class MediaRouter2ManagerTest { } mRouteCallbacks.clear(); - for (RoutingControllerCallback controllerCallback : mControllerCallbacks) { - mRouter2.unregisterControllerCallback(controllerCallback); + for (MediaRouter2.TransferCallback transferCallback : mTransferCallbacks) { + mRouter2.unregisterTransferCallback(transferCallback); } - mControllerCallbacks.clear(); + mTransferCallbacks.clear(); } private void releaseAllSessions() { |