Loading services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java +15 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.hdmi; */ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPlaybackClient; import android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback; import android.hardware.hdmi.IHdmiControlCallback; Loading Loading @@ -65,6 +66,20 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction { @Override boolean start() { HdmiControlService service = localDevice().mService; if (service.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { HdmiDeviceInfo deviceInfo = service.getHdmiCecNetwork().getCecDeviceInfo( mTargetAddress); if (deviceInfo != null && deviceInfo.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { int powerStatus = deviceInfo.getDevicePowerStatus(); if (powerStatus != HdmiControlManager.POWER_STATUS_UNKNOWN) { invokeCallback(powerStatus); finish(); return true; } } } queryDevicePowerStatus(); mState = STATE_WAITING_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); Loading services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java +73 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.hdmi; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; Loading @@ -28,6 +29,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; Loading Loading @@ -214,4 +216,75 @@ public class DevicePowerStatusActionTest { verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_UNKNOWN); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_1_4() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(giveDevicePowerStatus); HdmiCecMessage response = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, mPlaybackDevice.mAddress, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(response); mTestLooper.dispatchAll(); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_2_0() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV); mNativeWrapper.onCecMessage(reportPhysicalAddress); mTestLooper.dispatchAll(); HdmiCecMessage reportPowerStatusBroadcast = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, ADDR_BROADCAST, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(reportPowerStatusBroadcast); mTestLooper.dispatchAll(); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(giveDevicePowerStatus); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_2_0_unknown() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV); mNativeWrapper.onCecMessage(reportPhysicalAddress); mTestLooper.dispatchAll(); HdmiCecMessage reportPowerStatusBroadcast = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, ADDR_BROADCAST, HdmiControlManager.POWER_STATUS_UNKNOWN); mNativeWrapper.onCecMessage(reportPowerStatusBroadcast); mTestLooper.dispatchAll(); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(giveDevicePowerStatus); HdmiCecMessage response = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, mPlaybackDevice.mAddress, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(response); mTestLooper.dispatchAll(); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } } Loading
services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java +15 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.hdmi; */ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPlaybackClient; import android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback; import android.hardware.hdmi.IHdmiControlCallback; Loading Loading @@ -65,6 +66,20 @@ final class DevicePowerStatusAction extends HdmiCecFeatureAction { @Override boolean start() { HdmiControlService service = localDevice().mService; if (service.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { HdmiDeviceInfo deviceInfo = service.getHdmiCecNetwork().getCecDeviceInfo( mTargetAddress); if (deviceInfo != null && deviceInfo.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { int powerStatus = deviceInfo.getDevicePowerStatus(); if (powerStatus != HdmiControlManager.POWER_STATUS_UNKNOWN) { invokeCallback(powerStatus); finish(); return true; } } } queryDevicePowerStatus(); mState = STATE_WAITING_FOR_REPORT_POWER_STATUS; addTimer(mState, HdmiConfig.TIMEOUT_MS); Loading
services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java +73 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.hdmi; import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; Loading @@ -28,6 +29,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; Loading Loading @@ -214,4 +216,75 @@ public class DevicePowerStatusActionTest { verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_UNKNOWN); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_1_4() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(giveDevicePowerStatus); HdmiCecMessage response = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, mPlaybackDevice.mAddress, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(response); mTestLooper.dispatchAll(); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_2_0() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV); mNativeWrapper.onCecMessage(reportPhysicalAddress); mTestLooper.dispatchAll(); HdmiCecMessage reportPowerStatusBroadcast = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, ADDR_BROADCAST, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(reportPowerStatusBroadcast); mTestLooper.dispatchAll(); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(giveDevicePowerStatus); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } @Test public void queryDisplayStatus_localDevice_2_0_targetDevice_2_0_unknown() throws Exception { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV); mNativeWrapper.onCecMessage(reportPhysicalAddress); mTestLooper.dispatchAll(); HdmiCecMessage reportPowerStatusBroadcast = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, ADDR_BROADCAST, HdmiControlManager.POWER_STATUS_UNKNOWN); mNativeWrapper.onCecMessage(reportPowerStatusBroadcast); mTestLooper.dispatchAll(); mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction); mTestLooper.dispatchAll(); HdmiCecMessage giveDevicePowerStatus = HdmiCecMessageBuilder.buildGiveDevicePowerStatus( mPlaybackDevice.mAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(giveDevicePowerStatus); HdmiCecMessage response = HdmiCecMessageBuilder.buildReportPowerStatus( ADDR_TV, mPlaybackDevice.mAddress, HdmiControlManager.POWER_STATUS_STANDBY); mNativeWrapper.onCecMessage(response); mTestLooper.dispatchAll(); verify(mCallbackMock).onComplete(HdmiControlManager.POWER_STATUS_STANDBY); } }