diff options
| -rw-r--r-- | services/core/java/com/android/server/hdmi/SendKeyAction.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/hdmi/SendKeyAction.java b/services/core/java/com/android/server/hdmi/SendKeyAction.java index 40d2583691c6..5ad7fab888fd 100644 --- a/services/core/java/com/android/server/hdmi/SendKeyAction.java +++ b/services/core/java/com/android/server/hdmi/SendKeyAction.java @@ -17,8 +17,10 @@ package com.android.server.hdmi; import static com.android.server.hdmi.HdmiConfig.IRT_MS; +import android.hardware.tv.cec.V1_0.SendMessageResult; import android.util.Slog; import android.view.KeyEvent; +import com.android.server.hdmi.HdmiControlService.SendMessageCallback; /** * Feature action that transmits remote control key command (User Control Press/ @@ -146,8 +148,26 @@ final class SendKeyAction extends HdmiCecFeatureAction { if (cecKeycodeAndParams == null) { return; } - sendCommand(HdmiCecMessageBuilder.buildUserControlPressed(getSourceAddress(), - mTargetAddress, cecKeycodeAndParams)); + // Devices that are not directly connected with audio system device can't detect if the + // audio system device is still plugged in. Framework checks if the volume key forwarding is + // successful or not every time to make sure the System Audio Mode status is still updated. + if (mTargetAddress == Constants.ADDR_AUDIO_SYSTEM + && localDevice().mAddress != Constants.ADDR_TV) { + sendCommand(HdmiCecMessageBuilder.buildUserControlPressed(getSourceAddress(), + mTargetAddress, cecKeycodeAndParams), new SendMessageCallback() { + @Override + public void onSendCompleted(int error) { + if (error != SendMessageResult.SUCCESS) { + HdmiLogger.debug( + "AVR did not respond to <User Control Pressed>"); + localDevice().mService.setSystemAudioActivated(false); + } + } + }); + } else { + sendCommand(HdmiCecMessageBuilder.buildUserControlPressed(getSourceAddress(), + mTargetAddress, cecKeycodeAndParams)); + } } private void sendKeyUp() { |