diff options
| -rwxr-xr-x | services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java | 9 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java | 35 |
2 files changed, 43 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index 1cbbe2dc5b6a..9b3f788d7457 100755 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -566,6 +566,11 @@ abstract class HdmiCecLocalDevice { return false; } + reportFeatures(); + return true; + } + + protected void reportFeatures() { List<Integer> localDeviceTypes = new ArrayList<>(); for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) { localDeviceTypes.add(localDevice.mDeviceType); @@ -579,7 +584,6 @@ abstract class HdmiCecLocalDevice { mService.sendCecCommand( HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(), localDeviceTypes, rcProfile, rcFeatures, deviceFeatures)); - return true; } @ServiceThreadOnly @@ -791,6 +795,9 @@ abstract class HdmiCecLocalDevice { final void handleAddressAllocated(int logicalAddress, int reason) { assertRunOnServiceThread(); mAddress = mPreferredAddress = logicalAddress; + if (mService.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { + reportFeatures(); + } onAddressAllocated(logicalAddress, reason); setPreferredAddress(logicalAddress); } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index 9d767cd94853..819bd01992cb 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -521,6 +521,41 @@ public class HdmiControlServiceTest { assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures); } + @Test + public void initializeCec_14_doesNotBroadcastReportFeatures() { + mNativeWrapper.clearResultMessages(); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_1_4_b); + mHdmiControlService.setControlEnabled(true); + mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); + mTestLooper.dispatchAll(); + + HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures( + Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0, + Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM), + mMyPlaybackDevice.getRcProfile(), mMyPlaybackDevice.getRcFeatures(), + mMyPlaybackDevice.getDeviceFeatures()); + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportFeatures); + } + + @Test + public void initializeCec_20_reportsFeaturesBroadcast() { + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, + HdmiControlManager.HDMI_CEC_VERSION_2_0); + mHdmiControlService.setControlEnabled(true); + mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); + mTestLooper.dispatchAll(); + + HdmiCecMessage reportFeatures = HdmiCecMessageBuilder.buildReportFeatures( + Constants.ADDR_PLAYBACK_1, HdmiControlManager.HDMI_CEC_VERSION_2_0, + Arrays.asList(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM), + mMyPlaybackDevice.getRcProfile(), mMyPlaybackDevice.getRcFeatures(), + mMyPlaybackDevice.getDeviceFeatures()); + assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures); + } + private static class VolumeControlFeatureCallback extends IHdmiCecVolumeControlFeatureListener.Stub { boolean mCallbackReceived = false; |