diff options
| author | 2023-06-22 08:12:36 +0000 | |
|---|---|---|
| committer | 2023-06-22 08:12:36 +0000 | |
| commit | 41af4c9fb7a643a26f96922700be415a40436f8c (patch) | |
| tree | 968c1f9cdfee66cfeb35b6cf6956fa1c5e0e43f5 | |
| parent | c497f8e5091afa36d042426e4491fe6b03445d58 (diff) | |
| parent | f96e49ede69f67ccf8fe6a75196992da8c74a04f (diff) | |
Merge "Fix volume slider not showing when casting in the background" into udc-dev am: f96e49ede6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23726250
Change-Id: I48000dd7f1f7a623eed935040f96593e5c1873b6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 47f648547a88..9185a00da570 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -16,6 +16,7 @@ package com.android.server.media; +import static android.media.MediaRoute2Info.PLAYBACK_VOLUME_FIXED; import static android.media.VolumeProvider.VOLUME_CONTROL_ABSOLUTE; import static android.media.VolumeProvider.VOLUME_CONTROL_FIXED; import static android.media.VolumeProvider.VOLUME_CONTROL_RELATIVE; @@ -44,7 +45,9 @@ import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioSystem; import android.media.MediaMetadata; +import android.media.MediaRouter2Manager; import android.media.Rating; +import android.media.RoutingSessionInfo; import android.media.VolumeProvider; import android.media.session.ISession; import android.media.session.ISessionCallback; @@ -510,7 +513,33 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR @Override public boolean canHandleVolumeKey() { - return mVolumeControlType != VOLUME_CONTROL_FIXED; + if (isPlaybackTypeLocal()) { + return true; + } + if (mVolumeControlType == VOLUME_CONTROL_FIXED) { + return false; + } + if (mVolumeAdjustmentForRemoteGroupSessions) { + return true; + } + // See b/228021646 for details. + MediaRouter2Manager mRouter2Manager = MediaRouter2Manager.getInstance(mContext); + List<RoutingSessionInfo> sessions = mRouter2Manager.getRoutingSessions(mPackageName); + boolean foundNonSystemSession = false; + boolean remoteSessionAllowVolumeAdjustment = true; + for (RoutingSessionInfo session : sessions) { + if (!session.isSystemSession()) { + foundNonSystemSession = true; + if (session.getVolumeHandling() == PLAYBACK_VOLUME_FIXED) { + remoteSessionAllowVolumeAdjustment = false; + } + } + } + if (!foundNonSystemSession) { + Log.d(TAG, "Package " + mPackageName + + " has a remote media session but no associated routing session"); + } + return foundNonSystemSession && remoteSessionAllowVolumeAdjustment; } @Override |