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

Commit e7f66325 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

Change-Id: I919d54e30395251e62266e8466e40418b7850aad
parents f05118a8 73a78722
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -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) {
+27 −16
Original line number Original line Diff line number Diff line
@@ -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) {
+13 −0
Original line number Original line Diff line number Diff line
@@ -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;
+26 −33
Original line number Original line Diff line number Diff line
@@ -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;
@@ -526,46 +528,24 @@ public class LocalMediaManagerTest {
    }
    }


    @Test
    @Test
    public void getActiveMediaDevice_checkList() {
    public void onDeviceAttributesChanged_shouldBeCalled() {
        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.registerCallback(mCallback);
        mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);

        List<MediaDevice> activeDevices = mLocalMediaManager.getActiveMediaDevice(
                MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
        assertThat(activeDevices).containsExactly(device1);


        activeDevices = mLocalMediaManager.getActiveMediaDevice(
        mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();
                MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
        assertThat(activeDevices).containsExactly(device2);


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


    @Test
    @Test
    public void onDeviceAttributesChanged_shouldBeCalled() {
    public void getActiveMediaSession_verifyCorrectSession() {
        mLocalMediaManager.registerCallback(mCallback);
        final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();

        final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
        mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();
        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
    @Test
@@ -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);
    }
}
}