Merge "Add new interface to get active local media session and to adjust volume" into rvc-dev am: 3546dac021

Change-Id: Ie6383fd44267788a61dc1705290799a712fe888f
This commit is contained in:
tim peng
2020-05-04 09:02:38 +00:00
committed by Automerger Merge Worker
4 changed files with 80 additions and 50 deletions

View File

@@ -249,6 +249,15 @@ public class InfoMediaManager extends MediaManager {
return deviceList; return deviceList;
} }
void adjustSessionVolume(RoutingSessionInfo info, int volume) {
if (info == null) {
Log.w(TAG, "Unable to adjust session volume. RoutingSessionInfo is empty");
return;
}
mRouterManager.setSessionVolume(info, volume);
}
/** /**
* Adjust the volume of {@link android.media.RoutingSessionInfo}. * Adjust the volume of {@link android.media.RoutingSessionInfo}.
* *
@@ -352,6 +361,10 @@ public class InfoMediaManager extends MediaManager {
} }
} }
List<RoutingSessionInfo> getActiveMediaSession() {
return mRouterManager.getActiveSessions();
}
private void buildAvailableRoutes() { private void buildAvailableRoutes() {
for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) { for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
if (DEBUG) { if (DEBUG) {

View File

@@ -20,6 +20,7 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProfile;
import android.content.Context; import android.content.Context;
import android.media.RoutingSessionInfo;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -255,22 +256,6 @@ public class LocalMediaManager implements BluetoothCallback {
return mCurrentConnectedDevice; return mCurrentConnectedDevice;
} }
/**
* Find the active MediaDevice.
*
* @param type the media device type.
* @return MediaDevice list
*/
public List<MediaDevice> getActiveMediaDevice(@MediaDevice.MediaDeviceType int type) {
final List<MediaDevice> devices = new ArrayList<>();
for (MediaDevice device : mMediaDevices) {
if (type == device.mType && device.getClientPackageName() != null) {
devices.add(device);
}
}
return devices;
}
/** /**
* Add a MediaDevice to let it play current media. * Add a MediaDevice to let it play current media.
* *
@@ -316,6 +301,23 @@ public class LocalMediaManager implements BluetoothCallback {
return mInfoMediaManager.getSelectedMediaDevice(); return mInfoMediaManager.getSelectedMediaDevice();
} }
/**
* Adjust the volume of session.
*
* @param sessionId the value of media session id
* @param volume the value of volume
*/
public void adjustSessionVolume(String sessionId, int volume) {
final List<RoutingSessionInfo> infos = getActiveMediaSession();
for (RoutingSessionInfo info : infos) {
if (TextUtils.equals(sessionId, info.getId())) {
mInfoMediaManager.adjustSessionVolume(info, volume);
return;
}
}
Log.w(TAG, "adjustSessionVolume: Unable to find session: " + sessionId);
}
/** /**
* Adjust the volume of session. * Adjust the volume of session.
* *
@@ -352,6 +354,15 @@ public class LocalMediaManager implements BluetoothCallback {
return mInfoMediaManager.getSessionName(); return mInfoMediaManager.getSessionName();
} }
/**
* Gets the current active session.
*
* @return current active session list{@link android.media.RoutingSessionInfo}
*/
public List<RoutingSessionInfo> getActiveMediaSession() {
return mInfoMediaManager.getActiveMediaSession();
}
private MediaDevice updateCurrentConnectedDevice() { private MediaDevice updateCurrentConnectedDevice() {
MediaDevice phoneMediaDevice = null; MediaDevice phoneMediaDevice = null;
for (MediaDevice device : mMediaDevices) { for (MediaDevice device : mMediaDevices) {

View File

@@ -415,6 +415,11 @@ public class InfoMediaManagerTest {
assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty(); assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
} }
@Test
public void adjustSessionVolume_routingSessionInfoIsNull_noCrash() {
mInfoMediaManager.adjustSessionVolume(null, 10);
}
@Test @Test
public void adjustSessionVolume_packageNameIsNull_noCrash() { public void adjustSessionVolume_packageNameIsNull_noCrash() {
mInfoMediaManager.mPackageName = null; mInfoMediaManager.mPackageName = null;
@@ -486,6 +491,14 @@ public class InfoMediaManagerTest {
assertThat(mInfoMediaManager.getSessionVolume()).isEqualTo(-1); assertThat(mInfoMediaManager.getSessionVolume()).isEqualTo(-1);
} }
@Test
public void getActiveMediaSession_returnActiveSession() {
final List<RoutingSessionInfo> infos = new ArrayList<>();
mShadowRouter2Manager.setActiveSessions(infos);
assertThat(mInfoMediaManager.getActiveMediaSession()).containsExactlyElementsIn(infos);
}
@Test @Test
public void releaseSession_packageNameIsNull_returnFalse() { public void releaseSession_packageNameIsNull_returnFalse() {
mInfoMediaManager.mPackageName = null; mInfoMediaManager.mPackageName = null;

View File

@@ -34,6 +34,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.media.MediaRoute2Info; import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager; import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo;
import com.android.settingslib.bluetooth.A2dpProfile; import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -67,6 +68,7 @@ public class LocalMediaManagerTest {
private static final String TEST_DEVICE_ID_3 = "device_id_3"; private static final String TEST_DEVICE_ID_3 = "device_id_3";
private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id"; private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id";
private static final String TEST_PACKAGE_NAME = "com.test.playmusic"; private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
private static final String TEST_SESSION_ID = "session_id";
@Mock @Mock
private InfoMediaManager mInfoMediaManager; private InfoMediaManager mInfoMediaManager;
@@ -525,40 +527,6 @@ public class LocalMediaManagerTest {
.STATE_CONNECTED); .STATE_CONNECTED);
} }
@Test
public void getActiveMediaDevice_checkList() {
final List<MediaDevice> devices = new ArrayList<>();
final MediaDevice device1 = mock(MediaDevice.class);
final MediaDevice device2 = mock(MediaDevice.class);
final MediaDevice device3 = mock(MediaDevice.class);
device1.mType = MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE;
device2.mType = MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE;
device3.mType = MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE;
when(device1.getClientPackageName()).thenReturn(TEST_DEVICE_ID_1);
when(device2.getClientPackageName()).thenReturn(TEST_DEVICE_ID_2);
when(device3.getClientPackageName()).thenReturn(TEST_DEVICE_ID_3);
when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
devices.add(device1);
devices.add(device2);
devices.add(device3);
mLocalMediaManager.registerCallback(mCallback);
mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
List<MediaDevice> activeDevices = mLocalMediaManager.getActiveMediaDevice(
MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
assertThat(activeDevices).containsExactly(device1);
activeDevices = mLocalMediaManager.getActiveMediaDevice(
MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
assertThat(activeDevices).containsExactly(device2);
activeDevices = mLocalMediaManager.getActiveMediaDevice(
MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
assertThat(activeDevices).containsExactly(device3);
}
@Test @Test
public void onDeviceAttributesChanged_shouldBeCalled() { public void onDeviceAttributesChanged_shouldBeCalled() {
mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.registerCallback(mCallback);
@@ -568,6 +536,18 @@ public class LocalMediaManagerTest {
verify(mCallback).onDeviceAttributesChanged(); verify(mCallback).onDeviceAttributesChanged();
} }
@Test
public void getActiveMediaSession_verifyCorrectSession() {
final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
when(info.getId()).thenReturn(TEST_SESSION_ID);
routingSessionInfos.add(info);
when(mInfoMediaManager.getActiveMediaSession()).thenReturn(routingSessionInfos);
assertThat(mLocalMediaManager.getActiveMediaSession().get(0).getId())
.matches(TEST_SESSION_ID);
}
@Test @Test
public void onDeviceListAdded_haveDisconnectedDevice_addDisconnectedDevice() { public void onDeviceListAdded_haveDisconnectedDevice_addDisconnectedDevice() {
final List<MediaDevice> devices = new ArrayList<>(); final List<MediaDevice> devices = new ArrayList<>();
@@ -721,4 +701,17 @@ public class LocalMediaManagerTest {
assertThat(mLocalMediaManager.mMediaDevices).hasSize(2); assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
verify(mCallback).onDeviceListUpdate(any()); verify(mCallback).onDeviceListUpdate(any());
} }
@Test
public void adjustSessionVolume_verifyCorrectSessionVolume() {
final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
when(info.getId()).thenReturn(TEST_SESSION_ID);
routingSessionInfos.add(info);
when(mInfoMediaManager.getActiveMediaSession()).thenReturn(routingSessionInfos);
mLocalMediaManager.adjustSessionVolume(TEST_SESSION_ID, 10);
verify(mInfoMediaManager).adjustSessionVolume(info, 10);
}
} }