Loading media/java/android/media/MediaRoute2Info.java +2 −3 Original line number Diff line number Diff line Loading @@ -411,11 +411,10 @@ public final class MediaRoute2Info implements Parcelable { /** * Returns true if the route info has all of the required field. * A route info only obtained from {@link com.android.server.media.MediaRouterService} * is valid. * A route is valid if and only if it is obtained from * {@link com.android.server.media.MediaRouterService}. * @hide */ //TODO: Reconsider the validity of a route info when fields are added. public boolean isValid() { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName()) || TextUtils.isEmpty(getProviderId())) { Loading media/java/android/media/MediaRoute2ProviderService.java +0 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,6 @@ public abstract class MediaRoute2ProviderService extends Service { @Override @Nullable public IBinder onBind(@NonNull Intent intent) { //TODO: Allow binding from media router service only? if (SERVICE_INTERFACE.equals(intent.getAction())) { if (mStub == null) { mStub = new MediaRoute2ProviderServiceStub(); Loading media/java/android/media/MediaRouter2.java +18 −17 Original line number Diff line number Diff line Loading @@ -363,7 +363,7 @@ public class MediaRouter2 { /** * 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. * the current routing controller. * * @param route the route you want to transfer the current media to. Pass {@code null} to * stop routing of the current media. Loading Loading @@ -393,8 +393,11 @@ public class MediaRouter2 { return; } // TODO: Check the given route exists // TODO: Check thread-safety if (!mRoutes.containsKey(route.getId())) { notifyTransferFailed(route); return; } if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) { controller.transferToRoute(route); return; Loading Loading @@ -877,9 +880,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getSelectedRoutes() { List<String> selectedRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getSelectedRoutes()); selectedRouteIds = mSessionInfo.getSelectedRoutes(); } return getRoutesWithIds(selectedRouteIds); } /** Loading @@ -887,9 +892,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getSelectableRoutes() { List<String> selectableRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getSelectableRoutes()); selectableRouteIds = mSessionInfo.getSelectableRoutes(); } return getRoutesWithIds(selectableRouteIds); } /** Loading @@ -897,9 +904,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getDeselectableRoutes() { List<String> deselectableRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getDeselectableRoutes()); deselectableRouteIds = mSessionInfo.getDeselectableRoutes(); } return getRoutesWithIds(deselectableRouteIds); } /** Loading Loading @@ -1203,20 +1212,12 @@ public class MediaRouter2 { } } // TODO: This method uses two locks (mLock outside, sLock inside). // Check if there is any possiblity of deadlock. private List<MediaRoute2Info> getRoutesWithIdsLocked(List<String> routeIds) { List<MediaRoute2Info> routes = new ArrayList<>(); private List<MediaRoute2Info> getRoutesWithIds(List<String> routeIds) { synchronized (sRouterLock) { // TODO: Maybe able to change using Collection.stream()? for (String routeId : routeIds) { MediaRoute2Info route = mRoutes.get(routeId); if (route != null) { routes.add(route); } } return routeIds.stream().map(mRoutes::get) .filter(Objects::nonNull) .collect(Collectors.toList()); } return Collections.unmodifiableList(routes); } } Loading media/java/android/media/MediaRouter2Manager.java +15 −0 Original line number Diff line number Diff line Loading @@ -453,6 +453,10 @@ public class MediaRouter2Manager { record.mExecutor.execute(() -> record.mCallback .onControlCategoriesChanged(packageName, preferredFeatures)); } for (CallbackRecord record : mCallbackRecords) { record.mExecutor.execute(() -> record.mCallback .onPreferredFeaturesChanged(packageName, preferredFeatures)); } } /** Loading Loading @@ -760,6 +764,7 @@ public class MediaRouter2Manager { */ public void onSessionsUpdated() {} //TODO: remove this /** * Called when the preferred route features of an app is changed. * Loading @@ -768,6 +773,16 @@ public class MediaRouter2Manager { */ public void onControlCategoriesChanged(@NonNull String packageName, @NonNull List<String> preferredFeatures) {} /** * Called when the preferred route features of an app is changed. * * @param packageName the package name of the application * @param preferredFeatures the list of preferred route features set by an application. */ public void onPreferredFeaturesChanged(@NonNull String packageName, @NonNull List<String> preferredFeatures) {} } final class CallbackRecord { Loading Loading
media/java/android/media/MediaRoute2Info.java +2 −3 Original line number Diff line number Diff line Loading @@ -411,11 +411,10 @@ public final class MediaRoute2Info implements Parcelable { /** * Returns true if the route info has all of the required field. * A route info only obtained from {@link com.android.server.media.MediaRouterService} * is valid. * A route is valid if and only if it is obtained from * {@link com.android.server.media.MediaRouterService}. * @hide */ //TODO: Reconsider the validity of a route info when fields are added. public boolean isValid() { if (TextUtils.isEmpty(getId()) || TextUtils.isEmpty(getName()) || TextUtils.isEmpty(getProviderId())) { Loading
media/java/android/media/MediaRoute2ProviderService.java +0 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,6 @@ public abstract class MediaRoute2ProviderService extends Service { @Override @Nullable public IBinder onBind(@NonNull Intent intent) { //TODO: Allow binding from media router service only? if (SERVICE_INTERFACE.equals(intent.getAction())) { if (mStub == null) { mStub = new MediaRoute2ProviderServiceStub(); Loading
media/java/android/media/MediaRouter2.java +18 −17 Original line number Diff line number Diff line Loading @@ -363,7 +363,7 @@ public class MediaRouter2 { /** * 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. * the current routing controller. * * @param route the route you want to transfer the current media to. Pass {@code null} to * stop routing of the current media. Loading Loading @@ -393,8 +393,11 @@ public class MediaRouter2 { return; } // TODO: Check the given route exists // TODO: Check thread-safety if (!mRoutes.containsKey(route.getId())) { notifyTransferFailed(route); return; } if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) { controller.transferToRoute(route); return; Loading Loading @@ -877,9 +880,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getSelectedRoutes() { List<String> selectedRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getSelectedRoutes()); selectedRouteIds = mSessionInfo.getSelectedRoutes(); } return getRoutesWithIds(selectedRouteIds); } /** Loading @@ -887,9 +892,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getSelectableRoutes() { List<String> selectableRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getSelectableRoutes()); selectableRouteIds = mSessionInfo.getSelectableRoutes(); } return getRoutesWithIds(selectableRouteIds); } /** Loading @@ -897,9 +904,11 @@ public class MediaRouter2 { */ @NonNull public List<MediaRoute2Info> getDeselectableRoutes() { List<String> deselectableRouteIds; synchronized (mControllerLock) { return getRoutesWithIdsLocked(mSessionInfo.getDeselectableRoutes()); deselectableRouteIds = mSessionInfo.getDeselectableRoutes(); } return getRoutesWithIds(deselectableRouteIds); } /** Loading Loading @@ -1203,20 +1212,12 @@ public class MediaRouter2 { } } // TODO: This method uses two locks (mLock outside, sLock inside). // Check if there is any possiblity of deadlock. private List<MediaRoute2Info> getRoutesWithIdsLocked(List<String> routeIds) { List<MediaRoute2Info> routes = new ArrayList<>(); private List<MediaRoute2Info> getRoutesWithIds(List<String> routeIds) { synchronized (sRouterLock) { // TODO: Maybe able to change using Collection.stream()? for (String routeId : routeIds) { MediaRoute2Info route = mRoutes.get(routeId); if (route != null) { routes.add(route); } } return routeIds.stream().map(mRoutes::get) .filter(Objects::nonNull) .collect(Collectors.toList()); } return Collections.unmodifiableList(routes); } } Loading
media/java/android/media/MediaRouter2Manager.java +15 −0 Original line number Diff line number Diff line Loading @@ -453,6 +453,10 @@ public class MediaRouter2Manager { record.mExecutor.execute(() -> record.mCallback .onControlCategoriesChanged(packageName, preferredFeatures)); } for (CallbackRecord record : mCallbackRecords) { record.mExecutor.execute(() -> record.mCallback .onPreferredFeaturesChanged(packageName, preferredFeatures)); } } /** Loading Loading @@ -760,6 +764,7 @@ public class MediaRouter2Manager { */ public void onSessionsUpdated() {} //TODO: remove this /** * Called when the preferred route features of an app is changed. * Loading @@ -768,6 +773,16 @@ public class MediaRouter2Manager { */ public void onControlCategoriesChanged(@NonNull String packageName, @NonNull List<String> preferredFeatures) {} /** * Called when the preferred route features of an app is changed. * * @param packageName the package name of the application * @param preferredFeatures the list of preferred route features set by an application. */ public void onPreferredFeaturesChanged(@NonNull String packageName, @NonNull List<String> preferredFeatures) {} } final class CallbackRecord { Loading