diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index f37ad5ed70492..ca1abd683d4f3 100755 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -1013,11 +1013,10 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { } @ServiceThreadOnly - void addAvbAudioStatusAction(int targetAddress) { + void startNewAvbAudioStatusAction(int targetAddress) { assertRunOnServiceThread(); - if (!hasAction(AbsoluteVolumeAudioStatusAction.class)) { - addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress)); - } + removeAction(AbsoluteVolumeAudioStatusAction.class); + addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress)); } @ServiceThreadOnly diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index e87ed0a32a972..cede2738cff07 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -4341,12 +4341,9 @@ public class HdmiControlService extends SystemService { switch (systemAudioDeviceInfo.getDeviceFeatures().getSetAudioVolumeLevelSupport()) { case DeviceFeatures.FEATURE_SUPPORTED: if (currentVolumeBehavior != AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE) { - // If we're currently using adjust-only absolute volume behavior, switch to - // full volume behavior until we successfully adopt absolute volume behavior - switchToFullVolumeBehavior(); // Start an action that will call enableAbsoluteVolumeBehavior // once the System Audio device sends - localCecDevice.addAvbAudioStatusAction( + localCecDevice.startNewAvbAudioStatusAction( systemAudioDeviceInfo.getLogicalAddress()); } return; @@ -4358,10 +4355,13 @@ public class HdmiControlService extends SystemService { != AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY) { // If we're currently using absolute volume behavior, switch to full volume // behavior until we successfully adopt adjust-only absolute volume behavior - switchToFullVolumeBehavior(); + if (currentVolumeBehavior == AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE) { + getAudioManager().setDeviceVolumeBehavior(getAvbAudioOutputDevice(), + AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL); + } // Start an action that will call enableAbsoluteVolumeBehavior // once the System Audio device sends - localCecDevice.addAvbAudioStatusAction( + localCecDevice.startNewAvbAudioStatusAction( systemAudioDeviceInfo.getLogicalAddress()); } } else { @@ -4369,7 +4369,9 @@ public class HdmiControlService extends SystemService { } return; case DeviceFeatures.FEATURE_SUPPORT_UNKNOWN: - switchToFullVolumeBehavior(); + if (currentVolumeBehavior == AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE) { + switchToFullVolumeBehavior(); + } localCecDevice.querySetAudioVolumeLevelSupport( systemAudioDeviceInfo.getLogicalAddress()); }