diff options
3 files changed, 38 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index c29d18872ad0..c829bc316246 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -33,6 +33,7 @@ import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.Drawable; import android.media.MediaRoute2Info; @@ -268,6 +269,20 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { } /** + * Checks if route's volume is fixed, if true, we should disable volume control for the device. + * + * @return route for this device is fixed. + */ + @SuppressLint("NewApi") + public boolean isVolumeFixed() { + if (mRouteInfo == null) { + Log.w(TAG, "RouteInfo is empty, regarded as volume fixed."); + return true; + } + return mRouteInfo.getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED; + } + + /** * Transfer MediaDevice for media * * @return result of transfer media diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index e372be3d18fc..42e9af846322 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -932,8 +932,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, } boolean isVolumeControlEnabled(@NonNull MediaDevice device) { - return isPlayBackInfoLocal() - || device.getDeviceType() != MediaDevice.MediaDeviceType.TYPE_CAST_GROUP_DEVICE; + return (isPlayBackInfoLocal() + || device.getDeviceType() != MediaDevice.MediaDeviceType.TYPE_CAST_GROUP_DEVICE) + && !device.isVolumeFixed(); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index edc45ee46dc2..feed3347f3e2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -571,4 +571,24 @@ public class MediaOutputControllerTest extends SysuiTestCase { assertThat(mMediaOutputController.getNotificationIcon()).isNull(); } + + @Test + public void isVolumeControlEnabled_isCastWithVolumeFixed_returnsFalse() { + when(mMediaDevice1.getDeviceType()).thenReturn( + MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE); + + when(mMediaDevice1.isVolumeFixed()).thenReturn(true); + + assertThat(mMediaOutputController.isVolumeControlEnabled(mMediaDevice1)).isFalse(); + } + + @Test + public void isVolumeControlEnabled_isCastWithVolumeNotFixed_returnsTrue() { + when(mMediaDevice1.getDeviceType()).thenReturn( + MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE); + + when(mMediaDevice1.isVolumeFixed()).thenReturn(false); + + assertThat(mMediaOutputController.isVolumeControlEnabled(mMediaDevice1)).isTrue(); + } } |