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

Commit ce6cb5eb authored by Shaowei Shen's avatar Shaowei Shen Committed by Automerger Merge Worker
Browse files

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17035624

Change-Id: Ic465ce1413a685bec306871d8459f72267a3246d
parents e05b7c2c 840f212c
Loading
Loading
Loading
Loading
+26 −1
Original line number Original line Diff line number Diff line
@@ -15,13 +15,13 @@
 */
 */
package com.android.settingslib.media;
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_BLUETOOTH_A2DP;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_DOCK;
import static android.media.MediaRoute2Info.TYPE_DOCK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_HDMI;
import static android.media.MediaRoute2Info.TYPE_HDMI;
import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
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_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
import static android.media.MediaRoute2Info.TYPE_UNKNOWN;
import static android.media.MediaRoute2Info.TYPE_UNKNOWN;
@@ -163,6 +163,31 @@ public class InfoMediaManager extends MediaManager {
        return sessionInfos.get(sessionInfos.size() - 1);
        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.
     * Remove a {@code device} from current media.
     *
     *
+9 −1
Original line number Original line 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.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LeAudioProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import com.android.settingslib.bluetooth.LeAudioProfile;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
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
     * Start scan connected MediaDevice
     */
     */
+8 −6
Original line number Original line Diff line number Diff line
@@ -92,7 +92,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
    private final DialogLaunchAnimator mDialogLaunchAnimator;
    private final DialogLaunchAnimator mDialogLaunchAnimator;
    private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>();
    private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>();
    private final boolean mAboveStatusbar;
    private final boolean mAboveStatusbar;
    private final boolean mVolumeAdjustmentForRemoteGroupSessions;
    private final CommonNotifCollection mNotifCollection;
    private final CommonNotifCollection mNotifCollection;
    @VisibleForTesting
    @VisibleForTesting
    final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
    final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
@@ -131,8 +130,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
        mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
        mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
        mUiEventLogger = uiEventLogger;
        mUiEventLogger = uiEventLogger;
        mDialogLaunchAnimator = dialogLaunchAnimator;
        mDialogLaunchAnimator = dialogLaunchAnimator;
        mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
        mColorActiveItem = Utils.getColorStateListDefaultColor(mContext,
        mColorActiveItem = Utils.getColorStateListDefaultColor(mContext,
                R.color.media_dialog_active_item_main_content);
                R.color.media_dialog_active_item_main_content);
        mColorInactiveItem = Utils.getColorStateListDefaultColor(mContext,
        mColorInactiveItem = Utils.getColorStateListDefaultColor(mContext,
@@ -621,10 +618,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
                || features.contains(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK));
                || 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) {
    boolean isVolumeControlEnabled(@NonNull MediaDevice device) {
        // TODO(b/202500642): Also enable volume control for remote non-group sessions.
        return isPlayBackInfoLocal()
        return !isActiveRemoteDevice(device)
                || mLocalMediaManager.isMediaSessionAvailableForVolumeControl();
            || mVolumeAdjustmentForRemoteGroupSessions;
    }
    }


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