From 473119fdc36340f833e4b755ae7f50a6914e0a24 Mon Sep 17 00:00:00 2001 From: Jungshik Jang Date: Wed, 27 Aug 2014 16:43:22 +0900 Subject: [PATCH] Allow broadcast for . AVR may broadcst to start system audio mode. But we do handle direct message case. Bug: 17292360 Change-Id: I9111f8122d58b31f3801e4e78f283db65e79330b --- .../server/hdmi/HdmiCecLocalDeviceTv.java | 19 +++++++++++-------- .../android/server/hdmi/HdmiCecMessage.java | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 1ee4c6c62c007..cd56cfc4fc857 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -119,6 +119,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // other CEC devices since they might not have logical address. private final ArraySet mCecSwitches = new ArraySet(); + private final HdmiLogger mSafeLogger = new HdmiLogger(TAG); + HdmiCecLocalDeviceTv(HdmiControlService service) { super(service, HdmiDeviceInfo.DEVICE_TV); mPrevPortId = Constants.INVALID_PORT_ID; @@ -698,6 +700,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // # Seq 25 void setSystemAudioMode(boolean on, boolean updateSetting) { + mSafeLogger.debug(String.format("System Audio Mode change[old:%b new:%b]", + mSystemAudioActivated, on)); + if (updateSetting) { mService.writeBooleanSetting(Global.HDMI_SYSTEM_AUDIO_ENABLED, on); } @@ -711,7 +716,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } private void updateAudioManagerForSystemAudio(boolean on) { - // TODO: remove output device, once update AudioManager api. mService.getAudioManager().setHdmiSystemAudioSupported(on); } @@ -931,6 +935,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { protected boolean handleSetSystemAudioMode(HdmiCecMessage message) { assertRunOnServiceThread(); if (!isMessageForSystemAudio(message)) { + mSafeLogger.warning("Invalid message:" + message); return false; } SystemAudioActionFromAvr action = new SystemAudioActionFromAvr(this, @@ -944,6 +949,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { protected boolean handleSystemAudioModeStatus(HdmiCecMessage message) { assertRunOnServiceThread(); if (!isMessageForSystemAudio(message)) { + mSafeLogger.warning("Invalid message:" + message); return false; } setSystemAudioMode(HdmiUtils.parseCommandParamSystemAudioStatus(message), true); @@ -992,13 +998,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } private boolean isMessageForSystemAudio(HdmiCecMessage message) { - if (message.getSource() != Constants.ADDR_AUDIO_SYSTEM - || message.getDestination() != Constants.ADDR_TV - || getAvrDeviceInfo() == null) { - Slog.w(TAG, "Skip abnormal CecMessage: " + message); - return false; - } - return true; + return message.getSource() == Constants.ADDR_AUDIO_SYSTEM + && (message.getDestination() == Constants.ADDR_TV + || message.getDestination() == Constants.ADDR_BROADCAST) + && getAvrDeviceInfo() != null; } /** diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java index 23fb0998d8cd3..fd0ff9d22bf86 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java @@ -160,7 +160,7 @@ public final class HdmiCecMessage { case Constants.MESSAGE_GIVE_AUDIO_STATUS: return "Give Audio Status"; case Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE: - return "System Audio Mode"; + return "Set System Audio Mode"; case Constants.MESSAGE_REPORT_AUDIO_STATUS: return "Report Audio Status"; case Constants.MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS: