Merge "[Output Switcher] Disable volume control if route is volume_fixed" into tm-dev am: 25639f1b6d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18756771
Change-Id: Ic11bc62236f85cdb873c1dc25b10232251a5d3d8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
index c29d188..c829bc3 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 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 @@
}
/**
+ * 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 e372be3..42e9af8 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 @@
}
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 edc45ee..feed334 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 @@
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();
+ }
}