From 61bced0b6dde2f92baddc49147005f4412b5f222 Mon Sep 17 00:00:00 2001 From: hughchen Date: Thu, 20 Feb 2020 18:46:32 +0800 Subject: [PATCH] Update/Add method on InfoMediaManager This CL include following change: - Filter out non system route on getAllRoutes(). - Add releaseSession() to release session to stop playing media on MediaDevice. - Add test case. Bug: 149896648 Test: make -j42 RunSettingsLibRoboTests Change-Id: Ibed6e22a8b01d5e1a3c92a80f569b21f40441c27 --- .../settingslib/media/InfoMediaManager.java | 24 ++++++++++++++++++- .../settingslib/media/LocalMediaManager.java | 7 ++++++ .../media/InfoMediaManagerTest.java | 22 +++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index f69e4f5d76894..a0c32ca343eb4 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -164,6 +164,26 @@ public class InfoMediaManager extends MediaManager { return false; } + /** + * Release session to stop playing media on MediaDevice. + */ + boolean releaseSession() { + if (TextUtils.isEmpty(mPackageName)) { + Log.w(TAG, "releaseSession() package name is null or empty!"); + return false; + } + + final RoutingSessionInfo info = getRoutingSessionInfo(); + if (info != null) { + mRouterManager.getControllerForSession(info).release(); + return true; + } + + Log.w(TAG, "releaseSession() Ignoring release session : " + mPackageName); + + return false; + } + /** * Get the MediaDevice list that can be added to current media. * @@ -298,7 +318,9 @@ public class InfoMediaManager extends MediaManager { private void buildAllRoutes() { for (MediaRoute2Info route : mRouterManager.getAllRoutes()) { - addMediaDevice(route); + if (route.isSystemRoute()) { + addMediaDevice(route); + } } } diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 617da6e0fcd04..c70811f1f20ed 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -281,6 +281,13 @@ public class LocalMediaManager implements BluetoothCallback { return mInfoMediaManager.getSelectableMediaDevice(); } + /** + * Release session to stop playing media on MediaDevice. + */ + public boolean releaseSession() { + return mInfoMediaManager.releaseSession(); + } + /** * Get the MediaDevice list that has been selected to current media. * diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java index 9668629dea8c3..edb121b762a7c 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java @@ -96,6 +96,7 @@ public class InfoMediaManagerTest { final MediaRoute2Info info = mock(MediaRoute2Info.class); when(info.getId()).thenReturn(TEST_ID); when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + when(info.isSystemRoute()).thenReturn(true); final List routes = new ArrayList<>(); routes.add(info); @@ -166,6 +167,7 @@ public class InfoMediaManagerTest { final MediaRoute2Info info = mock(MediaRoute2Info.class); when(info.getId()).thenReturn(TEST_ID); when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + when(info.isSystemRoute()).thenReturn(true); final List routes = new ArrayList<>(); routes.add(info); @@ -221,6 +223,7 @@ public class InfoMediaManagerTest { final MediaRoute2Info info = mock(MediaRoute2Info.class); when(info.getId()).thenReturn(TEST_ID); when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + when(info.isSystemRoute()).thenReturn(true); final List routes = new ArrayList<>(); routes.add(info); @@ -438,4 +441,23 @@ public class InfoMediaManagerTest { assertThat(mInfoMediaManager.getSessionVolume()).isEqualTo(-1); } + + @Test + public void releaseSession_packageNameIsNull_returnFalse() { + mInfoMediaManager.mPackageName = null; + + assertThat(mInfoMediaManager.releaseSession()).isFalse(); + } + + @Test + public void releaseSession_removeSuccessfully_returnTrue() { + final List routingSessionInfos = new ArrayList<>(); + final RoutingSessionInfo info = mock(RoutingSessionInfo.class); + routingSessionInfos.add(info); + + mShadowRouter2Manager.setRoutingSessions(routingSessionInfos); + when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME); + + assertThat(mInfoMediaManager.releaseSession()).isTrue(); + } }