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:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user