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

Commit a7829a3f authored by Hugh Chen's avatar Hugh Chen
Browse files

Add shouldDisableMediaOutput() on LocalMediaManager

- This CL added shouldDisableMediaOutput() for checking
  whether media output should be disabled.

Bug: 169378895
Test: make -j42 RunSettingsLibRoboTests
Change-Id: I75145e1045e1b22b7b0b7a0b62a1ededce9ece1c
parent 79523b5a
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -361,6 +361,36 @@ public class InfoMediaManager extends MediaManager {
        return null;
    }

    boolean shouldDisableMediaOutput(String packageName) {
        boolean shouldDisableMediaOutput = false;
        if (TextUtils.isEmpty(packageName)) {
            Log.w(TAG, "shouldDisableMediaOutput() package name is null or empty!");
            return false;
        }
        final List<MediaRoute2Info> infos = mRouterManager.getAvailableRoutes(packageName);
        if (infos.size() == 1) {
            final MediaRoute2Info info = infos.get(0);
            final int deviceType = info.getType();
            switch (deviceType) {
                case TYPE_UNKNOWN:
                case TYPE_REMOTE_TV:
                case TYPE_REMOTE_SPEAKER:
                case TYPE_GROUP:
                    shouldDisableMediaOutput = true;
                    break;
                default:
                    shouldDisableMediaOutput = false;
                    break;
            }
        }
        if (DEBUG) {
            Log.d(TAG, "shouldDisableMediaOutput() MediaRoute2Info size : " + infos.size()
                    + ", package name : " + packageName + ", shouldDisableMediaOutput : "
                    + shouldDisableMediaOutput);
        }
        return shouldDisableMediaOutput;
    }

    private void refreshDevices() {
        mMediaDevices.clear();
        mCurrentConnectedDevice = null;
+7 −0
Original line number Diff line number Diff line
@@ -402,6 +402,13 @@ public class LocalMediaManager implements BluetoothCallback {
        return mPackageName;
    }

    /**
     * Returns {@code true} if needed to disable media output, otherwise returns {@code false}.
     */
    public boolean shouldDisableMediaOutput(String packageName) {
        return mInfoMediaManager.shouldDisableMediaOutput(packageName);
    }

    @VisibleForTesting
    MediaDevice updateCurrentConnectedDevice() {
        MediaDevice connectedDevice = null;
+44 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -721,4 +722,47 @@ public class InfoMediaManagerTest {

        assertThat(mInfoMediaManager.mMediaDevices.size()).isEqualTo(0);
    }

    @Test
    public void shouldDisableMediaOutput_infosSizeEqual1_returnsTrue() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        final List<MediaRoute2Info> infos = new ArrayList<>();
        infos.add(info);
        mShadowRouter2Manager.setAvailableRoutes(infos);

        when(mRouterManager.getAvailableRoutes(anyString())).thenReturn(infos);
        when(info.getType()).thenReturn(TYPE_REMOTE_SPEAKER);

        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isTrue();
    }

    @Test
    public void shouldDisableMediaOutput_infosSizeEqual1AndNotCastDevice_returnsFalse() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        final List<MediaRoute2Info> infos = new ArrayList<>();
        infos.add(info);
        mShadowRouter2Manager.setAvailableRoutes(infos);

        when(mRouterManager.getAvailableRoutes(anyString())).thenReturn(infos);
        when(info.getType()).thenReturn(TYPE_BUILTIN_SPEAKER);

        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isFalse();
    }


    @Test
    public void shouldDisableMediaOutput_infosSizeOverThan1_returnsFalse() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        final MediaRoute2Info info2 = mock(MediaRoute2Info.class);
        final List<MediaRoute2Info> infos = new ArrayList<>();
        infos.add(info);
        infos.add(info2);
        mShadowRouter2Manager.setAvailableRoutes(infos);

        when(mRouterManager.getAvailableRoutes(anyString())).thenReturn(infos);
        when(info.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
        when(info2.getType()).thenReturn(TYPE_REMOTE_SPEAKER);

        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isFalse();
    }
}