Merge changes I12c7de63,I241cf0fc into sc-dev

* changes:
  Update handling of Remote Control Passthrough messages
  Remove RECORD_TV_SCREEN handling from playback device
This commit is contained in:
TreeHugger Robot
2021-02-16 14:17:41 +00:00
committed by Android (Google) Code Review
4 changed files with 69 additions and 8 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) {
@@ -788,10 +789,7 @@ abstract class HdmiCecLocalDevice {
}
protected boolean handleRecordTvScreen(HdmiCecMessage message) {
// The default behavior of <Record TV Screen> is replying <Feature Abort> with
// "Cannot provide source".
mService.maySendFeatureAbortCommand(message, Constants.ABORT_CANNOT_PROVIDE_SOURCE);
return true;
return false;
}
protected boolean handleTimerClearedStatus(HdmiCecMessage message) {

View File

@@ -1079,7 +1079,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
message.getSource(),
HdmiControlManager.ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS);
}
return super.handleRecordTvScreen(message);
// The default behavior of <Record TV Screen> is replying <Feature Abort> with
// "Cannot provide source".
mService.maySendFeatureAbortCommand(message, Constants.ABORT_CANNOT_PROVIDE_SOURCE);
return true;
}
int recorderAddress = message.getSource();

View File

@@ -15,6 +15,7 @@
*/
package com.android.server.hdmi;
import static com.android.server.hdmi.Constants.ABORT_UNRECOGNIZED_OPCODE;
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_INVALID;
@@ -49,6 +50,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
@SmallTest
@Presubmit
@@ -1586,4 +1588,46 @@ public class HdmiCecLocalDevicePlaybackTest {
assertThat(features.contains(
Constants.RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU)).isFalse();
}
@Test
public void doesNotSupportRecordTvScreen() {
HdmiCecMessage recordTvScreen = new HdmiCecMessage(ADDR_TV, mPlaybackLogicalAddress,
Constants.MESSAGE_RECORD_TV_SCREEN, HdmiCecMessage.EMPTY_PARAM);
mNativeWrapper.onCecMessage(recordTvScreen);
mTestLooper.dispatchAll();
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
mPlaybackLogicalAddress, ADDR_TV, Constants.MESSAGE_RECORD_TV_SCREEN,
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);
}
}

View File

@@ -15,9 +15,11 @@
*/
package com.android.server.hdmi;
import static com.android.server.hdmi.Constants.ABORT_UNRECOGNIZED_OPCODE;
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_RECORDER_1;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
@@ -484,4 +486,18 @@ public class HdmiCecLocalDeviceTvTest {
ADDR_AUDIO_SYSTEM);
assertThat(mNativeWrapper.getResultMessages()).contains(reportArcInitiated);
}
@Test
public void supportsRecordTvScreen() {
HdmiCecMessage recordTvScreen = new HdmiCecMessage(ADDR_RECORDER_1, mTvLogicalAddress,
Constants.MESSAGE_RECORD_TV_SCREEN, HdmiCecMessage.EMPTY_PARAM);
mNativeWrapper.onCecMessage(recordTvScreen);
mTestLooper.dispatchAll();
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
mTvLogicalAddress, ADDR_RECORDER_1, Constants.MESSAGE_RECORD_TV_SCREEN,
ABORT_UNRECOGNIZED_OPCODE);
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(featureAbort);
}
}