Loading media/java/android/media/MediaRouter2Manager.java +30 −63 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,7 @@ public final class MediaRouter2Manager { .getSystemService(Context.MEDIA_SESSION_SERVICE); .getSystemService(Context.MEDIA_SESSION_SERVICE); mPackageName = mContext.getPackageName(); mPackageName = mContext.getPackageName(); mHandler = new Handler(context.getMainLooper()); mHandler = new Handler(context.getMainLooper()); mHandler.post(this::getOrCreateClient); } } /** /** Loading @@ -118,18 +119,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "Ignoring to add the same callback twice."); Log.w(TAG, "Ignoring to add the same callback twice."); return; return; } } synchronized (sLock) { if (mClient == null) { Client client = new Client(); try { mMediaRouterService.registerManager(client, mPackageName); mClient = client; } catch (RemoteException ex) { Log.e(TAG, "Unable to register media router manager.", ex); } } } } } /** /** Loading @@ -144,21 +133,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback); Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback); return; return; } } synchronized (sLock) { if (mCallbackRecords.size() == 0) { if (mClient != null) { try { mMediaRouterService.unregisterManager(mClient); } catch (RemoteException ex) { Log.e(TAG, "Unable to unregister media router manager", ex); } mClient = null; } mRoutes.clear(); mPreferredFeaturesMap.clear(); } } } } /** /** Loading Loading @@ -314,10 +288,7 @@ public final class MediaRouter2Manager { */ */ @NonNull @NonNull public List<RoutingSessionInfo> getActiveSessions() { public List<RoutingSessionInfo> getActiveSessions() { Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { return mMediaRouterService.getActiveSessions(client); return mMediaRouterService.getActiveSessions(client); Loading Loading @@ -380,10 +351,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -419,10 +387,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -451,10 +416,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -710,15 +672,12 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.selectRouteWithManager( mMediaRouterService.selectRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "selectRoute: Failed to send a request.", ex); Log.e(TAG, "selectRoute: Failed to send a request.", ex); } } Loading Loading @@ -755,15 +714,12 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.deselectRouteWithManager( mMediaRouterService.deselectRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "deselectRoute: Failed to send a request.", ex); Log.e(TAG, "deselectRoute: Failed to send a request.", ex); } } Loading Loading @@ -794,14 +750,11 @@ public final class MediaRouter2Manager { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route)); mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route)); Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { mMediaRouterService.transferToRouteWithManager( mMediaRouterService.transferToRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "transferToRoute: Failed to send a request.", ex); Log.e(TAG, "transferToRoute: Failed to send a request.", ex); } } Loading @@ -821,15 +774,12 @@ public final class MediaRouter2Manager { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.releaseSessionWithManager( mMediaRouterService.releaseSessionWithManager( mClient, requestId, sessionInfo.getId()); client, requestId, sessionInfo.getId()); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "releaseSession: Failed to send a request", ex); Log.e(TAG, "releaseSession: Failed to send a request", ex); } } Loading Loading @@ -857,6 +807,23 @@ public final class MediaRouter2Manager { sessionInfo.getOwnerPackageName()); sessionInfo.getOwnerPackageName()); } } private Client getOrCreateClient() { synchronized (sLock) { if (mClient != null) { return mClient; } Client client = new Client(); try { mMediaRouterService.registerManager(client, mPackageName); mClient = client; return client; } catch (RemoteException ex) { Log.e(TAG, "Unable to register media router manager.", ex); } } return null; } /** /** * Interface for receiving events about media routing changes. * Interface for receiving events about media routing changes. */ */ Loading media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -603,6 +603,11 @@ public class MediaRouter2ManagerTest { assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } } @Test public void testGetActiveSessions_returnsNonEmptyList() { assertFalse(mManager.getActiveSessions().isEmpty()); } Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures) Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures) throws Exception { throws Exception { CountDownLatch addedLatch = new CountDownLatch(1); CountDownLatch addedLatch = new CountDownLatch(1); Loading Loading
media/java/android/media/MediaRouter2Manager.java +30 −63 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,7 @@ public final class MediaRouter2Manager { .getSystemService(Context.MEDIA_SESSION_SERVICE); .getSystemService(Context.MEDIA_SESSION_SERVICE); mPackageName = mContext.getPackageName(); mPackageName = mContext.getPackageName(); mHandler = new Handler(context.getMainLooper()); mHandler = new Handler(context.getMainLooper()); mHandler.post(this::getOrCreateClient); } } /** /** Loading @@ -118,18 +119,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "Ignoring to add the same callback twice."); Log.w(TAG, "Ignoring to add the same callback twice."); return; return; } } synchronized (sLock) { if (mClient == null) { Client client = new Client(); try { mMediaRouterService.registerManager(client, mPackageName); mClient = client; } catch (RemoteException ex) { Log.e(TAG, "Unable to register media router manager.", ex); } } } } } /** /** Loading @@ -144,21 +133,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback); Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback); return; return; } } synchronized (sLock) { if (mCallbackRecords.size() == 0) { if (mClient != null) { try { mMediaRouterService.unregisterManager(mClient); } catch (RemoteException ex) { Log.e(TAG, "Unable to unregister media router manager", ex); } mClient = null; } mRoutes.clear(); mPreferredFeaturesMap.clear(); } } } } /** /** Loading Loading @@ -314,10 +288,7 @@ public final class MediaRouter2Manager { */ */ @NonNull @NonNull public List<RoutingSessionInfo> getActiveSessions() { public List<RoutingSessionInfo> getActiveSessions() { Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { return mMediaRouterService.getActiveSessions(client); return mMediaRouterService.getActiveSessions(client); Loading Loading @@ -380,10 +351,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -419,10 +387,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -451,10 +416,7 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); Loading Loading @@ -710,15 +672,12 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.selectRouteWithManager( mMediaRouterService.selectRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "selectRoute: Failed to send a request.", ex); Log.e(TAG, "selectRoute: Failed to send a request.", ex); } } Loading Loading @@ -755,15 +714,12 @@ public final class MediaRouter2Manager { return; return; } } Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.deselectRouteWithManager( mMediaRouterService.deselectRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "deselectRoute: Failed to send a request.", ex); Log.e(TAG, "deselectRoute: Failed to send a request.", ex); } } Loading Loading @@ -794,14 +750,11 @@ public final class MediaRouter2Manager { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route)); mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route)); Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { mMediaRouterService.transferToRouteWithManager( mMediaRouterService.transferToRouteWithManager( mClient, requestId, sessionInfo.getId(), route); client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "transferToRoute: Failed to send a request.", ex); Log.e(TAG, "transferToRoute: Failed to send a request.", ex); } } Loading @@ -821,15 +774,12 @@ public final class MediaRouter2Manager { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); Client client; Client client = getOrCreateClient(); synchronized (sLock) { client = mClient; } if (client != null) { if (client != null) { try { try { int requestId = mNextRequestId.getAndIncrement(); int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.releaseSessionWithManager( mMediaRouterService.releaseSessionWithManager( mClient, requestId, sessionInfo.getId()); client, requestId, sessionInfo.getId()); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "releaseSession: Failed to send a request", ex); Log.e(TAG, "releaseSession: Failed to send a request", ex); } } Loading Loading @@ -857,6 +807,23 @@ public final class MediaRouter2Manager { sessionInfo.getOwnerPackageName()); sessionInfo.getOwnerPackageName()); } } private Client getOrCreateClient() { synchronized (sLock) { if (mClient != null) { return mClient; } Client client = new Client(); try { mMediaRouterService.registerManager(client, mPackageName); mClient = client; return client; } catch (RemoteException ex) { Log.e(TAG, "Unable to register media router manager.", ex); } } return null; } /** /** * Interface for receiving events about media routing changes. * Interface for receiving events about media routing changes. */ */ Loading
media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -603,6 +603,11 @@ public class MediaRouter2ManagerTest { assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } } @Test public void testGetActiveSessions_returnsNonEmptyList() { assertFalse(mManager.getActiveSessions().isEmpty()); } Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures) Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures) throws Exception { throws Exception { CountDownLatch addedLatch = new CountDownLatch(1); CountDownLatch addedLatch = new CountDownLatch(1); Loading