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

Commit db86b2ef authored by tim peng's avatar tim peng Committed by Android (Google) Code Review
Browse files

Merge "Hide volume slider in Output Switcher when volume adjustment is restricted" into rvc-dev

parents 9674276b 71dd32de
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;

    }
}