Loading services/core/java/com/android/server/hdmi/DeviceSelectActionFromTv.java +14 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,11 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { @VisibleForTesting static final int STATE_WAIT_FOR_DEVICE_POWER_ON = 3; // State in which we wait for device to complete a possible power state change triggered by // <Set Stream Path>. @VisibleForTesting static final int STATE_WAIT_FOR_POWER_STATE_CHANGE = 4; private final HdmiDeviceInfo mTarget; private final HdmiCecMessage mGivePowerStatus; private final boolean mIsCec20; Loading Loading @@ -100,7 +105,12 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { // Wake-up on <Set Stream Path> was not mandatory before CEC 2.0. // The message is re-sent at the end of the action for devices that don't support 2.0. sendSetStreamPath(); mState = STATE_WAIT_FOR_POWER_STATE_CHANGE; addTimer(mState, HdmiConfig.TIMEOUT_MS); return true; } private void checkForPowerStateChange() { if (!mIsCec20) { queryDevicePowerStatus(); } else { Loading @@ -114,12 +124,11 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { queryDevicePowerStatus(); } else if (targetPowerStatus == HdmiControlManager.POWER_STATUS_ON) { finishWithCallback(HdmiControlManager.RESULT_SUCCESS); return true; return; } } mState = STATE_WAIT_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); return true; } private void queryDevicePowerStatus() { Loading Loading @@ -210,6 +219,9 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { mState = STATE_WAIT_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); break; case STATE_WAIT_FOR_POWER_STATE_CHANGE: checkForPowerStateChange(); break; } } Loading services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1; import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_DEVICE_POWER_ON; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_POWER_STATE_CHANGE; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_REPORT_POWER_STATUS; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -230,11 +231,15 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -249,10 +254,14 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); mTestLooper.dispatchAll(); HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed( ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER); assertThat(mNativeWrapper.getResultMessages()).contains(userControlPressed); Loading @@ -261,6 +270,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_DEVICE_POWER_ON); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -275,8 +285,11 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_DEVICE_POWER_ON); Loading @@ -288,6 +301,7 @@ public class DeviceSelectActionFromTvTest { assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -302,8 +316,11 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_DEVICE_POWER_ON); Loading @@ -316,6 +333,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_REPORT_POWER_STATUS); // Give up getting power status, and just send <Set Stream Path> mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -332,7 +350,10 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -348,11 +369,15 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -369,10 +394,14 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/true); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); mTestLooper.dispatchAll(); HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed( ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(userControlPressed); Loading @@ -381,6 +410,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_DEVICE_POWER_ON); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading Loading
services/core/java/com/android/server/hdmi/DeviceSelectActionFromTv.java +14 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,11 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { @VisibleForTesting static final int STATE_WAIT_FOR_DEVICE_POWER_ON = 3; // State in which we wait for device to complete a possible power state change triggered by // <Set Stream Path>. @VisibleForTesting static final int STATE_WAIT_FOR_POWER_STATE_CHANGE = 4; private final HdmiDeviceInfo mTarget; private final HdmiCecMessage mGivePowerStatus; private final boolean mIsCec20; Loading Loading @@ -100,7 +105,12 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { // Wake-up on <Set Stream Path> was not mandatory before CEC 2.0. // The message is re-sent at the end of the action for devices that don't support 2.0. sendSetStreamPath(); mState = STATE_WAIT_FOR_POWER_STATE_CHANGE; addTimer(mState, HdmiConfig.TIMEOUT_MS); return true; } private void checkForPowerStateChange() { if (!mIsCec20) { queryDevicePowerStatus(); } else { Loading @@ -114,12 +124,11 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { queryDevicePowerStatus(); } else if (targetPowerStatus == HdmiControlManager.POWER_STATUS_ON) { finishWithCallback(HdmiControlManager.RESULT_SUCCESS); return true; return; } } mState = STATE_WAIT_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); return true; } private void queryDevicePowerStatus() { Loading Loading @@ -210,6 +219,9 @@ final class DeviceSelectActionFromTv extends HdmiCecFeatureAction { mState = STATE_WAIT_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); break; case STATE_WAIT_FOR_POWER_STATE_CHANGE: checkForPowerStateChange(); break; } } Loading
services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1; import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_DEVICE_POWER_ON; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_POWER_STATE_CHANGE; import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_REPORT_POWER_STATUS; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -230,11 +231,15 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -249,10 +254,14 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); mTestLooper.dispatchAll(); HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed( ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER); assertThat(mNativeWrapper.getResultMessages()).contains(userControlPressed); Loading @@ -261,6 +270,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_DEVICE_POWER_ON); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -275,8 +285,11 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_DEVICE_POWER_ON); Loading @@ -288,6 +301,7 @@ public class DeviceSelectActionFromTvTest { assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -302,8 +316,11 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/false); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_DEVICE_POWER_ON); Loading @@ -316,6 +333,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_REPORT_POWER_STATUS); // Give up getting power status, and just send <Set Stream Path> mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -332,7 +350,10 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -348,11 +369,15 @@ public class DeviceSelectActionFromTvTest { "testDeviceSelect"); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); mNativeWrapper.clearResultMessages(); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading @@ -369,10 +394,14 @@ public class DeviceSelectActionFromTvTest { /*isCec20=*/true); action.start(); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).contains(SET_STREAM_PATH); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_POWER_STATE_CHANGE); action.handleTimerEvent(STATE_WAIT_FOR_POWER_STATE_CHANGE); assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_REPORT_POWER_STATUS); action.processCommand(REPORT_POWER_STATUS_STANDBY); mTestLooper.dispatchAll(); HdmiCecMessage userControlPressed = HdmiCecMessageBuilder.buildUserControlPressed( ADDR_TV, ADDR_PLAYBACK_1, HdmiCecKeycode.CEC_KEYCODE_POWER); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(userControlPressed); Loading @@ -381,6 +410,7 @@ public class DeviceSelectActionFromTvTest { action.handleTimerEvent(STATE_WAIT_FOR_DEVICE_POWER_ON); action.processCommand(REPORT_POWER_STATUS_ON); mTestLooper.dispatchAll(); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(SET_STREAM_PATH); assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS); } Loading