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

Commit 71dd32de authored by Tim Peng's avatar Tim Peng Committed by tim peng
Browse files

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
parent 12a838d1
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -26,11 +26,14 @@ import android.content.Intent;
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 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
        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) {
+5 −2
Original line number Diff line number Diff line
@@ -95,7 +95,8 @@ public class MediaOutputGroupSlice implements CustomSliceable {
                        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 @@ public class MediaOutputGroupSlice implements CustomSliceable {
    }

    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 @@ public class MediaOutputGroupSlice implements CustomSliceable {
                    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)
+25 −4
Original line number Diff line number Diff line
@@ -96,7 +96,11 @@ public class MediaOutputSlice implements CustomSliceable {

        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 @@ public class MediaOutputSlice implements CustomSliceable {
        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 @@ public class MediaOutputSlice implements CustomSliceable {
        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 @@ public class MediaOutputSlice implements CustomSliceable {
            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 @@ public class MediaOutputSlice implements CustomSliceable {
        return getWorker() != null
                && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
                && getWorker().getMediaDevices().size() > 0;

    }
}