diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 5fcfb6d5c4af5..3ae9e1ed78c37 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -170,6 +170,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. * @@ -304,7 +324,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(); + } }