diff options
-rw-r--r-- | media/java/android/media/MediaRouter2Manager.java | 93 | ||||
-rw-r--r-- | media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java | 5 |
2 files changed, 35 insertions, 63 deletions
diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index 0dc019cc7abd..4ebfce830a70 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -100,6 +100,7 @@ public final class MediaRouter2Manager { .getSystemService(Context.MEDIA_SESSION_SERVICE); mPackageName = mContext.getPackageName(); mHandler = new Handler(context.getMainLooper()); + mHandler.post(this::getOrCreateClient); } /** @@ -118,18 +119,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "Ignoring to add the same callback twice."); 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); - } - } - } } /** @@ -144,21 +133,6 @@ public final class MediaRouter2Manager { Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback); 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(); - } - } } /** @@ -314,10 +288,7 @@ public final class MediaRouter2Manager { */ @NonNull public List<RoutingSessionInfo> getActiveSessions() { - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { return mMediaRouterService.getActiveSessions(client); @@ -380,10 +351,7 @@ public final class MediaRouter2Manager { return; } - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); @@ -419,10 +387,7 @@ public final class MediaRouter2Manager { return; } - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); @@ -451,10 +416,7 @@ public final class MediaRouter2Manager { return; } - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); @@ -710,15 +672,12 @@ public final class MediaRouter2Manager { return; } - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.selectRouteWithManager( - mClient, requestId, sessionInfo.getId(), route); + client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { Log.e(TAG, "selectRoute: Failed to send a request.", ex); } @@ -755,15 +714,12 @@ public final class MediaRouter2Manager { return; } - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.deselectRouteWithManager( - mClient, requestId, sessionInfo.getId(), route); + client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { Log.e(TAG, "deselectRoute: Failed to send a request.", ex); } @@ -794,14 +750,11 @@ public final class MediaRouter2Manager { int requestId = mNextRequestId.getAndIncrement(); mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route)); - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { mMediaRouterService.transferToRouteWithManager( - mClient, requestId, sessionInfo.getId(), route); + client, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { Log.e(TAG, "transferToRoute: Failed to send a request.", ex); } @@ -821,15 +774,12 @@ public final class MediaRouter2Manager { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); - Client client; - synchronized (sLock) { - client = mClient; - } + Client client = getOrCreateClient(); if (client != null) { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.releaseSessionWithManager( - mClient, requestId, sessionInfo.getId()); + client, requestId, sessionInfo.getId()); } catch (RemoteException ex) { Log.e(TAG, "releaseSession: Failed to send a request", ex); } @@ -857,6 +807,23 @@ public final class MediaRouter2Manager { 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. */ diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index eee797af40d7..c05c21cf2752 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -603,6 +603,11 @@ public class MediaRouter2ManagerTest { assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)); } + @Test + public void testGetActiveSessions_returnsNonEmptyList() { + assertFalse(mManager.getActiveSessions().isEmpty()); + } + Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures) throws Exception { CountDownLatch addedLatch = new CountDownLatch(1); |