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

Commit 747ee9cc authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge "Clean up group volume adjustment disablement flag" into main

parents a6b78746 c026d1b3
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -2309,10 +2309,6 @@
         spatial audio is enabled for a newly connected audio device -->
    <bool name="config_spatial_audio_head_tracking_enabled_default">false</bool>

    <!-- Flag indicating whether platform level volume adjustments are enabled for remote sessions
         on grouped devices. -->
    <bool name="config_volumeAdjustmentForRemoteGroupSessions">true</bool>

    <!-- Flag indicating current media Output Switcher version. -->
    <integer name="config_mediaOutputSwitchDialogVersion">1</integer>

+0 −2
Original line number Diff line number Diff line
@@ -5102,8 +5102,6 @@

  <java-symbol type="dimen" name="config_wallpaperDimAmount" />

  <java-symbol type="bool" name="config_volumeAdjustmentForRemoteGroupSessions" />

  <java-symbol type="integer" name="config_mediaOutputSwitchDialogVersion" />

  <!-- List of shared library packages that should be loaded by the classloader after the
+1 −26
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -57,8 +56,6 @@ public final class RoutingSessionInfo implements Parcelable {
                }
            };

    private static final String TAG = "RoutingSessionInfo";

    private static final String KEY_GROUP_ROUTE = "androidx.mediarouter.media.KEY_GROUP_ROUTE";
    private static final String KEY_VOLUME_HANDLING = "volumeHandling";

