Update handling of Remote Control Passthrough messages

Never respond <Feature Abort>[Unrecognized Opcode] in cases where <User
Control Pressed> or <User Control Released> cannot be handled.

Bug: 180103617
Test: atest com.android.server.hdmi
Change-Id: I12c7de639ac31a9ae381c3706f64b53e3e92d71c
This commit is contained in:
Marvin Ramin
2021-02-15 14:58:44 +01:00
parent e3cad32814
commit d4a3a5ced5
2 changed files with 33 additions and 3 deletions

View File

@@ -654,7 +654,9 @@ abstract class HdmiCecLocalDevice {
FOLLOWER_SAFETY_TIMEOUT);
return true;
}
return false;
mService.maySendFeatureAbortCommand(message, Constants.ABORT_INVALID_OPERAND);
return true;
}
@ServiceThreadOnly
@@ -666,9 +668,8 @@ abstract class HdmiCecLocalDevice {
final long upTime = SystemClock.uptimeMillis();
injectKeyEvent(upTime, KeyEvent.ACTION_UP, mLastKeycode, 0);
mLastKeycode = HdmiCecKeycode.UNSUPPORTED_KEYCODE;
return true;
}
return false;
return true;
}
static void injectKeyEvent(long time, int action, int keycode, int repeat) {

View File

@@ -50,6 +50,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
@SmallTest
@Presubmit
@@ -1601,4 +1602,32 @@ public class HdmiCecLocalDevicePlaybackTest {
ABORT_UNRECOGNIZED_OPCODE);
assertThat(mNativeWrapper.getResultMessages()).contains(featureAbort);
}
@Test
public void shouldHandleUserControlPressedAndReleased() {
HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed(
ADDR_TV, mPlaybackLogicalAddress,
HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP);
HdmiCecMessage userControlReleased = HdmiCecMessageBuilder.buildUserControlReleased(
ADDR_TV, mPlaybackLogicalAddress);
mNativeWrapper.onCecMessage(userControlPressed);
mTestLooper.dispatchAll();
// Move past the follower safety timeout
mTestLooper.moveTimeForward(TimeUnit.SECONDS.toMillis(2));
mTestLooper.dispatchAll();
mNativeWrapper.onCecMessage(userControlReleased);
mTestLooper.dispatchAll();
HdmiCecMessage featureAbortPressed = HdmiCecMessageBuilder.buildFeatureAbortCommand(
mPlaybackLogicalAddress, ADDR_TV, Constants.MESSAGE_USER_CONTROL_PRESSED,
ABORT_UNRECOGNIZED_OPCODE);
HdmiCecMessage featureAbortReleased = HdmiCecMessageBuilder.buildFeatureAbortCommand(
mPlaybackLogicalAddress, ADDR_TV, Constants.MESSAGE_USER_CONTROL_RELEASED,
ABORT_UNRECOGNIZED_OPCODE);
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(featureAbortPressed);
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(featureAbortReleased);
}
}