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

Commit 840f212c authored by Shaowei Shen's avatar Shaowei Shen Committed by Android (Google) Code Review
Browse files

Merge "[Output Switcher] Enable Volume control for single cast device" into tm-dev

parents b4620e28 45fc96a5
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -15,13 +15,13 @@
 */
package com.android.settingslib.media;

import static android.media.MediaRoute2Info.TYPE_BLE_HEADSET;
import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_DOCK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_HDMI;
import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
import static android.media.MediaRoute2Info.TYPE_BLE_HEADSET;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
import static android.media.MediaRoute2Info.TYPE_UNKNOWN;
@@ -163,6 +163,31 @@ public class InfoMediaManager extends MediaManager {
        return sessionInfos.get(sessionInfos.size() - 1);
    }

    boolean isRoutingSessionAvailableForVolumeControl() {
        if (mVolumeAdjustmentForRemoteGroupSessions) {
            return true;
        }
        List<RoutingSessionInfo> sessions =
                mRouterManager.getRoutingSessions(mPackageName);
        boolean foundNonSystemSession = false;
        boolean isGroup = false;
        for (RoutingSessionInfo session : sessions) {
            if (!session.isSystemSession()) {
                foundNonSystemSession = true;
                int selectedRouteCount = session.getSelectedRoutes().size();
                if (selectedRouteCount > 1) {
                    isGroup = true;
                    break;
                }
            }
        }
        if (!foundNonSystemSession) {
            Log.d(TAG, "No routing session for " + mPackageName);
            return false;
        }
        return !isGroup;
    }

    /**
     * Remove a {@code device} from current media.
     *
+9 −1
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LeAudioProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import com.android.settingslib.bluetooth.LeAudioProfile;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -197,6 +197,14 @@ public class LocalMediaManager implements BluetoothCallback {
        }
    }

    /**
     * Returns if the media session is available for volume control.
     * @return True if this media session is available for colume control, false otherwise.
     */
    public boolean isMediaSessionAvailableForVolumeControl() {
        return mInfoMediaManager.isRoutingSessionAvailableForVolumeControl();
    }

    /**
     * Start scan connected MediaDevice
     */
+8 −6
Original line number Diff line number Diff line
@@ -92,7 +92,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
    private final DialogLaunchAnimator mDialogLaunchAnimator;
    private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>();
    private final boolean mAboveStatusbar;
    private final boolean mVolumeAdjustmentForRemoteGroupSessions;
    private final CommonNotifCollection mNotifCollection;
    @VisibleForTesting
    final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
@@ -131,8 +130,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
        mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
        mUiEventLogger = uiEventLogger;
        mDialogLaunchAnimator = dialogLaunchAnimator;
        mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
        mColorActiveItem = Utils.getColorStateListDefaultColor(mContext,
                R.color.media_dialog_active_item_main_content);
        mColorInactiveItem = Utils.getColorStateListDefaultColor(mContext,
@@ -621,10 +618,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
                || features.contains(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK));
    }

    private boolean isPlayBackInfoLocal() {
        return mMediaController.getPlaybackInfo() != null
                && mMediaController.getPlaybackInfo().getPlaybackType()
                == MediaController.PlaybackInfo.PLAYBACK_TYPE_LOCAL;
    }

    boolean isVolumeControlEnabled(@NonNull MediaDevice device) {
        // TODO(b/202500642): Also enable volume control for remote non-group sessions.
        return !isActiveRemoteDevice(device)
            || mVolumeAdjustmentForRemoteGroupSessions;
        return isPlayBackInfoLocal()
                || mLocalMediaManager.isMediaSessionAvailableForVolumeControl();
    }

    private final MediaController.Callback mCb = new MediaController.Callback() {