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 Original line Diff line number Diff line
@@ -2309,10 +2309,6 @@
         spatial audio is enabled for a newly connected audio device -->
         spatial audio is enabled for a newly connected audio device -->
    <bool name="config_spatial_audio_head_tracking_enabled_default">false</bool>
    <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. -->
    <!-- Flag indicating current media Output Switcher version. -->
    <integer name="config_mediaOutputSwitchDialogVersion">1</integer>
    <integer name="config_mediaOutputSwitchDialogVersion">1</integer>


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


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


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

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


  <!-- List of shared library packages that should be loaded by the classloader after the
  <!-- List of shared library packages that should be loaded by the classloader after the
+1 −26
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
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_GROUP_ROUTE = "androidx.mediarouter.media.KEY_GROUP_ROUTE";
    private static final String KEY_VOLUME_HANDLING = "volumeHandling";
    private static final String KEY_VOLUME_HANDLING = "volumeHandling";


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


        mIsSystemSession = builder.mIsSystemSession;
        mIsSystemSession = builder.mIsSystemSession;

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


        mControlHints = updateVolumeHandlingInHints(builder.mControlHints, mVolumeHandling);
        mControlHints = updateVolumeHandlingInHints(builder.mControlHints, mVolumeHandling);
        mTransferReason = builder.mTransferReason;
        mTransferReason = builder.mTransferReason;
@@ -207,20 +196,6 @@ public final class RoutingSessionInfo implements Parcelable {
        return controlHints;
        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
    @NonNull
    private static String ensureString(@Nullable String str) {
    private static String ensureString(@Nullable String str) {
        return str != null ? str : "";
        return str != null ? str : "";
+0 −22
Original line number Original line Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.mediaroutertest;


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


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


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -95,24 +93,4 @@ public class RoutingSessionInfoTest {
        assertThat(sessionInfoWithProviderId2.getTransferableRoutes())
        assertThat(sessionInfoWithProviderId2.getTransferableRoutes())
                .isEqualTo(sessionInfoWithProviderId.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 Original line Diff line number Diff line
@@ -37,11 +37,8 @@ import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.AudioSystem;
import android.media.IAudioService;
import android.media.IAudioService;
import android.media.IVolumeController;
import android.media.IVolumeController;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo;
import android.media.VolumePolicy;
import android.media.VolumePolicy;
import android.media.session.MediaController;
import android.media.session.MediaController.PlaybackInfo;
import android.media.session.MediaController.PlaybackInfo;
import android.media.session.MediaSession.Token;
import android.media.session.MediaSession.Token;
import android.net.Uri;
import android.net.Uri;
@@ -88,7 +85,6 @@ import dalvik.annotation.optimization.NeverCompile;


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


        private int mNextStream = DYNAMIC_STREAM_REMOTE_START_INDEX;
        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
        @Override
        public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) {
        public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) {
            if (showForSession(token)) {
                addStream(token, "onRemoteUpdate");
                addStream(token, "onRemoteUpdate");


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


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


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


        public void setStreamVolume(int stream, int level) {
        public void setStreamVolume(int stream, int level) {
            final Token token = findToken(stream);
            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);
                Log.w(TAG, "setStreamVolume: No token found for stream: " + stream);
                return;
                return;
            }
            }
            if (showForSession(token)) {
            mMediaSessions.setVolume(token, level);
            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) {
        private Token findToken(int stream) {
            synchronized (mRemoteStreams) {
            synchronized (mRemoteStreams) {
Loading