@@ -142,15 +139,7 @@ public final class RoutingSessionInfo implements Parcelable {
        mVolume = builder.mVolume;

        mIsSystemSession = builder.mIsSystemSession;

        boolean volumeAdjustmentForRemoteGroupSessions = Resources.getSystem().getBoolean(
                com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
        mVolumeHandling =
                defineVolumeHandling(
                        mIsSystemSession,
                        builder.mVolumeHandling,
                        mSelectedRoutes,
                        volumeAdjustmentForRemoteGroupSessions);
        mVolumeHandling = builder.mVolumeHandling;

        mControlHints = updateVolumeHandlingInHints(builder.mControlHints, mVolumeHandling);
        mTransferReason = builder.mTransferReason;
@@ -207,20 +196,6 @@ public final class RoutingSessionInfo implements Parcelable {
        return controlHints;
    }

    @MediaRoute2Info.PlaybackVolume
    private static int defineVolumeHandling(
            boolean isSystemSession,
            @MediaRoute2Info.PlaybackVolume int volumeHandling,
            List<String> selectedRoutes,
            boolean volumeAdjustmentForRemoteGroupSessions) {
        if (!isSystemSession
                && !volumeAdjustmentForRemoteGroupSessions
                && selectedRoutes.size() > 1) {
            return MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
        }
        return volumeHandling;
    }

    @NonNull
    private static String ensureString(@Nullable String str) {
        return str != null ? str : "";
+0 −22
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.mediaroutertest;

import static com.google.common.truth.Truth.assertThat;

import android.content.res.Resources;
import android.media.MediaRoute2Info;
import android.media.RoutingSessionInfo;

import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -95,24 +93,4 @@ public class RoutingSessionInfoTest {
        assertThat(sessionInfoWithProviderId2.getTransferableRoutes())
                .isEqualTo(sessionInfoWithProviderId.getTransferableRoutes());
    }

    @Test
    public void testGetVolumeHandlingGroupSession() {
        RoutingSessionInfo sessionInfo = new RoutingSessionInfo.Builder(
                TEST_ID, TEST_CLIENT_PACKAGE_NAME)
                .setName(TEST_NAME)
                .addSelectedRoute(TEST_ROUTE_ID_0)
                .addSelectedRoute(TEST_ROUTE_ID_2)
                .setVolumeHandling(MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE)
                .build();

        boolean volumeAdjustmentForRemoteGroupSessions = Resources.getSystem().getBoolean(
                com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);

        int expectedResult = volumeAdjustmentForRemoteGroupSessions
                ? MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE :
                MediaRoute2Info.PLAYBACK_VOLUME_FIXED;

        assertThat(sessionInfo.getVolumeHandling()).isEqualTo(expectedResult);
    }
}
+17 −62
Original line number Diff line number Diff line
@@ -37,11 +37,8 @@ import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.IAudioService;
import android.media.IVolumeController;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo;
import android.media.VolumePolicy;
import android.media.session.MediaController;
import android.media.session.MediaController.PlaybackInfo;
import android.media.session.MediaSession.Token;
import android.net.Uri;
@@ -88,7 +85,6 @@ import dalvik.annotation.optimization.NeverCompile;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@@ -217,7 +213,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
                VolumeDialogControllerImpl.class.getSimpleName());
        mWorker = new W(mWorkerLooper);
        mRouter2Manager = MediaRouter2Manager.getInstance(mContext);
        mMediaSessionsCallbacksW = new MediaSessionsCallbacks(mContext);
        mMediaSessionsCallbacksW = new MediaSessionsCallbacks();
        mMediaSessions = createMediaSessions(mContext, mWorkerLooper, mMediaSessionsCallbacksW);
        mAudioSharingInteractor = audioSharingInteractor;
        mJavaAdapter = javaAdapter;
@@ -1360,16 +1356,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
        private final HashMap<Token, Integer> mRemoteStreams = new HashMap<>();

        private int mNextStream = DYNAMIC_STREAM_REMOTE_START_INDEX;
        private final boolean mVolumeAdjustmentForRemoteGroupSessions;

        public MediaSessionsCallbacks(Context context) {
            mVolumeAdjustmentForRemoteGroupSessions = context.getResources().getBoolean(
                    com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
        }

        @Override
        public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) {
            if (showForSession(token)) {
                addStream(token, "onRemoteUpdate");

                int stream = 0;
@@ -1397,11 +1386,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
                    mCallbacks.onStateChanged(mState);
                }
        }
        }

        @Override
        public void onRemoteVolumeChanged(Token token, int flags) {
            if (showForSession(token)) {
                addStream(token, "onRemoteVolumeChanged");
                int stream = 0;
                synchronized (mRemoteStreams) {
@@ -1421,16 +1408,17 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
                    onShowRequestedW(Events.SHOW_REASON_REMOTE_VOLUME_CHANGED);
                }
        }
        }

        @Override
        public void onRemoteRemoved(Token token) {
            if (showForSession(token)) {
                int stream = 0;
            int stream;
            synchronized (mRemoteStreams) {
                if (!mRemoteStreams.containsKey(token)) {
                        Log.d(TAG, "onRemoteRemoved: stream doesn't exist, "
                                + "aborting remote removed for token:" + token.toString());
                    Log.d(
                            TAG,
                            "onRemoteRemoved: stream doesn't exist, "
                                    + "aborting remote removed for token:"
                                    + token.toString());
                    return;
                }
                stream = mRemoteStreams.get(token);
@@ -1441,7 +1429,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
            }
            mCallbacks.onStateChanged(mState);
        }
        }

        public void setStreamVolume(int stream, int level) {
            final Token token = findToken(stream);
@@ -1449,40 +1436,8 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
                Log.w(TAG, "setStreamVolume: No token found for stream: " + stream);
                return;
            }
            if (showForSession(token)) {
            mMediaSessions.setVolume(token, level);
        }
        }

        private boolean showForSession(Token token) {
            if (mVolumeAdjustmentForRemoteGroupSessions) {
                if (DEBUG) {
                    Log.d(TAG, "Volume adjustment for remote group sessions allowed,"
                            + " showForSession: true");
                }
                return true;
            }
            MediaController ctr = new MediaController(mContext, token);
            String packageName = ctr.getPackageName();
            List<RoutingSessionInfo> sessions =
                    mRouter2Manager.getRoutingSessions(packageName);
            if (DEBUG) {
                Log.d(TAG, "Found " + sessions.size() + " routing sessions for package name "
                        + packageName);
            }
            for (RoutingSessionInfo session : sessions) {
                if (DEBUG) {
                    Log.d(TAG, "Found routingSessionInfo: " + session);
                }
                if (!session.isSystemSession()
                        && session.getVolumeHandling() != MediaRoute2Info.PLAYBACK_VOLUME_FIXED) {
                    return true;
                }
            }

            Log.d(TAG, "No routing session for " + packageName);
            return false;
        }

        private Token findToken(int stream) {
            synchronized (mRemoteStreams) {
Loading