From a15539ec8ee0265a0fa0e8766d2ae21b3da22879 Mon Sep 17 00:00:00 2001 From: "Kyeongkab.Nam" Date: Fri, 14 Sep 2018 13:55:55 +0900 Subject: [PATCH] CEC: Make TV try to dispatch the message first TV sometimes does not wake up after receiving when connected device starts "One Touch Play" from suspend state. Since CEC message is not dispatched and just buffered. This CL changes to dispatch message first and then buffer message if it fails. Test: run "One Touch Play" from suspend(standby) state. Change-Id: I148a0d3373b5b85c8a4d7b858147e7a6e118b7b4 --- .../server/hdmi/HdmiControlService.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index b06dba9f9627c..268e844a7a0ab 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -303,19 +303,19 @@ public final class HdmiControlService extends SystemService { private final class CecMessageBuffer { private List mBuffer = new ArrayList<>(); - public void bufferMessage(HdmiCecMessage message) { + public boolean bufferMessage(HdmiCecMessage message) { switch (message.getOpcode()) { case Constants.MESSAGE_ACTIVE_SOURCE: bufferActiveSource(message); - break; + return true; case Constants.MESSAGE_IMAGE_VIEW_ON: case Constants.MESSAGE_TEXT_VIEW_ON: bufferImageOrTextViewOn(message); - break; + return true; // Add here if new message that needs to buffer default: // Do not need to buffer messages other than above - break; + return false; } } @@ -869,10 +869,6 @@ public final class HdmiControlService extends SystemService { @ServiceThreadOnly boolean handleCecCommand(HdmiCecMessage message) { assertRunOnServiceThread(); - if (!mAddressAllocated) { - mCecMessageBuffer.bufferMessage(message); - return true; - } int errorCode = mMessageValidator.isValid(message); if (errorCode != HdmiCecMessageValidator.OK) { // We'll not response on the messages with the invalid source or destination @@ -882,7 +878,12 @@ public final class HdmiControlService extends SystemService { } return true; } - return dispatchMessageToLocalDevice(message); + + if (dispatchMessageToLocalDevice(message)) { + return true; + } + + return (!mAddressAllocated) ? mCecMessageBuffer.bufferMessage(message) : false; } void enableAudioReturnChannel(int portId, boolean enabled) {