diff options
| -rw-r--r-- | media/java/android/media/MediaRouter2.java | 14 | ||||
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java | 31 |
2 files changed, 30 insertions, 15 deletions
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index f68eb3d4a34a..8230a825ea0c 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -1399,6 +1399,20 @@ public final class MediaRouter2 { } /** + * Returns the unmodifiable list of transferable routes for the session. + * + * @hide + */ + @NonNull + public List<MediaRoute2Info> getTransferableRoutes() { + List<String> transferableRoutes; + synchronized (mControllerLock) { + transferableRoutes = mSessionInfo.getTransferableRoutes(); + } + return getRoutesWithIds(transferableRoutes); + } + + /** * Returns the current {@link RoutingSessionInfo} associated to this controller. */ @NonNull diff --git a/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java index 9ab3b478a444..5298a46a9c89 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java @@ -35,6 +35,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -244,25 +245,25 @@ public final class RouterInfoMediaManager extends InfoMediaManager { @NonNull @Override protected List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName) { - List<MediaRoute2Info> transferableRoutes = new ArrayList<>(); - List<RoutingController> controllers = mRouter.getControllers(); RoutingController activeController = controllers.get(controllers.size() - 1); - RoutingSessionInfo sessionInfo = activeController.getRoutingSessionInfo(); - List<MediaRoute2Info> routes = mRouter.getRoutes(); - - for (MediaRoute2Info route : routes) { - boolean isCrossDeviceTransfer = sessionInfo.isSystemSession() ^ route.isSystemRoute(); - - // Always show remote routes if transfer is local -> remote or viceversa regardless of - // whether route is in transferable routes list. - if (sessionInfo.getTransferableRoutes().contains(route.getId()) - || isCrossDeviceTransfer) { - transferableRoutes.add(route); - } + HashMap<String, MediaRoute2Info> transferableRoutes = new HashMap<>(); + + activeController + .getTransferableRoutes() + .forEach(route -> transferableRoutes.put(route.getId(), route)); + + if (activeController.getRoutingSessionInfo().isSystemSession()) { + mRouter.getRoutes().stream() + .filter(route -> !route.isSystemRoute()) + .forEach(route -> transferableRoutes.put(route.getId(), route)); + } else { + mRouter.getRoutes().stream() + .filter(route -> route.isSystemRoute()) + .forEach(route -> transferableRoutes.put(route.getId(), route)); } - return transferableRoutes; + return new ArrayList<>(transferableRoutes.values()); } @Nullable |