From cc9f93a172cbfef60661cfcd59dddaa32674ff79 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Thu, 21 May 2020 11:33:45 +0800 Subject: Add getDeselectableMediaDevice() -Add test case Bug: 157098549 Test: make -j50 RunSettingsLibRoboTests Change-Id: I47682997af51844e7811dd108297b7c13a60cd53 --- .../settingslib/media/InfoMediaManager.java | 27 ++++++++++++++++++++++ .../settingslib/media/LocalMediaManager.java | 9 ++++++++ .../settingslib/media/InfoMediaManagerTest.java | 25 ++++++++++++++++++++ .../testutils/shadow/ShadowRouter2Manager.java | 11 +++++++++ 4 files changed, 72 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 008a433bb7a4..79e5b35da2fd 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -218,6 +218,33 @@ public class InfoMediaManager extends MediaManager { return deviceList; } + /** + * Get the MediaDevice list that can be removed from current media session. + * + * @return list of MediaDevice + */ + List getDeselectableMediaDevice() { + final List 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. * diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 7d95f1992aaf..4325c2e701cb 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -307,6 +307,15 @@ public class LocalMediaManager implements BluetoothCallback { return mInfoMediaManager.getSelectableMediaDevice(); } + /** + * Get the MediaDevice list that can be removed from current media session. + * + * @return list of MediaDevice + */ + public List getDeselectableMediaDevice() { + return mInfoMediaManager.getDeselectableMediaDevice(); + } + /** * Release session to stop playing media on MediaDevice. */ 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 734866f49a53..320108573d09 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 @@ -415,6 +415,31 @@ public class InfoMediaManagerTest { assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty(); } + @Test + public void getDeselectableMediaDevice_packageNameIsNull_returnFalse() { + mInfoMediaManager.mPackageName = null; + + assertThat(mInfoMediaManager.getDeselectableMediaDevice()).isEmpty(); + } + + @Test + public void getDeselectableMediaDevice_checkList() { + final List routingSessionInfos = new ArrayList<>(); + final RoutingSessionInfo info = mock(RoutingSessionInfo.class); + routingSessionInfos.add(info); + final List 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 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 mAvailableRoutes; private List mAllRoutes; + private List mDeselectableRoutes; private List mActiveSessions; private List mRoutingSessions; @@ -70,6 +72,15 @@ public class ShadowRouter2Manager { mRoutingSessions = infos; } + @Implementation + public List getDeselectableRoutes(@NonNull RoutingSessionInfo sessionInfo) { + return mDeselectableRoutes; + } + + public void setDeselectableRoutes(List routes) { + mDeselectableRoutes = routes; + } + public static ShadowRouter2Manager getShadow() { return (ShadowRouter2Manager) Shadow.extract( MediaRouter2Manager.getInstance(RuntimeEnvironment.application)); -- cgit v1.2.3-59-g8ed1b