From d61f271b4fe9a63a44a2f250bc3d935a3cb87aa7 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Tue, 26 Jul 2022 12:48:48 +0000 Subject: [PATCH 1/5] Fix MediaOutputController resource management This is a cherrypick of commit 42df638b50e9832c7098e227c564d325151c21da. MediaOutputController currently stops scanning when no request to scan has been made yet, and also performs unnecessary null checks. Also remove dead code. Bug: 232812007 Test: atest SystemUITests Change-Id: I396d376a54b89c95a531b1499bd50be2e4242ed1 Merged-In: I396d376a54b89c95a531b1499bd50be2e4242ed1 --- .../media/dialog/MediaOutputController.java | 22 ++----------------- .../dialog/MediaOutputControllerTest.java | 9 -------- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 5df0ca25a285c..19b401d806008 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -224,15 +224,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, Log.d(TAG, "No media controller for " + mPackageName); } } - if (mLocalMediaManager == null) { - if (DEBUG) { - Log.d(TAG, "No local media manager " + mPackageName); - } - return; - } mCallback = cb; - mLocalMediaManager.unregisterCallback(this); - mLocalMediaManager.stopScan(); mLocalMediaManager.registerCallback(this); mLocalMediaManager.startScan(); } @@ -254,10 +246,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, if (mMediaController != null) { mMediaController.unregisterCallback(mCb); } - if (mLocalMediaManager != null) { - mLocalMediaManager.unregisterCallback(this); - mLocalMediaManager.stopScan(); - } + mLocalMediaManager.unregisterCallback(this); + mLocalMediaManager.stopScan(); synchronized (mMediaDevicesLock) { mCachedMediaDevices.clear(); mMediaDevices.clear(); @@ -661,10 +651,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, return mLocalMediaManager.getCurrentConnectedDevice(); } - private MediaDevice getMediaDeviceById(String id) { - return mLocalMediaManager.getMediaDeviceById(new ArrayList<>(mMediaDevices), id); - } - boolean addDeviceToPlayMedia(MediaDevice device) { mMetricLogger.logInteractionExpansion(device); return mLocalMediaManager.addDeviceToPlayMedia(device); @@ -686,10 +672,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, return mLocalMediaManager.getDeselectableMediaDevice(); } - void adjustSessionVolume(String sessionId, int volume) { - mLocalMediaManager.adjustSessionVolume(sessionId, volume); - } - void adjustSessionVolume(int volume) { mLocalMediaManager.adjustSessionVolume(volume); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index 465654ed585f5..cb31fde26bf26 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -170,15 +170,6 @@ public class MediaOutputControllerTest extends SysuiTestCase { verify(mLocalMediaManager).startScan(); } - @Test - public void start_LocalMediaManagerIsNull_verifyNotStartScan() { - mMediaOutputController.mLocalMediaManager = null; - mMediaOutputController.start(mCb); - - verify(mLocalMediaManager, never()).registerCallback(mMediaOutputController); - verify(mLocalMediaManager, never()).startScan(); - } - @Test public void stop_verifyLocalMediaManagerDeinit() { mMediaOutputController.start(mCb); From b932920c6f60d71f0190cbdd25adb01b15e3087f Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Tue, 26 Jul 2022 15:37:20 +0000 Subject: [PATCH 2/5] Merge tests calling onStart and onStop This is a cherrypick of commit 0851843bed622e96047094b54089484477a7c2e6. Allows MediaOutputBaseDialog to manage resources properly during test runs. Bug: 232812007 Test: atest MediaOutputBaseDialogTest Change-Id: I4d6aa4d7afd87c10a226800185695b6b3f8cf3e2 Merged-In: I4d6aa4d7afd87c10a226800185695b6b3f8cf3e2 --- .../dialog/MediaOutputBaseDialogTest.java | 27 ++++--------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java index eb8ecae305bcb..9be201e99b2b6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java @@ -241,46 +241,29 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { } @Test - public void onStart_isBroadcasting_verifyRegisterLeBroadcastServiceCallBack() { + public void whenBroadcasting_verifyLeBroadcastServiceCallBackIsRegisteredAndUnregistered() { when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn( mLocalBluetoothLeBroadcast); mIsBroadcasting = true; mMediaOutputBaseDialogImpl.onStart(); - verify(mLocalBluetoothLeBroadcast).registerServiceCallBack(any(), any()); - } - - @Test - public void onStart_notBroadcasting_noRegisterLeBroadcastServiceCallBack() { - when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn( - mLocalBluetoothLeBroadcast); - mIsBroadcasting = false; - - mMediaOutputBaseDialogImpl.onStart(); - - verify(mLocalBluetoothLeBroadcast, never()).registerServiceCallBack(any(), any()); - } - - @Test - public void onStart_isBroadcasting_verifyUnregisterLeBroadcastServiceCallBack() { - when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn( - mLocalBluetoothLeBroadcast); - mIsBroadcasting = true; mMediaOutputBaseDialogImpl.onStop(); - verify(mLocalBluetoothLeBroadcast).unregisterServiceCallBack(any()); } @Test - public void onStop_notBroadcasting_noUnregisterLeBroadcastServiceCallBack() { + public void + whenNotBroadcasting_verifyLeBroadcastServiceCallBackIsNotRegisteredOrUnregistered() { when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn( mLocalBluetoothLeBroadcast); mIsBroadcasting = false; + mMediaOutputBaseDialogImpl.onStart(); mMediaOutputBaseDialogImpl.onStop(); + verify(mLocalBluetoothLeBroadcast, never()).registerServiceCallBack(any(), any()); verify(mLocalBluetoothLeBroadcast, never()).unregisterServiceCallBack(any()); } From cbca646e970e3f2239ce8c72195588427028832d Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Wed, 20 Jul 2022 13:46:25 +0000 Subject: [PATCH 3/5] Manage scan requests in MediaRouter2Manager This is a cherrypick of commit d9ac018756b3a52bd4c65d1c3ba7488c40b42381. Before this change, MediaRouter2Manager (singleton) does not protect clients against independent changes to the scanning state, which means one client can stop the scan while another needs scanning to go on. After this change, MediaRouter2Manager keeps count of the calls to request scanning, and will only request scanning from the system server while there is at least one active scan request (via registerScanRequest). This change does not affect MediaRouter2.start/stopScan. Bug: 232812007 Test: atest CtsMediaBetterTogetherTestCases Change-Id: I8d80872d7c55791b9a429180da1c68af50ae13b7 Merged-In: I8d80872d7c55791b9a429180da1c68af50ae13b7 --- media/java/android/media/MediaRouter2.java | 10 +++- .../android/media/MediaRouter2Manager.java | 54 ++++++++++--------- .../MediaRouter2ManagerTest.java | 12 ++++- .../settingslib/media/InfoMediaManager.java | 4 +- 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index d8995b419f505..891ab45c7a6e4 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -48,6 +48,7 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -118,6 +119,7 @@ public final class MediaRouter2 { private final Map mNonSystemRoutingControllers = new ArrayMap<>(); private final AtomicInteger mNextRequestId = new AtomicInteger(1); + private final AtomicBoolean mIsScanning = new AtomicBoolean(/* initialValue= */ false); final Handler mHandler; @@ -234,7 +236,9 @@ public final class MediaRouter2 { @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) public void startScan() { if (isSystemRouter()) { - sManager.startScan(); + if (!mIsScanning.getAndSet(true)) { + sManager.registerScanRequest(); + } } } @@ -260,7 +264,9 @@ public final class MediaRouter2 { @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) public void stopScan() { if (isSystemRouter()) { - sManager.stopScan(); + if (mIsScanning.getAndSet(false)) { + sManager.unregisterScanRequest(); + } } } diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index c84f5b09f166a..24c117911f7c6 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -82,6 +82,7 @@ public final class MediaRouter2Manager { @GuardedBy("sLock") private Client mClient; private final IMediaRouterService mMediaRouterService; + private final AtomicInteger mScanRequestCount = new AtomicInteger(/* initialValue= */ 0); final Handler mHandler; final CopyOnWriteArrayList mCallbackRecords = new CopyOnWriteArrayList<>(); @@ -155,20 +156,17 @@ public final class MediaRouter2Manager { } /** - * Starts scanning remote routes. - *

- * Route discovery can happen even when the {@link #startScan()} is not called. - * This is because the scanning could be started before by other apps. - * Therefore, calling this method after calling {@link #stopScan()} does not necessarily mean - * that the routes found before are removed and added again. - *

- * Use {@link Callback} to get the route related events. - *

- * @see #stopScan() + * Registers a request to scan for remote routes. + * + *

Increases the count of active scanning requests. When the count transitions from zero to + * one, sends a request to the system server to start scanning. + * + *

Clients must {@link #unregisterScanRequest() unregister their scan requests} when scanning + * is no longer needed, to avoid unnecessary resource usage. */ - public void startScan() { - Client client = getOrCreateClient(); - if (client != null) { + public void registerScanRequest() { + if (mScanRequestCount.getAndIncrement() == 0) { + Client client = getOrCreateClient(); try { mMediaRouterService.startScan(client); } catch (RemoteException ex) { @@ -178,21 +176,25 @@ public final class MediaRouter2Manager { } /** - * Stops scanning remote routes to reduce resource consumption. - *

- * Route discovery can be continued even after this method is called. - * This is because the scanning is only turned off when all the apps stop scanning. - * Therefore, calling this method does not necessarily mean the routes are removed. - * Also, for the same reason it does not mean that {@link Callback#onRoutesAdded(List)} - * is not called afterwards. - *

- * Use {@link Callback} to get the route related events. + * Unregisters a scan request made by {@link #registerScanRequest()}. * - * @see #startScan() + *

Decreases the count of active scanning requests. When the count transitions from one to + * zero, sends a request to the system server to stop scanning. + * + * @throws IllegalStateException If called while there are no active scan requests. */ - public void stopScan() { - Client client = getOrCreateClient(); - if (client != null) { + public void unregisterScanRequest() { + if (mScanRequestCount.updateAndGet( + count -> { + if (count == 0) { + throw new IllegalStateException( + "No active scan requests to unregister."); + } else { + return --count; + } + }) + == 0) { + Client client = getOrCreateClient(); try { mMediaRouterService.stopScan(client); } catch (RemoteException ex) { diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java index b4aad9df64a7d..4086dec99218d 100644 --- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java +++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java @@ -39,6 +39,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import android.Manifest; @@ -121,7 +122,7 @@ public class MediaRouter2ManagerTest { MediaRouter2ManagerTestActivity.startActivity(mContext); mManager = MediaRouter2Manager.getInstance(mContext); - mManager.startScan(); + mManager.registerScanRequest(); mRouter2 = MediaRouter2.getInstance(mContext); // If we need to support thread pool executors, change this to thread pool executor. @@ -152,7 +153,7 @@ public class MediaRouter2ManagerTest { @After public void tearDown() { - mManager.stopScan(); + mManager.unregisterScanRequest(); // order matters (callbacks should be cleared at the last) releaseAllSessions(); @@ -818,6 +819,13 @@ public class MediaRouter2ManagerTest { assertFalse(failureLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS)); } + @Test + public void unregisterScanRequest_enforcesANonNegativeCount() { + mManager.unregisterScanRequest(); // One request was made in the test setup. + assertThrows(IllegalStateException.class, () -> mManager.unregisterScanRequest()); + mManager.registerScanRequest(); // So that the cleanup doesn't fail. + } + /** * Tests if getSelectableRoutes and getDeselectableRoutes filter routes based on * selected routes diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 58c15eb8073cb..7ec0fcdfeb640 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -96,14 +96,14 @@ public class InfoMediaManager extends MediaManager { public void startScan() { mMediaDevices.clear(); mRouterManager.registerCallback(mExecutor, mMediaRouterCallback); - mRouterManager.startScan(); + mRouterManager.registerScanRequest(); refreshDevices(); } @Override public void stopScan() { mRouterManager.unregisterCallback(mMediaRouterCallback); - mRouterManager.stopScan(); + mRouterManager.unregisterScanRequest(); } /** From 0952e0377e9bb294d143e0dee442c1aa4514688d Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Fri, 22 Jul 2022 13:44:58 +0000 Subject: [PATCH 4/5] Remove unnecessary if checks This is a cherrypick of commit 58fb7d617d8f6f504ecfb746ffcba7b1179e6eb6. Bug: 239926177 Test: atest mediaroutertest CtsMediaBetterTogetherTestCases Change-Id: I8478669747ca291d92b825e205f58add76e9a2a2 Merged-In: I8478669747ca291d92b825e205f58add76e9a2a2 --- .../android/media/MediaRouter2Manager.java | 118 +++++++----------- 1 file changed, 46 insertions(+), 72 deletions(-) diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index 24c117911f7c6..44c0b54546bee 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -166,9 +166,8 @@ public final class MediaRouter2Manager { */ public void registerScanRequest() { if (mScanRequestCount.getAndIncrement() == 0) { - Client client = getOrCreateClient(); try { - mMediaRouterService.startScan(client); + mMediaRouterService.startScan(getOrCreateClient()); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -194,9 +193,8 @@ public final class MediaRouter2Manager { } }) == 0) { - Client client = getOrCreateClient(); try { - mMediaRouterService.stopScan(client); + mMediaRouterService.stopScan(getOrCreateClient()); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -425,15 +423,11 @@ public final class MediaRouter2Manager { */ @NonNull public List getRemoteSessions() { - Client client = getOrCreateClient(); - if (client != null) { - try { - return mMediaRouterService.getRemoteSessions(client); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + return mMediaRouterService.getRemoteSessions(getOrCreateClient()); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } - return Collections.emptyList(); } /** @@ -516,14 +510,12 @@ public final class MediaRouter2Manager { return; } - Client client = getOrCreateClient(); - if (client != null) { - try { - int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.setRouteVolumeWithManager(client, requestId, route, volume); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + int requestId = mNextRequestId.getAndIncrement(); + mMediaRouterService.setRouteVolumeWithManager( + getOrCreateClient(), requestId, route, volume); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -545,15 +537,12 @@ public final class MediaRouter2Manager { return; } - Client client = getOrCreateClient(); - if (client != null) { - try { - int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.setSessionVolumeWithManager( - client, requestId, sessionInfo.getId(), volume); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + int requestId = mNextRequestId.getAndIncrement(); + mMediaRouterService.setSessionVolumeWithManager( + getOrCreateClient(), requestId, sessionInfo.getId(), volume); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -810,15 +799,12 @@ public final class MediaRouter2Manager { return; } - Client client = getOrCreateClient(); - if (client != null) { - try { - int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.selectRouteWithManager( - client, requestId, sessionInfo.getId(), route); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + int requestId = mNextRequestId.getAndIncrement(); + mMediaRouterService.selectRouteWithManager( + getOrCreateClient(), requestId, sessionInfo.getId(), route); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -852,15 +838,12 @@ public final class MediaRouter2Manager { return; } - Client client = getOrCreateClient(); - if (client != null) { - try { - int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.deselectRouteWithManager( - client, requestId, sessionInfo.getId(), route); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + int requestId = mNextRequestId.getAndIncrement(); + mMediaRouterService.deselectRouteWithManager( + getOrCreateClient(), requestId, sessionInfo.getId(), route); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -877,15 +860,12 @@ public final class MediaRouter2Manager { public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) { Objects.requireNonNull(sessionInfo, "sessionInfo must not be null"); - Client client = getOrCreateClient(); - if (client != null) { - try { - int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.releaseSessionWithManager( - client, requestId, sessionInfo.getId()); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + int requestId = mNextRequestId.getAndIncrement(); + mMediaRouterService.releaseSessionWithManager( + getOrCreateClient(), requestId, sessionInfo.getId()); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -898,14 +878,11 @@ public final class MediaRouter2Manager { @NonNull MediaRoute2Info route) { int requestId = createTransferRequest(session, route); - Client client = getOrCreateClient(); - if (client != null) { - try { - mMediaRouterService.transferToRouteWithManager( - client, requestId, session.getId(), route); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + mMediaRouterService.transferToRouteWithManager( + getOrCreateClient(), requestId, session.getId(), route); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } @@ -918,14 +895,11 @@ public final class MediaRouter2Manager { int requestId = createTransferRequest(oldSession, route); - Client client = getOrCreateClient(); - if (client != null) { - try { - mMediaRouterService.requestCreateSessionWithManager( - client, requestId, oldSession, route); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } + try { + mMediaRouterService.requestCreateSessionWithManager( + getOrCreateClient(), requestId, oldSession, route); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); } } From ea4e7228109a30a26135af32748bb48addda5dc0 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Tue, 23 Aug 2022 11:36:50 +0000 Subject: [PATCH 5/5] Simplify MediaRouter2Manager.Client's lifecycle This is a cherrypick of commit 3aa151259cc138f7ab1de355fae87004d09ac1db. Test: atest MediaRouter2ManagerTest Bug: 239926177 Change-Id: I363dc3918465de7fdb74f833fae78f46bde72a37 Merged-In: I363dc3918465de7fdb74f833fae78f46bde72a37 --- .../android/media/MediaRouter2Manager.java | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index 44c0b54546bee..d79740c2fdff2 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -79,8 +79,9 @@ public final class MediaRouter2Manager { final String mPackageName; private final Context mContext; - @GuardedBy("sLock") - private Client mClient; + + private final Client mClient; + private final IMediaRouterService mMediaRouterService; private final AtomicInteger mScanRequestCount = new AtomicInteger(/* initialValue= */ 0); final Handler mHandler; @@ -120,7 +121,12 @@ public final class MediaRouter2Manager { .getSystemService(Context.MEDIA_SESSION_SERVICE); mPackageName = mContext.getPackageName(); mHandler = new Handler(context.getMainLooper()); - mHandler.post(this::getOrCreateClient); + mClient = new Client(); + try { + mMediaRouterService.registerManager(mClient, mPackageName); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } } /** @@ -167,7 +173,7 @@ public final class MediaRouter2Manager { public void registerScanRequest() { if (mScanRequestCount.getAndIncrement() == 0) { try { - mMediaRouterService.startScan(getOrCreateClient()); + mMediaRouterService.startScan(mClient); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -194,7 +200,7 @@ public final class MediaRouter2Manager { }) == 0) { try { - mMediaRouterService.stopScan(getOrCreateClient()); + mMediaRouterService.stopScan(mClient); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -358,8 +364,7 @@ public final class MediaRouter2Manager { @Nullable public RoutingSessionInfo getSystemRoutingSession(@Nullable String packageName) { try { - return mMediaRouterService.getSystemSessionInfoForPackage( - getOrCreateClient(), packageName); + return mMediaRouterService.getSystemSessionInfoForPackage(mClient, packageName); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -424,7 +429,7 @@ public final class MediaRouter2Manager { @NonNull public List getRemoteSessions() { try { - return mMediaRouterService.getRemoteSessions(getOrCreateClient()); + return mMediaRouterService.getRemoteSessions(mClient); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -512,8 +517,7 @@ public final class MediaRouter2Manager { try { int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.setRouteVolumeWithManager( - getOrCreateClient(), requestId, route, volume); + mMediaRouterService.setRouteVolumeWithManager(mClient, requestId, route, volume); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -540,7 +544,7 @@ public final class MediaRouter2Manager { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.setSessionVolumeWithManager( - getOrCreateClient(), requestId, sessionInfo.getId(), volume); + mClient, requestId, sessionInfo.getId(), volume); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -802,7 +806,7 @@ public final class MediaRouter2Manager { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.selectRouteWithManager( - getOrCreateClient(), requestId, sessionInfo.getId(), route); + mClient, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -841,7 +845,7 @@ public final class MediaRouter2Manager { try { int requestId = mNextRequestId.getAndIncrement(); mMediaRouterService.deselectRouteWithManager( - getOrCreateClient(), requestId, sessionInfo.getId(), route); + mClient, requestId, sessionInfo.getId(), route); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -862,8 +866,7 @@ public final class MediaRouter2Manager { try { int requestId = mNextRequestId.getAndIncrement(); - mMediaRouterService.releaseSessionWithManager( - getOrCreateClient(), requestId, sessionInfo.getId()); + mMediaRouterService.releaseSessionWithManager(mClient, requestId, sessionInfo.getId()); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -880,7 +883,7 @@ public final class MediaRouter2Manager { try { mMediaRouterService.transferToRouteWithManager( - getOrCreateClient(), requestId, session.getId(), route); + mClient, requestId, session.getId(), route); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -897,7 +900,7 @@ public final class MediaRouter2Manager { try { mMediaRouterService.requestCreateSessionWithManager( - getOrCreateClient(), requestId, oldSession, route); + mClient, requestId, oldSession, route); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -943,22 +946,6 @@ 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) { - throw ex.rethrowFromSystemServer(); - } - } - } - /** * Interface for receiving events about media routing changes. */