Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +8 −0 Original line number Diff line number Diff line Loading @@ -623,6 +623,14 @@ abstract class HdmiCecLocalDevice { return false; } if (isPowerOffOrToggleCommand(message) || isPowerOnOrToggleCommand(message)) { // Power commands should already be handled above. Don't continue and convert the CEC // keycode to Android keycode. // Do not <Feature Abort> as the local device should already be in the correct power // state. return true; } final long downTime = SystemClock.uptimeMillis(); final byte[] params = message.getParams(); final int keycode = HdmiCecKeycode.cecKeycodeAndParamsToAndroidKey(params); Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +108 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ public class HdmiCecLocalDeviceTest { private HdmiCecMessageValidator mMessageValidator; private static byte[] param; private boolean mStandbyMessageReceived; private boolean mWakeupMessageReceived; private boolean isControlEnabled; private int mPowerStatus; Loading @@ -130,10 +131,22 @@ public class HdmiCecLocalDeviceTest { || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON; } @Override boolean isPowerStandbyOrTransient() { return mPowerStatus == HdmiControlManager.POWER_STATUS_STANDBY || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY; } @Override void standby() { mStandbyMessageReceived = true; } @Override void wakeUp() { mWakeupMessageReceived = true; } }; mHdmiControlService.setIoLooper(mTestLooper.getLooper()); mHdmiCecController = HdmiCecController.createWithNativeWrapper( Loading Loading @@ -276,4 +289,99 @@ public class HdmiCecLocalDeviceTest { assertThat(result).isTrue(); } @Test public void handleUserControlPressed_power_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_power_localDeviceOn_shouldNotChangePowerStatus() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerToggleFunction_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerToggleFunction_localDeviceOn_shouldTurnOff() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isTrue(); } @Test public void handleUserControlPressed_powerOnFunction_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOnFunction_localDeviceOn_noPowerStatusChange() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOffFunction_localDeviceStandby_noPowerStatusChange() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOffFunction_localDeviceOn_shouldTurnOff() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isTrue(); } } Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +8 −0 Original line number Diff line number Diff line Loading @@ -623,6 +623,14 @@ abstract class HdmiCecLocalDevice { return false; } if (isPowerOffOrToggleCommand(message) || isPowerOnOrToggleCommand(message)) { // Power commands should already be handled above. Don't continue and convert the CEC // keycode to Android keycode. // Do not <Feature Abort> as the local device should already be in the correct power // state. return true; } final long downTime = SystemClock.uptimeMillis(); final byte[] params = message.getParams(); final int keycode = HdmiCecKeycode.cecKeycodeAndParamsToAndroidKey(params); Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +108 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ public class HdmiCecLocalDeviceTest { private HdmiCecMessageValidator mMessageValidator; private static byte[] param; private boolean mStandbyMessageReceived; private boolean mWakeupMessageReceived; private boolean isControlEnabled; private int mPowerStatus; Loading @@ -130,10 +131,22 @@ public class HdmiCecLocalDeviceTest { || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON; } @Override boolean isPowerStandbyOrTransient() { return mPowerStatus == HdmiControlManager.POWER_STATUS_STANDBY || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY; } @Override void standby() { mStandbyMessageReceived = true; } @Override void wakeUp() { mWakeupMessageReceived = true; } }; mHdmiControlService.setIoLooper(mTestLooper.getLooper()); mHdmiCecController = HdmiCecController.createWithNativeWrapper( Loading Loading @@ -276,4 +289,99 @@ public class HdmiCecLocalDeviceTest { assertThat(result).isTrue(); } @Test public void handleUserControlPressed_power_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_power_localDeviceOn_shouldNotChangePowerStatus() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerToggleFunction_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerToggleFunction_localDeviceOn_shouldTurnOff() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isTrue(); } @Test public void handleUserControlPressed_powerOnFunction_localDeviceInStandby_shouldTurnOn() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isTrue(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOnFunction_localDeviceOn_noPowerStatusChange() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOffFunction_localDeviceStandby_noPowerStatusChange() { mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isFalse(); } @Test public void handleUserControlPressed_powerOffFunction_localDeviceOn_shouldTurnOff() { mPowerStatus = HdmiControlManager.POWER_STATUS_ON; boolean result = mHdmiLocalDevice.handleUserControlPressed( HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION)); assertThat(result).isTrue(); assertThat(mWakeupMessageReceived).isFalse(); assertThat(mStandbyMessageReceived).isTrue(); } }