diff options
4 files changed, 72 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 959c42fe75c9..b83a9c4835e0 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -219,6 +219,33 @@ public class InfoMediaManager extends MediaManager { } /** + * Get the MediaDevice list that can be removed from current media session. + * + * @return list of MediaDevice + */ + List<MediaDevice> getDeselectableMediaDevice() { + final List<MediaDevice> deviceList = new ArrayList<>(); + if (TextUtils.isEmpty(mPackageName)) { + Log.d(TAG, "getDeselectableMediaDevice() package name is null or empty!"); + return deviceList; + } + + final RoutingSessionInfo info = getRoutingSessionInfo(); + if (info != null) { + for (MediaRoute2Info route : mRouterManager.getDeselectableRoutes(info)) { + deviceList.add(new InfoMediaDevice(mContext, mRouterManager, + route, mPackageName)); + Log.d(TAG, route.getName() + " is deselectable for " + mPackageName); + } + return deviceList; + } + Log.d(TAG, "getDeselectableMediaDevice() cannot found deselectable MediaDevice from : " + + mPackageName); + + return deviceList; + } + + /** * Get the MediaDevice list that has been selected to current media. * * @return list of MediaDevice diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index f34903cf7f98..e89f628a2757 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -308,6 +308,15 @@ public class LocalMediaManager implements BluetoothCallback { } /** + * Get the MediaDevice list that can be removed from current media session. + * + * @return list of MediaDevice + */ + public List<MediaDevice> getDeselectableMediaDevice() { + return mInfoMediaManager.getDeselectableMediaDevice(); + } + + /** * Release session to stop playing media on MediaDevice. */ public boolean releaseSession() { 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 c51467123233..248eb5b96b92 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 @@ -416,6 +416,31 @@ public class InfoMediaManagerTest { } @Test + public void getDeselectableMediaDevice_packageNameIsNull_returnFalse() { + mInfoMediaManager.mPackageName = null; + + assertThat(mInfoMediaManager.getDeselectableMediaDevice()).isEmpty(); + } + + @Test + public void getDeselectableMediaDevice_checkList() { + final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>(); + final RoutingSessionInfo info = mock(RoutingSessionInfo.class); + routingSessionInfos.add(info); + final List<MediaRoute2Info> mediaRoute2Infos = new ArrayList<>(); + final MediaRoute2Info mediaRoute2Info = mock(MediaRoute2Info.class); + mediaRoute2Infos.add(mediaRoute2Info); + mShadowRouter2Manager.setRoutingSessions(routingSessionInfos); + mShadowRouter2Manager.setDeselectableRoutes(mediaRoute2Infos); + when(mediaRoute2Info.getName()).thenReturn(TEST_NAME); + + final List<MediaDevice> mediaDevices = mInfoMediaManager.getDeselectableMediaDevice(); + + assertThat(mediaDevices.size()).isEqualTo(1); + assertThat(mediaDevices.get(0).getName()).isEqualTo(TEST_NAME); + } + + @Test public void adjustSessionVolume_routingSessionInfoIsNull_noCrash() { mInfoMediaManager.adjustSessionVolume(null, 10); } diff --git a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java index db0cb0668a2f..5bb550053a12 100644 --- a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java +++ b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowRouter2Manager.java @@ -15,6 +15,7 @@ */ package com.android.settingslib.testutils.shadow; +import android.annotation.NonNull; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import android.media.RoutingSessionInfo; @@ -31,6 +32,7 @@ public class ShadowRouter2Manager { private List<MediaRoute2Info> mAvailableRoutes; private List<MediaRoute2Info> mAllRoutes; + private List<MediaRoute2Info> mDeselectableRoutes; private List<RoutingSessionInfo> mActiveSessions; private List<RoutingSessionInfo> mRoutingSessions; @@ -70,6 +72,15 @@ public class ShadowRouter2Manager { mRoutingSessions = infos; } + @Implementation + public List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo sessionInfo) { + return mDeselectableRoutes; + } + + public void setDeselectableRoutes(List<MediaRoute2Info> routes) { + mDeselectableRoutes = routes; + } + public static ShadowRouter2Manager getShadow() { return (ShadowRouter2Manager) Shadow.extract( MediaRouter2Manager.getInstance(RuntimeEnvironment.application)); |