Loading core/api/current.txt +4 −3 Original line number Diff line number Diff line Loading @@ -23189,9 +23189,10 @@ package android.media { public abstract static class MediaRouter2.RouteCallback { ctor public MediaRouter2.RouteCallback(); method public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesUpdated(@NonNull java.util.List<android.media.MediaRoute2Info>); } public class MediaRouter2.RoutingController { media/java/android/media/IMediaRouter2.aidl +1 −3 Original line number Diff line number Diff line Loading @@ -26,9 +26,7 @@ import android.os.Bundle; oneway interface IMediaRouter2 { void notifyRouterRegistered(in List<MediaRoute2Info> currentRoutes, in RoutingSessionInfo currentSystemSessionInfo); void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRoutesUpdated(in List<MediaRoute2Info> routes); void notifySessionCreated(int requestId, in @nullable RoutingSessionInfo sessionInfo); void notifySessionInfoChanged(in RoutingSessionInfo sessionInfo); void notifySessionReleased(in RoutingSessionInfo sessionInfo); Loading media/java/android/media/IMediaRouter2Manager.aidl +1 −3 Original line number Diff line number Diff line Loading @@ -30,8 +30,6 @@ oneway interface IMediaRouter2Manager { void notifySessionReleased(in RoutingSessionInfo session); void notifyDiscoveryPreferenceChanged(String packageName, in RouteDiscoveryPreference discoveryPreference); void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRoutesUpdated(in List<MediaRoute2Info> routes); void notifyRequestFailed(int requestId, int reason); } media/java/android/media/MediaRouter2.java +41 −51 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public final class MediaRouter2 { /** * Stores an auxiliary copy of {@link #mFilteredRoutes} at the time of the last route callback * dispatch. This is only used to determine what callback a route should be assigned to (added, * removed, changed) in {@link #dispatchFilteredRoutesChangedLocked(List)}. * removed, changed) in {@link #dispatchFilteredRoutesUpdatedOnHandler(List)}. */ private volatile ArrayMap<String, MediaRoute2Info> mPreviousRoutes = new ArrayMap<>(); Loading Loading @@ -820,7 +820,7 @@ public final class MediaRouter2 { } } void dispatchFilteredRoutesChangedLocked(List<MediaRoute2Info> newRoutes) { void dispatchFilteredRoutesUpdatedOnHandler(List<MediaRoute2Info> newRoutes) { List<MediaRoute2Info> addedRoutes = new ArrayList<>(); List<MediaRoute2Info> removedRoutes = new ArrayList<>(); List<MediaRoute2Info> changedRoutes = new ArrayList<>(); Loading Loading @@ -863,29 +863,16 @@ public final class MediaRouter2 { if (!changedRoutes.isEmpty()) { notifyRoutesChanged(changedRoutes); } } void addRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } updateFilteredRoutesLocked(); // Note: We don't notify clients of changes in route ordering. if (!addedRoutes.isEmpty() || !removedRoutes.isEmpty() || !changedRoutes.isEmpty()) { notifyRoutesUpdated(newRoutes); } } void removeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { for (MediaRoute2Info route : routes) { mRoutes.remove(route.getId()); } updateFilteredRoutesLocked(); } } void changeRoutesOnHandler(List<MediaRoute2Info> routes) { List<MediaRoute2Info> changedRoutes = new ArrayList<>(); void updateRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { mRoutes.clear(); for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } Loading @@ -900,8 +887,10 @@ public final class MediaRouter2 { Collections.unmodifiableList( filterRoutesWithCompositePreferenceLocked(List.copyOf(mRoutes.values()))); mHandler.sendMessage( obtainMessage(MediaRouter2::dispatchFilteredRoutesChangedLocked, this, mFilteredRoutes)); obtainMessage( MediaRouter2::dispatchFilteredRoutesUpdatedOnHandler, this, mFilteredRoutes)); } /** Loading Loading @@ -1211,6 +1200,14 @@ public final class MediaRouter2 { } } private void notifyRoutesUpdated(List<MediaRoute2Info> routes) { for (RouteCallbackRecord record : mRouteCallbackRecords) { List<MediaRoute2Info> filteredRoutes = filterRoutesWithIndividualPreference(routes, record.mPreference); record.mExecutor.execute(() -> record.mRouteCallback.onRoutesUpdated(filteredRoutes)); } } private void notifyPreferredFeaturesChanged(List<String> features) { for (RouteCallbackRecord record : mRouteCallbackRecords) { record.mExecutor.execute( Loading Loading @@ -1246,28 +1243,43 @@ public final class MediaRouter2 { /** Callback for receiving events about media route discovery. */ public abstract static class RouteCallback { /** * Called when routes are added. Whenever you registers a callback, this will be invoked * with known routes. * Called when routes are added. Whenever you register a callback, this will be invoked with * known routes. * * @param routes the list of routes that have been added. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are removed. * * @param routes the list of routes that have been removed. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are changed. For example, it is called when the route's name or volume * have been changed. * Called when the properties of one or more existing routes are changed. For example, it is * called when a route's name or volume have changed. * * @param routes the list of routes that have been changed. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} /** * Called when the route list is updated, which can happen when routes are added, removed, * or modified. It will also be called when a route callback is registered. * * @param routes the updated list of routes filtered by the callback's individual discovery * preferences. */ public void onRoutesUpdated(@NonNull List<MediaRoute2Info> routes) {} /** * Called when the client app's preferred features are changed. When this is called, it is * recommended to {@link #getRoutes()} to get the routes that are currently available to the Loading Loading @@ -1985,21 +1997,9 @@ public final class MediaRouter2 { } @Override public void notifyRoutesAdded(List<MediaRoute2Info> routes) { public void notifyRoutesUpdated(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::addRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRoutesRemoved(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::removeRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRoutesChanged(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::changeRoutesOnHandler, MediaRouter2.this, routes)); obtainMessage(MediaRouter2::updateRoutesOnHandler, MediaRouter2.this, routes)); } @Override Loading Loading @@ -2047,17 +2047,7 @@ public final class MediaRouter2 { class ManagerCallback implements MediaRouter2Manager.Callback { @Override public void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) { updateAllRoutesFromManager(); } @Override public void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) { updateAllRoutesFromManager(); } @Override public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) { public void onRoutesUpdated() { updateAllRoutesFromManager(); } Loading media/java/android/media/MediaRouter2Manager.java +14 −71 Original line number Diff line number Diff line Loading @@ -546,37 +546,15 @@ public final class MediaRouter2Manager { } } void addRoutesOnHandler(List<MediaRoute2Info> routes) { void updateRoutesOnHandler(@NonNull List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { mRoutes.clear(); for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } } if (routes.size() > 0) { notifyRoutesAdded(routes); } } void removeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { for (MediaRoute2Info route : routes) { mRoutes.remove(route.getId()); } } if (routes.size() > 0) { notifyRoutesRemoved(routes); } } void changeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } } if (routes.size() > 0) { notifyRoutesChanged(routes); } notifyRoutesUpdated(); } void createSessionOnHandler(int requestId, RoutingSessionInfo sessionInfo) { Loading Loading @@ -650,24 +628,9 @@ public final class MediaRouter2Manager { notifySessionUpdated(sessionInfo); } private void notifyRoutesAdded(List<MediaRoute2Info> routes) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesAdded(routes)); } } private void notifyRoutesRemoved(List<MediaRoute2Info> routes) { private void notifyRoutesUpdated() { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesRemoved(routes)); } } private void notifyRoutesChanged(List<MediaRoute2Info> routes) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesChanged(routes)); record.mExecutor.execute(() -> record.mCallback.onRoutesUpdated()); } } Loading Loading @@ -963,23 +926,12 @@ public final class MediaRouter2Manager { * Interface for receiving events about media routing changes. */ public interface Callback { /** * Called when routes are added. * @param routes the list of routes that have been added. It's never empty. */ default void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are removed. * @param routes the list of routes that have been removed. It's never empty. * Called when the routes list changes. This includes adding, modifying, or removing * individual routes. */ default void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are changed. * @param routes the list of routes that have been changed. It's never empty. */ default void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} default void onRoutesUpdated() {} /** * Called when a session is changed. Loading Loading @@ -1115,21 +1067,12 @@ public final class MediaRouter2Manager { } @Override public void notifyRoutesAdded(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::addRoutesOnHandler, MediaRouter2Manager.this, routes)); } @Override public void notifyRoutesRemoved(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::removeRoutesOnHandler, MediaRouter2Manager.this, routes)); } @Override public void notifyRoutesChanged(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::changeRoutesOnHandler, MediaRouter2Manager.this, routes)); public void notifyRoutesUpdated(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage( MediaRouter2Manager::updateRoutesOnHandler, MediaRouter2Manager.this, routes)); } } } Loading
core/api/current.txt +4 −3 Original line number Diff line number Diff line Loading @@ -23189,9 +23189,10 @@ package android.media { public abstract static class MediaRouter2.RouteCallback { ctor public MediaRouter2.RouteCallback(); method public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>); method @Deprecated public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>); method public void onRoutesUpdated(@NonNull java.util.List<android.media.MediaRoute2Info>); } public class MediaRouter2.RoutingController {
media/java/android/media/IMediaRouter2.aidl +1 −3 Original line number Diff line number Diff line Loading @@ -26,9 +26,7 @@ import android.os.Bundle; oneway interface IMediaRouter2 { void notifyRouterRegistered(in List<MediaRoute2Info> currentRoutes, in RoutingSessionInfo currentSystemSessionInfo); void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRoutesUpdated(in List<MediaRoute2Info> routes); void notifySessionCreated(int requestId, in @nullable RoutingSessionInfo sessionInfo); void notifySessionInfoChanged(in RoutingSessionInfo sessionInfo); void notifySessionReleased(in RoutingSessionInfo sessionInfo); Loading
media/java/android/media/IMediaRouter2Manager.aidl +1 −3 Original line number Diff line number Diff line Loading @@ -30,8 +30,6 @@ oneway interface IMediaRouter2Manager { void notifySessionReleased(in RoutingSessionInfo session); void notifyDiscoveryPreferenceChanged(String packageName, in RouteDiscoveryPreference discoveryPreference); void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRoutesUpdated(in List<MediaRoute2Info> routes); void notifyRequestFailed(int requestId, int reason); }
media/java/android/media/MediaRouter2.java +41 −51 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public final class MediaRouter2 { /** * Stores an auxiliary copy of {@link #mFilteredRoutes} at the time of the last route callback * dispatch. This is only used to determine what callback a route should be assigned to (added, * removed, changed) in {@link #dispatchFilteredRoutesChangedLocked(List)}. * removed, changed) in {@link #dispatchFilteredRoutesUpdatedOnHandler(List)}. */ private volatile ArrayMap<String, MediaRoute2Info> mPreviousRoutes = new ArrayMap<>(); Loading Loading @@ -820,7 +820,7 @@ public final class MediaRouter2 { } } void dispatchFilteredRoutesChangedLocked(List<MediaRoute2Info> newRoutes) { void dispatchFilteredRoutesUpdatedOnHandler(List<MediaRoute2Info> newRoutes) { List<MediaRoute2Info> addedRoutes = new ArrayList<>(); List<MediaRoute2Info> removedRoutes = new ArrayList<>(); List<MediaRoute2Info> changedRoutes = new ArrayList<>(); Loading Loading @@ -863,29 +863,16 @@ public final class MediaRouter2 { if (!changedRoutes.isEmpty()) { notifyRoutesChanged(changedRoutes); } } void addRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } updateFilteredRoutesLocked(); // Note: We don't notify clients of changes in route ordering. if (!addedRoutes.isEmpty() || !removedRoutes.isEmpty() || !changedRoutes.isEmpty()) { notifyRoutesUpdated(newRoutes); } } void removeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { for (MediaRoute2Info route : routes) { mRoutes.remove(route.getId()); } updateFilteredRoutesLocked(); } } void changeRoutesOnHandler(List<MediaRoute2Info> routes) { List<MediaRoute2Info> changedRoutes = new ArrayList<>(); void updateRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mLock) { mRoutes.clear(); for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } Loading @@ -900,8 +887,10 @@ public final class MediaRouter2 { Collections.unmodifiableList( filterRoutesWithCompositePreferenceLocked(List.copyOf(mRoutes.values()))); mHandler.sendMessage( obtainMessage(MediaRouter2::dispatchFilteredRoutesChangedLocked, this, mFilteredRoutes)); obtainMessage( MediaRouter2::dispatchFilteredRoutesUpdatedOnHandler, this, mFilteredRoutes)); } /** Loading Loading @@ -1211,6 +1200,14 @@ public final class MediaRouter2 { } } private void notifyRoutesUpdated(List<MediaRoute2Info> routes) { for (RouteCallbackRecord record : mRouteCallbackRecords) { List<MediaRoute2Info> filteredRoutes = filterRoutesWithIndividualPreference(routes, record.mPreference); record.mExecutor.execute(() -> record.mRouteCallback.onRoutesUpdated(filteredRoutes)); } } private void notifyPreferredFeaturesChanged(List<String> features) { for (RouteCallbackRecord record : mRouteCallbackRecords) { record.mExecutor.execute( Loading Loading @@ -1246,28 +1243,43 @@ public final class MediaRouter2 { /** Callback for receiving events about media route discovery. */ public abstract static class RouteCallback { /** * Called when routes are added. Whenever you registers a callback, this will be invoked * with known routes. * Called when routes are added. Whenever you register a callback, this will be invoked with * known routes. * * @param routes the list of routes that have been added. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are removed. * * @param routes the list of routes that have been removed. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are changed. For example, it is called when the route's name or volume * have been changed. * Called when the properties of one or more existing routes are changed. For example, it is * called when a route's name or volume have changed. * * @param routes the list of routes that have been changed. It's never empty. * @deprecated Use {@link #onRoutesUpdated(List)} instead. */ @Deprecated public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} /** * Called when the route list is updated, which can happen when routes are added, removed, * or modified. It will also be called when a route callback is registered. * * @param routes the updated list of routes filtered by the callback's individual discovery * preferences. */ public void onRoutesUpdated(@NonNull List<MediaRoute2Info> routes) {} /** * Called when the client app's preferred features are changed. When this is called, it is * recommended to {@link #getRoutes()} to get the routes that are currently available to the Loading Loading @@ -1985,21 +1997,9 @@ public final class MediaRouter2 { } @Override public void notifyRoutesAdded(List<MediaRoute2Info> routes) { public void notifyRoutesUpdated(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::addRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRoutesRemoved(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::removeRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRoutesChanged(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage(MediaRouter2::changeRoutesOnHandler, MediaRouter2.this, routes)); obtainMessage(MediaRouter2::updateRoutesOnHandler, MediaRouter2.this, routes)); } @Override Loading Loading @@ -2047,17 +2047,7 @@ public final class MediaRouter2 { class ManagerCallback implements MediaRouter2Manager.Callback { @Override public void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) { updateAllRoutesFromManager(); } @Override public void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) { updateAllRoutesFromManager(); } @Override public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) { public void onRoutesUpdated() { updateAllRoutesFromManager(); } Loading
media/java/android/media/MediaRouter2Manager.java +14 −71 Original line number Diff line number Diff line Loading @@ -546,37 +546,15 @@ public final class MediaRouter2Manager { } } void addRoutesOnHandler(List<MediaRoute2Info> routes) { void updateRoutesOnHandler(@NonNull List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { mRoutes.clear(); for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } } if (routes.size() > 0) { notifyRoutesAdded(routes); } } void removeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { for (MediaRoute2Info route : routes) { mRoutes.remove(route.getId()); } } if (routes.size() > 0) { notifyRoutesRemoved(routes); } } void changeRoutesOnHandler(List<MediaRoute2Info> routes) { synchronized (mRoutesLock) { for (MediaRoute2Info route : routes) { mRoutes.put(route.getId(), route); } } if (routes.size() > 0) { notifyRoutesChanged(routes); } notifyRoutesUpdated(); } void createSessionOnHandler(int requestId, RoutingSessionInfo sessionInfo) { Loading Loading @@ -650,24 +628,9 @@ public final class MediaRouter2Manager { notifySessionUpdated(sessionInfo); } private void notifyRoutesAdded(List<MediaRoute2Info> routes) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesAdded(routes)); } } private void notifyRoutesRemoved(List<MediaRoute2Info> routes) { private void notifyRoutesUpdated() { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesRemoved(routes)); } } private void notifyRoutesChanged(List<MediaRoute2Info> routes) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRoutesChanged(routes)); record.mExecutor.execute(() -> record.mCallback.onRoutesUpdated()); } } Loading Loading @@ -963,23 +926,12 @@ public final class MediaRouter2Manager { * Interface for receiving events about media routing changes. */ public interface Callback { /** * Called when routes are added. * @param routes the list of routes that have been added. It's never empty. */ default void onRoutesAdded(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are removed. * @param routes the list of routes that have been removed. It's never empty. * Called when the routes list changes. This includes adding, modifying, or removing * individual routes. */ default void onRoutesRemoved(@NonNull List<MediaRoute2Info> routes) {} /** * Called when routes are changed. * @param routes the list of routes that have been changed. It's never empty. */ default void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} default void onRoutesUpdated() {} /** * Called when a session is changed. Loading Loading @@ -1115,21 +1067,12 @@ public final class MediaRouter2Manager { } @Override public void notifyRoutesAdded(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::addRoutesOnHandler, MediaRouter2Manager.this, routes)); } @Override public void notifyRoutesRemoved(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::removeRoutesOnHandler, MediaRouter2Manager.this, routes)); } @Override public void notifyRoutesChanged(List<MediaRoute2Info> routes) { mHandler.sendMessage(obtainMessage(MediaRouter2Manager::changeRoutesOnHandler, MediaRouter2Manager.this, routes)); public void notifyRoutesUpdated(List<MediaRoute2Info> routes) { mHandler.sendMessage( obtainMessage( MediaRouter2Manager::updateRoutesOnHandler, MediaRouter2Manager.this, routes)); } } }