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

Commit da8f97e6 authored by Marvin Ramin's avatar Marvin Ramin
Browse files

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
parent c8d8b7cd
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -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);