Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc81dffb authored by tim peng's avatar tim peng Committed by Automerger Merge Worker
Browse files

Merge "Add new interface to get active local media session and to adjust...

Merge "Add new interface to get active local media session and to adjust volume" into rvc-dev am: 3546dac0 am: a16ecd2f am: 73a78722 am: e7f66325

Change-Id: I6a24a03d05d435e9e4610e85dae2ace9ae5ceb60
parents d6c228f6 e7f66325
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -249,6 +249,15 @@ public class InfoMediaManager extends MediaManager {
        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}.
     *
@@ -352,6 +361,10 @@ public class InfoMediaManager extends MediaManager {
        }
    }

    List<RoutingSessionInfo> getActiveMediaSession() {
        return mRouterManager.getActiveSessions();
    }

    private void buildAvailableRoutes() {
        for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
            if (DEBUG) {
+27 −16
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.media.RoutingSessionInfo;
import android.text.TextUtils;
import android.util.Log;

@@ -255,22 +256,6 @@ public class LocalMediaManager implements BluetoothCallback {
        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.
     *
@@ -316,6 +301,23 @@ public class LocalMediaManager implements BluetoothCallback {
        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.
     *
@@ -352,6 +354,15 @@ public class LocalMediaManager implements BluetoothCallback {
        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() {
        MediaDevice phoneMediaDevice = null;
        for (MediaDevice device : mMediaDevices) {
+13 −0
Original line number Diff line number Diff line
@@ -415,6 +415,11 @@ public class InfoMediaManagerTest {
        assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
    }

    @Test
    public void adjustSessionVolume_routingSessionInfoIsNull_noCrash() {
        mInfoMediaManager.adjustSessionVolume(null, 10);
    }

    @Test
    public void adjustSessionVolume_packageNameIsNull_noCrash() {
        mInfoMediaManager.mPackageName = null;
@@ -486,6 +491,14 @@ public class InfoMediaManagerTest {
        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
    public void releaseSession_packageNameIsNull_returnFalse() {
        mInfoMediaManager.mPackageName = null;
+26 −33
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo;

import com.android.settingslib.bluetooth.A2dpProfile;
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_CURRENT_DEVICE_ID = "currentDevice_id";
    private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
    private static final String TEST_SESSION_ID = "session_id";

    @Mock
    private InfoMediaManager mInfoMediaManager;
@@ -526,46 +528,24 @@ public class LocalMediaManagerTest {
    }

    @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);
    public void onDeviceAttributesChanged_shouldBeCalled() {
        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);
        mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();

        activeDevices = mLocalMediaManager.getActiveMediaDevice(
                MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
        assertThat(activeDevices).containsExactly(device3);
        verify(mCallback).onDeviceAttributesChanged();
    }

    @Test
    public void onDeviceAttributesChanged_shouldBeCalled() {
        mLocalMediaManager.registerCallback(mCallback);

        mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();
    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);

        verify(mCallback).onDeviceAttributesChanged();
        assertThat(mLocalMediaManager.getActiveMediaSession().get(0).getId())
                .matches(TEST_SESSION_ID);
    }

    @Test
@@ -721,4 +701,17 @@ public class LocalMediaManagerTest {
        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
        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);
    }
}