From da8f97e6e5f39236eeaa8bece27e1ec217bd3785 Mon Sep 17 00:00:00 2001 From: Marvin Ramin Date: Tue, 15 Dec 2020 16:12:11 +0100 Subject: Update HDMI source volume change handling Forward volume keys to HdmiControlManager if the Android device is a HDMI source device and if the volume behavior of the audio device is full volume. The output audio device will be full volume if the Android device is a HDMI source device with a sink that supports HDMI CEC OR if the user selected HDMI CEC as the volume control mechanism. In case the user prefers HDMI CEC, always attempt to send CEC messages, even if the audio sink possibly does not support CEC volume changes. Bug: 172539380 Test: make; test manually Change-Id: I520dbebaf5ed8f1827405c65137d039be8d816e3 --- .../java/com/android/server/audio/AudioService.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index d5759633bf2d..a43f0c6647e1 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -1076,7 +1076,6 @@ public class AudioService extends IAudioService.Stub if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_HDMI_CEC)) { synchronized (mHdmiClientLock) { - mHdmiCecSink = false; mHdmiManager = mContext.getSystemService(HdmiControlManager.class); if (mHdmiManager != null) { mHdmiManager.addHdmiControlStatusChangeListener( @@ -1508,7 +1507,8 @@ public class AudioService extends IAudioService.Stub if (isPlatformTelevision()) { synchronized (mHdmiClientLock) { if (mHdmiManager != null && mHdmiPlaybackClient != null) { - updateHdmiCecSinkLocked(mHdmiCecSink | false); + updateHdmiCecSinkLocked( + mFullVolumeDevices.contains(AudioSystem.DEVICE_OUT_HDMI)); } } } @@ -1518,7 +1518,8 @@ public class AudioService extends IAudioService.Stub if (isPlatformTelevision()) { synchronized (mHdmiClientLock) { if (mHdmiManager != null) { - updateHdmiCecSinkLocked(mHdmiCecSink | false); + updateHdmiCecSinkLocked( + mFullVolumeDevices.contains(AudioSystem.DEVICE_OUT_HDMI)); } } } @@ -2670,8 +2671,7 @@ public class AudioService extends IAudioService.Stub if (adjustVolume) { synchronized (mHdmiClientLock) { if (mHdmiManager != null) { - // mHdmiCecSink true => mHdmiPlaybackClient != null - if (mHdmiCecSink + if (mHdmiPlaybackClient != null && mHdmiCecVolumeControlEnabled && streamTypeAlias == AudioSystem.STREAM_MUSIC // vol change on a full volume device @@ -7825,9 +7825,8 @@ public class AudioService extends IAudioService.Stub @GuardedBy("mHdmiClientLock") private void updateHdmiCecSinkLocked(boolean hdmiCecSink) { - mHdmiCecSink = hdmiCecSink; if (!hasDeviceVolumeBehavior(AudioSystem.DEVICE_OUT_HDMI)) { - if (mHdmiCecSink) { + if (hdmiCecSink) { if (DEBUG_VOL) { Log.d(TAG, "CEC sink: setting HDMI as full vol device"); } @@ -7885,9 +7884,6 @@ public class AudioService extends IAudioService.Stub // Set only when device is a set-top box. @GuardedBy("mHdmiClientLock") private HdmiPlaybackClient mHdmiPlaybackClient; - // true if we are a set-top box, an HDMI sink is connected and it supports CEC. - @GuardedBy("mHdmiClientLock") - private boolean mHdmiCecSink; // Set only when device is an audio system. @GuardedBy("mHdmiClientLock") private HdmiAudioSystemClient mHdmiAudioSystemClient; @@ -8142,7 +8138,6 @@ public class AudioService extends IAudioService.Stub pw.print(" mFixedVolumeDevices="); pw.println(dumpDeviceTypes(mFixedVolumeDevices)); pw.print(" mFullVolumeDevices="); pw.println(dumpDeviceTypes(mFullVolumeDevices)); pw.print(" mExtVolumeController="); pw.println(mExtVolumeController); - pw.print(" mHdmiCecSink="); pw.println(mHdmiCecSink); pw.print(" mHdmiAudioSystemClient="); pw.println(mHdmiAudioSystemClient); pw.print(" mHdmiPlaybackClient="); pw.println(mHdmiPlaybackClient); pw.print(" mHdmiTvClient="); pw.println(mHdmiTvClient); -- cgit v1.2.3-59-g8ed1b