diff options
| author | 2022-02-16 03:48:36 +0000 | |
|---|---|---|
| committer | 2022-02-16 03:48:36 +0000 | |
| commit | 697788291ba7d74b4c09076eb2ccb4fa55fcc421 (patch) | |
| tree | 70f8bf74d1e1491ad93bc0a02df91adeab78f6ee | |
| parent | 42f26662f6061d846f8282b587fda672e0faba13 (diff) | |
| parent | d1f381a7dba1894b4c06029e305f12feb04483da (diff) | |
Merge "DO NOT MERGE: provide different change in downstream since merge conflict [Output Switcher] Enable volume control for single cast device" into sc-v2-dev
3 files changed, 41 insertions, 6 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index a383c1e2b680..326161b26134 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -164,6 +164,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. * diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index d29d8958dad7..9092024cd457 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -196,6 +196,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 */ public void startScan() { diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 9eaedd753394..0d368fa5fb7f 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -84,7 +84,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { private final SystemUIDialogManager mDialogManager; private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>(); private final boolean mAboveStatusbar; - private final boolean mVolumeAdjustmentForRemoteGroupSessions; private final NotificationEntryManager mNotificationEntryManager; @VisibleForTesting final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); @@ -117,8 +116,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); mDialogManager = dialogManager; } @@ -496,10 +493,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() { |