Loading media/java/android/media/IMediaRoute2Provider.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import android.media.IMediaRoute2ProviderClient; */ oneway interface IMediaRoute2Provider { void setClient(IMediaRoute2ProviderClient client); void selectRoute(String packageName, String id); void requestSelectRoute(String packageName, String id, int seq); void unselectRoute(String packageName, String id); void notifyControlRequestSent(String id, in Intent request); void requestSetVolume(String id, int volume); Loading media/java/android/media/IMediaRouter2Client.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.media; import android.media.MediaRoute2Info; import android.os.Bundle; /** * @hide Loading @@ -26,4 +27,5 @@ oneway interface IMediaRouter2Client { void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRouteSelected(in MediaRoute2Info route, int reason, in Bundle controlHints); } media/java/android/media/IMediaRouterService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ interface IMediaRouterService { * @param client the client that changes it's selected route * @param route the route to be selected */ void selectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void requestSelectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void setControlCategories2(IMediaRouter2Client client, in List<String> categories); void registerManager(IMediaRouter2Manager manager, String packageName); Loading media/java/android/media/MediaRoute2ProviderService.java +3 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,9 @@ public abstract class MediaRoute2ProviderService extends Service { } @Override public void selectRoute(String packageName, String id) { public void requestSelectRoute(String packageName, String id, int seq) { // TODO: When introducing MediaRoute2ProviderService#sendConnectionHints(), // use the sequence number here properly. mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSelectRoute, MediaRoute2ProviderService.this, packageName, id)); } Loading media/java/android/media/MediaRouter2.java +46 −12 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -103,6 +104,8 @@ public class MediaRouter2 { private MediaRoute2Info mSelectedRoute; @GuardedBy("sLock") private MediaRoute2Info mSelectingRoute; @GuardedBy("sLock") private Client mClient; final Handler mHandler; Loading Loading @@ -250,24 +253,28 @@ public class MediaRouter2 { } /** * Selects the specified route. * Request to select the specified route. When the route is selected, * {@link Callback#onRouteSelected(MediaRoute2Info, int, Bundle)} will be called. * * @param route the route to select */ //TODO: add a parameter for category (e.g. mirroring/casting) public void selectRoute(@NonNull MediaRoute2Info route) { public void requestSelectRoute(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); Client client; synchronized (sLock) { mSelectedRoute = route; if (mSelectingRoute == route) { Log.w(TAG, "The route selection request is already sent."); return; } mSelectingRoute = route; client = mClient; } if (client != null) { try { mMediaRouterService.selectRoute2(client, route); mMediaRouterService.requestSelectRoute2(client, route); } catch (RemoteException ex) { Log.e(TAG, "Unable to select route.", ex); Log.e(TAG, "Unable to request to select route.", ex); } } } Loading Loading @@ -443,6 +450,22 @@ public class MediaRouter2 { } } void selectRouteOnHandler(MediaRoute2Info route, int reason, Bundle controlHints) { synchronized (sLock) { if (reason == SELECT_REASON_USER_SELECTED) { if (mSelectingRoute == null || !TextUtils.equals(mSelectingRoute.getUniqueId(), route.getUniqueId())) { Log.w(TAG, "Ignoring invalid or outdated notifyRouteSelected call. " + "selectingRoute=" + mSelectingRoute + " route=" + route); return; } } mSelectingRoute = null; } mSelectedRoute = route; notifyRouteSelected(route, reason, controlHints); } private void refreshFilteredRoutes() { List<MediaRoute2Info> filteredRoutes = new ArrayList<>(); Loading Loading @@ -475,12 +498,17 @@ public class MediaRouter2 { } } private void notifyRouteSelected(MediaRoute2Info route, int reason, Bundle controlHints) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRouteSelected(route, reason, controlHints)); } } /** * Interface for receiving events about media routing changes. */ public static class Callback { //TODO: clean up these callbacks /** * Called when routes are added. * @param routes the list of routes that have been added. It's never empty. Loading @@ -505,12 +533,11 @@ public class MediaRouter2 { */ public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} // TODO: Make this callback be called when we add requestSelectRoute(). /** * Called when a route is selected. Exactly one route can be selected at a time. * @param route the selected route. * @param reason the reason why the route is selected. * @param connectionHints An optional bundle of provider-specific arguments which may be * @param controlHints An optional bundle of provider-specific arguments which may be * used to control the selected route. Can be empty. * @see #SELECT_REASON_UNKNOWN * @see #SELECT_REASON_USER_SELECTED Loading @@ -518,7 +545,7 @@ public class MediaRouter2 { * @see #getSelectedRoute() */ public void onRouteSelected(@NonNull MediaRoute2Info route, @SelectReason int reason, @NonNull Bundle connectionHints) {} @NonNull Bundle controlHints) {} } final class CallbackRecord { Loading Loading @@ -560,5 +587,12 @@ public class MediaRouter2 { mHandler.sendMessage(obtainMessage(MediaRouter2::changeRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRouteSelected(MediaRoute2Info route, int reason, Bundle controlHints) { mHandler.sendMessage(obtainMessage(MediaRouter2::selectRouteOnHandler, MediaRouter2.this, route, reason, controlHints)); } } } Loading
media/java/android/media/IMediaRoute2Provider.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import android.media.IMediaRoute2ProviderClient; */ oneway interface IMediaRoute2Provider { void setClient(IMediaRoute2ProviderClient client); void selectRoute(String packageName, String id); void requestSelectRoute(String packageName, String id, int seq); void unselectRoute(String packageName, String id); void notifyControlRequestSent(String id, in Intent request); void requestSetVolume(String id, int volume); Loading
media/java/android/media/IMediaRouter2Client.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.media; import android.media.MediaRoute2Info; import android.os.Bundle; /** * @hide Loading @@ -26,4 +27,5 @@ oneway interface IMediaRouter2Client { void notifyRoutesAdded(in List<MediaRoute2Info> routes); void notifyRoutesRemoved(in List<MediaRoute2Info> routes); void notifyRoutesChanged(in List<MediaRoute2Info> routes); void notifyRouteSelected(in MediaRoute2Info route, int reason, in Bundle controlHints); }
media/java/android/media/IMediaRouterService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ interface IMediaRouterService { * @param client the client that changes it's selected route * @param route the route to be selected */ void selectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void requestSelectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route); void setControlCategories2(IMediaRouter2Client client, in List<String> categories); void registerManager(IMediaRouter2Manager manager, String packageName); Loading
media/java/android/media/MediaRoute2ProviderService.java +3 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,9 @@ public abstract class MediaRoute2ProviderService extends Service { } @Override public void selectRoute(String packageName, String id) { public void requestSelectRoute(String packageName, String id, int seq) { // TODO: When introducing MediaRoute2ProviderService#sendConnectionHints(), // use the sequence number here properly. mHandler.sendMessage(obtainMessage(MediaRoute2ProviderService::onSelectRoute, MediaRoute2ProviderService.this, packageName, id)); } Loading
media/java/android/media/MediaRouter2.java +46 −12 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -103,6 +104,8 @@ public class MediaRouter2 { private MediaRoute2Info mSelectedRoute; @GuardedBy("sLock") private MediaRoute2Info mSelectingRoute; @GuardedBy("sLock") private Client mClient; final Handler mHandler; Loading Loading @@ -250,24 +253,28 @@ public class MediaRouter2 { } /** * Selects the specified route. * Request to select the specified route. When the route is selected, * {@link Callback#onRouteSelected(MediaRoute2Info, int, Bundle)} will be called. * * @param route the route to select */ //TODO: add a parameter for category (e.g. mirroring/casting) public void selectRoute(@NonNull MediaRoute2Info route) { public void requestSelectRoute(@NonNull MediaRoute2Info route) { Objects.requireNonNull(route, "route must not be null"); Client client; synchronized (sLock) { mSelectedRoute = route; if (mSelectingRoute == route) { Log.w(TAG, "The route selection request is already sent."); return; } mSelectingRoute = route; client = mClient; } if (client != null) { try { mMediaRouterService.selectRoute2(client, route); mMediaRouterService.requestSelectRoute2(client, route); } catch (RemoteException ex) { Log.e(TAG, "Unable to select route.", ex); Log.e(TAG, "Unable to request to select route.", ex); } } } Loading Loading @@ -443,6 +450,22 @@ public class MediaRouter2 { } } void selectRouteOnHandler(MediaRoute2Info route, int reason, Bundle controlHints) { synchronized (sLock) { if (reason == SELECT_REASON_USER_SELECTED) { if (mSelectingRoute == null || !TextUtils.equals(mSelectingRoute.getUniqueId(), route.getUniqueId())) { Log.w(TAG, "Ignoring invalid or outdated notifyRouteSelected call. " + "selectingRoute=" + mSelectingRoute + " route=" + route); return; } } mSelectingRoute = null; } mSelectedRoute = route; notifyRouteSelected(route, reason, controlHints); } private void refreshFilteredRoutes() { List<MediaRoute2Info> filteredRoutes = new ArrayList<>(); Loading Loading @@ -475,12 +498,17 @@ public class MediaRouter2 { } } private void notifyRouteSelected(MediaRoute2Info route, int reason, Bundle controlHints) { for (CallbackRecord record: mCallbackRecords) { record.mExecutor.execute( () -> record.mCallback.onRouteSelected(route, reason, controlHints)); } } /** * Interface for receiving events about media routing changes. */ public static class Callback { //TODO: clean up these callbacks /** * Called when routes are added. * @param routes the list of routes that have been added. It's never empty. Loading @@ -505,12 +533,11 @@ public class MediaRouter2 { */ public void onRoutesChanged(@NonNull List<MediaRoute2Info> routes) {} // TODO: Make this callback be called when we add requestSelectRoute(). /** * Called when a route is selected. Exactly one route can be selected at a time. * @param route the selected route. * @param reason the reason why the route is selected. * @param connectionHints An optional bundle of provider-specific arguments which may be * @param controlHints An optional bundle of provider-specific arguments which may be * used to control the selected route. Can be empty. * @see #SELECT_REASON_UNKNOWN * @see #SELECT_REASON_USER_SELECTED Loading @@ -518,7 +545,7 @@ public class MediaRouter2 { * @see #getSelectedRoute() */ public void onRouteSelected(@NonNull MediaRoute2Info route, @SelectReason int reason, @NonNull Bundle connectionHints) {} @NonNull Bundle controlHints) {} } final class CallbackRecord { Loading Loading @@ -560,5 +587,12 @@ public class MediaRouter2 { mHandler.sendMessage(obtainMessage(MediaRouter2::changeRoutesOnHandler, MediaRouter2.this, routes)); } @Override public void notifyRouteSelected(MediaRoute2Info route, int reason, Bundle controlHints) { mHandler.sendMessage(obtainMessage(MediaRouter2::selectRouteOnHandler, MediaRouter2.this, route, reason, controlHints)); } } }