diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index f658e33e05307..58a702527e5f5 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -619,8 +619,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } } - addAndStartAction(new NewDeviceAction(this, activeSource.logicalAddress, - activeSource.physicalAddress, deviceType)); + if (!mService.isPowerStandbyOrTransient()) { + addAndStartAction(new NewDeviceAction(this, activeSource.logicalAddress, + activeSource.physicalAddress, deviceType)); + } } private boolean handleNewDeviceAtTheTailOfActivePath(int path) { @@ -796,10 +798,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @ServiceThreadOnly void onNewAvrAdded(HdmiDeviceInfo avr) { assertRunOnServiceThread(); - addAndStartAction(new SystemAudioAutoInitiationAction(this, avr.getLogicalAddress())); - if (isConnected(avr.getPortId()) && isArcFeatureEnabled(avr.getPortId()) - && !hasAction(SetArcTransmissionStateAction.class)) { - startArcAction(true); + if (!mService.isPowerStandbyOrTransient()) { + addAndStartAction(new SystemAudioAutoInitiationAction(this, avr.getLogicalAddress())); + if (isConnected(avr.getPortId()) && isArcFeatureEnabled(avr.getPortId()) + && !hasAction(SetArcTransmissionStateAction.class)) { + startArcAction(true); + } } } @@ -1656,6 +1660,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // Remove recording actions. removeAction(OneTouchRecordAction.class); removeAction(TimerRecordingAction.class); + removeAction(NewDeviceAction.class); disableSystemAudioIfExist(); disableArcIfExist(); @@ -1696,12 +1701,20 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { setArcStatus(false); // Seq #44. - removeAction(RequestArcInitiationAction.class); + removeAllRunningArcAction(); if (!hasAction(RequestArcTerminationAction.class) && isArcEstablished()) { addAndStartAction(new RequestArcTerminationAction(this, avr.getLogicalAddress())); } } + @ServiceThreadOnly + private void removeAllRunningArcAction() { + // Running or pending actions make TV fail to broadcast to connected devices + removeAction(RequestArcTerminationAction.class); + removeAction(RequestArcInitiationAction.class); + removeAction(SetArcTransmissionStateAction.class); + } + @Override @ServiceThreadOnly protected void onStandby(boolean initiatedByCec, int standbyAction) {