diff options
author | 2024-09-18 23:22:10 +0000 | |
---|---|---|
committer | 2024-09-18 23:22:10 +0000 | |
commit | f2d75fee3ffe5e7990bd6cd521abe0fe8853770c (patch) | |
tree | 457bdf7c7fe1af46095e2c95a8ebaea61f0fca78 /packages/SystemUI | |
parent | 2aa24f454a8481a23f081d1dc3e4bb820751d517 (diff) |
Show selected input device
InputRouteManager calls AudioManager.getDevicesForAttributes to
retrieve selected input device and passes it down to
MediaSwitchingController.
Change-Id: I8e50cb911a3a1950dfbab921174dc68a18fc6b97
Bug: b/355684672, b/357122624
Test atest MediaSwitchingControllerTest,InputRouteManagerTest
Flag: com.android.media.flags.enable_audio_input_device_routing_and_volume_control
Diffstat (limited to 'packages/SystemUI')
2 files changed, 45 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java index 2cbc75755cfd..f7b73534d35c 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java @@ -157,7 +157,7 @@ public class MediaSwitchingController @VisibleForTesting boolean mNeedRefresh = false; private MediaController mMediaController; - private InputRouteManager mInputRouteManager; + @VisibleForTesting InputRouteManager mInputRouteManager; @VisibleForTesting Callback mCallback; @VisibleForTesting @@ -927,7 +927,18 @@ public class MediaSwitchingController } public List<MediaDevice> getSelectedMediaDevice() { - return mLocalMediaManager.getSelectedMediaDevice(); + if (!enableInputRouting()) { + return mLocalMediaManager.getSelectedMediaDevice(); + } + + // Add selected input device if input routing is supported. + List<MediaDevice> selectedDevices = + new ArrayList<>(mLocalMediaManager.getSelectedMediaDevice()); + MediaDevice selectedInputDevice = mInputRouteManager.getSelectedInputDevice(); + if (selectedInputDevice != null) { + selectedDevices.add(selectedInputDevice); + } + return selectedDevices; } List<MediaDevice> getDeselectableMediaDevice() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java index d3e20c6e39b7..53f0800a7d13 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java @@ -73,6 +73,7 @@ import com.android.media.flags.Flags; import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.InputMediaDevice; +import com.android.settingslib.media.InputRouteManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.systemui.SysuiTestCase; @@ -100,6 +101,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @SmallTest @@ -115,6 +117,10 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { private static final String TEST_SONG = "test_song"; private static final String TEST_SESSION_ID = "test_session_id"; private static final String TEST_SESSION_NAME = "test_session_name"; + private static final int MAX_VOLUME = 1; + private static final int CURRENT_VOLUME = 0; + private static final boolean VOLUME_FIXED_TRUE = true; + @Mock private DialogTransitionAnimator mDialogTransitionAnimator; @Mock @@ -181,6 +187,7 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { private String mPackageName = null; private MediaSwitchingController mMediaSwitchingController; private LocalMediaManager mLocalMediaManager; + private InputRouteManager mInputRouteManager; private List<MediaController> mMediaControllers = new ArrayList<>(); private List<MediaDevice> mMediaDevices = new ArrayList<>(); private List<NearbyDevice> mNearbyDevices = new ArrayList<>(); @@ -228,6 +235,10 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { mLocalMediaManager = spy(mMediaSwitchingController.mLocalMediaManager); when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); mMediaSwitchingController.mLocalMediaManager = mLocalMediaManager; + mMediaSwitchingController.mInputRouteManager = + new InputRouteManager(mContext, mAudioManager); + mInputRouteManager = spy(mMediaSwitchingController.mInputRouteManager); + mMediaSwitchingController.mInputRouteManager = mInputRouteManager; MediaDescription.Builder builder = new MediaDescription.Builder(); builder.setTitle(TEST_SONG); builder.setSubtitle(TEST_ARTIST); @@ -545,9 +556,6 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { // Output devices have changed. mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); - final int MAX_VOLUME = 1; - final int CURRENT_VOLUME = 0; - final boolean IS_VOLUME_FIXED = true; final MediaDevice mediaDevice3 = InputMediaDevice.create( mContext, @@ -555,7 +563,7 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { AudioDeviceInfo.TYPE_BUILTIN_MIC, MAX_VOLUME, CURRENT_VOLUME, - IS_VOLUME_FIXED); + VOLUME_FIXED_TRUE); final MediaDevice mediaDevice4 = InputMediaDevice.create( mContext, @@ -563,7 +571,7 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { AudioDeviceInfo.TYPE_WIRED_HEADSET, MAX_VOLUME, CURRENT_VOLUME, - IS_VOLUME_FIXED); + VOLUME_FIXED_TRUE); final List<MediaDevice> inputDevices = new ArrayList<>(); inputDevices.add(mediaDevice3); inputDevices.add(mediaDevice4); @@ -1312,4 +1320,23 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { verify(mCallback).dismissDialog(); } + + @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) + @Test + public void getSelectedMediaDevice() { + // Mock MediaDevice since none of the output media device constructor is publicly available + // outside of SettingsLib package. + final MediaDevice selectedOutputMediaDevice = mock(MediaDevice.class); + doReturn(Collections.singletonList(selectedOutputMediaDevice)) + .when(mLocalMediaManager) + .getSelectedMediaDevice(); + + // Mock selected input media device. + final MediaDevice selectedInputMediaDevice = mock(MediaDevice.class); + doReturn(selectedInputMediaDevice).when(mInputRouteManager).getSelectedInputDevice(); + + List<MediaDevice> selectedMediaDevices = mMediaSwitchingController.getSelectedMediaDevice(); + assertThat(selectedMediaDevices) + .containsExactly(selectedOutputMediaDevice, selectedInputMediaDevice); + } } |