Hide volume slider in Output Switcher when volume adjustment is restricted

-Check UserManager.DISALLOW_ADJUST_VOLUME
-Hide slider when unsupported

Bug: 153922342
Test: 1.Open CTS-V app > Device Owner Tests
2.install CtsEmptyDeviceOwner.apk -"adb install -r -t CtsEmptyDeviceOwner.apk"
3.enter the command "adb shell dpm set-device-owner com.android.cts.emptydeviceowner/.EmptyDeviceAdmin"
4.push Check device owner button
5.open Policy transparency test and go to Disallow adjust volume > Enable the switch > Open settings.

Change-Id: Iac2793ead6d93d4eaada19c4eec33885d4b97138
diff --git a/src/com/android/settings/media/MediaDeviceUpdateWorker.java b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
index b800c17..c768257 100644
--- a/src/com/android/settings/media/MediaDeviceUpdateWorker.java
+++ b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
@@ -26,11 +26,14 @@
 import android.content.IntentFilter;
 import android.media.AudioManager;
 import android.net.Uri;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.text.TextUtils;
 
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.slices.SliceBackgroundWorker;
+import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.Utils;
 import com.android.settingslib.media.LocalMediaManager;
 import com.android.settingslib.media.MediaDevice;
@@ -214,6 +217,17 @@
         return mPackageName;
     }
 
+    boolean hasAdjustVolumeUserRestriction() {
+        if (RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
+                mContext, UserManager.DISALLOW_ADJUST_VOLUME, UserHandle.myUserId()) != null) {
+            return true;
+        }
+        final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        return um.hasBaseUserRestriction(UserManager.DISALLOW_ADJUST_VOLUME,
+                UserHandle.of(UserHandle.myUserId()));
+
+    }
+
     private class DevicesChangedBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/src/com/android/settings/media/MediaOutputGroupSlice.java b/src/com/android/settings/media/MediaOutputGroupSlice.java
index d60ae22..402eb6b 100644
--- a/src/com/android/settings/media/MediaOutputGroupSlice.java
+++ b/src/com/android/settings/media/MediaOutputGroupSlice.java
@@ -95,7 +95,8 @@
                         GROUP_DEVICES.hashCode() + ACTION_MEDIA_SESSION_OPERATION,
                         ACTION_MEDIA_SESSION_OPERATION),
                 IconCompat.createWithBitmap(emptyBitmap), ListBuilder.ICON_IMAGE, "");
-        if (maxVolume > 0) {    // Add InputRange row
+        if (maxVolume > 0 && !getWorker().hasAdjustVolumeUserRestriction()) {
+            // Add InputRange row
             listBuilder.addInputRange(new ListBuilder.InputRangeBuilder()
                     .setTitleItem(titleIcon, ListBuilder.ICON_IMAGE)
                     .addEndItem(endItemAction)
@@ -119,6 +120,7 @@
     }
 
     private void addRow(ListBuilder listBuilder, List<MediaDevice> mediaDevices, boolean selected) {
+        final boolean adjustVolumeUserRestriction = getWorker().hasAdjustVolumeUserRestriction();
         for (MediaDevice device : mediaDevices) {
             final int maxVolume = device.getMaxVolume();
             final IconCompat titleIcon = Utils.createIconWithDrawable(device.getIcon());
@@ -133,7 +135,8 @@
                     IconCompat.createWithResource(mContext, R.drawable.ic_check_box_anim),
                     "",
                     selected);
-            if (maxVolume > 0) {    // Add InputRange row
+            if (maxVolume > 0 && !adjustVolumeUserRestriction) {
+                // Add InputRange row
                 final ListBuilder.InputRangeBuilder builder = new ListBuilder.InputRangeBuilder()
                         .setTitleItem(titleIcon, ListBuilder.ICON_IMAGE)
                         .setTitle(title)
diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java
index 27960e1..df9538b 100644
--- a/src/com/android/settings/media/MediaOutputSlice.java
+++ b/src/com/android/settings/media/MediaOutputSlice.java
@@ -96,7 +96,11 @@
 
         if (worker.getSelectedMediaDevice().size() > 1) {
             // Insert group item to the first when it is available
-            listBuilder.addInputRange(getGroupRow());
+            if (worker.getSessionVolumeMax() > 0 && !worker.hasAdjustVolumeUserRestriction()) {
+                listBuilder.addInputRange(getGroupSliderRow());
+            } else {
+                listBuilder.addRow(getGroupRow());
+            }
             // Add all other devices
             for (MediaDevice device : devices) {
                 addRow(device, null /* connectedDevice */, listBuilder);
@@ -150,7 +154,7 @@
         return builder;
     }
 
-    private ListBuilder.InputRangeBuilder getGroupRow() {
+    private ListBuilder.InputRangeBuilder getGroupSliderRow() {
         final IconCompat icon = IconCompat.createWithResource(mContext,
                 R.drawable.ic_speaker_group_black_24dp);
         final CharSequence sessionName = getWorker().getSessionName();
@@ -172,6 +176,24 @@
         return builder;
     }
 
+    private ListBuilder.RowBuilder getGroupRow() {
+        final IconCompat icon = IconCompat.createWithResource(mContext,
+                R.drawable.ic_speaker_group_black_24dp);
+        final CharSequence sessionName = getWorker().getSessionName();
+        final CharSequence title = TextUtils.isEmpty(sessionName)
+                ? mContext.getString(R.string.media_output_group) : sessionName;
+        final PendingIntent broadcastAction =
+                getBroadcastIntent(mContext, MEDIA_GROUP_DEVICE, MEDIA_GROUP_DEVICE.hashCode());
+        final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
+                ListBuilder.ICON_IMAGE, title);
+        final ListBuilder.RowBuilder builder = new ListBuilder.RowBuilder()
+                .setTitleItem(icon, ListBuilder.ICON_IMAGE)
+                .setTitle(title)
+                .setPrimaryAction(primarySliceAction)
+                .addEndItem(getEndItemSliceAction());
+        return builder;
+    }
+
     private void addRow(MediaDevice device, MediaDevice connectedDevice, ListBuilder listBuilder) {
         if (connectedDevice != null && TextUtils.equals(device.getId(), connectedDevice.getId())) {
             final String title = device.getName();
@@ -182,7 +204,7 @@
             final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
                     ListBuilder.ICON_IMAGE, title);
 
-            if (device.getMaxVolume() > 0) {
+            if (device.getMaxVolume() > 0 && !getWorker().hasAdjustVolumeUserRestriction()) {
                 final ListBuilder.InputRangeBuilder builder = new ListBuilder.InputRangeBuilder()
                         .setTitleItem(icon, ListBuilder.ICON_IMAGE)
                         .setTitle(title)
@@ -368,6 +390,5 @@
         return getWorker() != null
                 && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
                 && getWorker().getMediaDevices().size() > 0;
-
     }
 }