Fix OTT devices not reacting to messages in Standby

Reverts most changes to Playback device message handling in Standby from
aosp/1970899, to fix CTS tests and avoid unexpected behavior changes.

aosp/1970899 has all devices use HdmiCecStandbyModeHandler, which causes
Playback devices to ignore or <Feature Abort> certain messages in
standby. This caused CTS failures for cect_hf_4_6_7 and
cect_11_2_2_1 (b/226366076).

This CL moves all behavior-affecting handlers except for <User Control
Pressed> (required for the fix in aosp/1970899) back to TVs only: it is
safer to preserve the original behavior until there is a reason to change it.

Test: atest CtsHdmiCecHostTestCases
Bug: 226366076
Change-Id: I888da78e27503ca0dada29e8a8b1f3d3fe03a608
This commit is contained in:
Yan Han
2022-04-01 15:23:04 +02:00
parent d690893b54
commit 082b4a8bdb

View File

@@ -83,7 +83,9 @@ public final class HdmiCecStandbyModeHandler {
private final HdmiCecLocalDevice mDevice;
private final SparseArray<CecMessageHandler> mCecMessageHandlers = new SparseArray<>();
private final CecMessageHandler mDefaultHandler = new Aborter(
private final CecMessageHandler mDefaultHandler;
private final CecMessageHandler mAborterUnrecognizedOpcode = new Aborter(
Constants.ABORT_UNRECOGNIZED_OPCODE);
private final CecMessageHandler mAborterIncorrectMode = new Aborter(
Constants.ABORT_NOT_IN_CORRECT_MODE);
@@ -95,6 +97,10 @@ public final class HdmiCecStandbyModeHandler {
mUserControlProcessedHandler = new UserControlProcessedHandler();
private void addCommonHandlers() {
addHandler(Constants.MESSAGE_USER_CONTROL_PRESSED, mUserControlProcessedHandler);
}
private void addTvHandlers() {
addHandler(Constants.MESSAGE_ACTIVE_SOURCE, mBystander);
addHandler(Constants.MESSAGE_REQUEST_ACTIVE_SOURCE, mBystander);
addHandler(Constants.MESSAGE_ROUTING_CHANGE, mBystander);
@@ -118,17 +124,13 @@ public final class HdmiCecStandbyModeHandler {
addHandler(Constants.MESSAGE_REPORT_POWER_STATUS, mBypasser);
addHandler(Constants.MESSAGE_GIVE_FEATURES, mBypasser);
addHandler(Constants.MESSAGE_USER_CONTROL_PRESSED, mUserControlProcessedHandler);
addHandler(Constants.MESSAGE_GIVE_DEVICE_POWER_STATUS, mBypasser);
addHandler(Constants.MESSAGE_ABORT, mBypasser);
addHandler(Constants.MESSAGE_GET_CEC_VERSION, mBypasser);
addHandler(Constants.MESSAGE_VENDOR_COMMAND_WITH_ID, mAborterIncorrectMode);
addHandler(Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE, mAborterIncorrectMode);
}
private void addTvHandlers() {
addHandler(Constants.MESSAGE_IMAGE_VIEW_ON, mAutoOnHandler);
addHandler(Constants.MESSAGE_TEXT_VIEW_ON, mAutoOnHandler);
@@ -153,6 +155,9 @@ public final class HdmiCecStandbyModeHandler {
addCommonHandlers();
if (mDevice.getType() == HdmiDeviceInfo.DEVICE_TV) {
addTvHandlers();
mDefaultHandler = mAborterUnrecognizedOpcode;
} else {
mDefaultHandler = mBypasser;
}
}