Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -566,6 +566,11 @@ abstract class HdmiCecLocalDevice { return false; return false; } } reportFeatures(); return true; } protected void reportFeatures() { List<Integer> localDeviceTypes = new ArrayList<>(); List<Integer> localDeviceTypes = new ArrayList<>(); for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) { for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) { localDeviceTypes.add(localDevice.mDeviceType); localDeviceTypes.add(localDevice.mDeviceType); Loading @@ -579,7 +584,6 @@ abstract class HdmiCecLocalDevice { mService.sendCecCommand( mService.sendCecCommand( HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(), HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(), localDeviceTypes, rcProfile, rcFeatures, deviceFeatures)); localDeviceTypes, rcProfile, rcFeatures, deviceFeatures)); return true; } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -791,6 +795,9 @@ abstract class HdmiCecLocalDevice { final void handleAddressAllocated(int logicalAddress, int reason) { final void handleAddressAllocated(int logicalAddress, int reason) { assertRunOnServiceThread(); assertRunOnServiceThread(); mAddress = mPreferredAddress = logicalAddress; mAddress = mPreferredAddress = logicalAddress; if (mService.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { reportFeatures(); } onAddressAllocated(logicalAddress, reason); onAddressAllocated(logicalAddress, reason); setPreferredAddress(logicalAddress); setPreferredAddress(logicalAddress); } } Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +35 −0 Original line number Original line Diff line number Diff line Loading @@ -521,6 +521,41 @@ public class HdmiControlServiceTest { assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures); 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 private static class VolumeControlFeatureCallback extends IHdmiCecVolumeControlFeatureListener.Stub { IHdmiCecVolumeControlFeatureListener.Stub { boolean mCallbackReceived = false; boolean mCallbackReceived = false; Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -566,6 +566,11 @@ abstract class HdmiCecLocalDevice { return false; return false; } } reportFeatures(); return true; } protected void reportFeatures() { List<Integer> localDeviceTypes = new ArrayList<>(); List<Integer> localDeviceTypes = new ArrayList<>(); for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) { for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) { localDeviceTypes.add(localDevice.mDeviceType); localDeviceTypes.add(localDevice.mDeviceType); Loading @@ -579,7 +584,6 @@ abstract class HdmiCecLocalDevice { mService.sendCecCommand( mService.sendCecCommand( HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(), HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(), localDeviceTypes, rcProfile, rcFeatures, deviceFeatures)); localDeviceTypes, rcProfile, rcFeatures, deviceFeatures)); return true; } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -791,6 +795,9 @@ abstract class HdmiCecLocalDevice { final void handleAddressAllocated(int logicalAddress, int reason) { final void handleAddressAllocated(int logicalAddress, int reason) { assertRunOnServiceThread(); assertRunOnServiceThread(); mAddress = mPreferredAddress = logicalAddress; mAddress = mPreferredAddress = logicalAddress; if (mService.getCecVersion() >= HdmiControlManager.HDMI_CEC_VERSION_2_0) { reportFeatures(); } onAddressAllocated(logicalAddress, reason); onAddressAllocated(logicalAddress, reason); setPreferredAddress(logicalAddress); setPreferredAddress(logicalAddress); } } Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +35 −0 Original line number Original line Diff line number Diff line Loading @@ -521,6 +521,41 @@ public class HdmiControlServiceTest { assertThat(mNativeWrapper.getResultMessages()).contains(reportFeatures); 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 private static class VolumeControlFeatureCallback extends IHdmiCecVolumeControlFeatureListener.Stub { IHdmiCecVolumeControlFeatureListener.Stub { boolean mCallbackReceived = false; boolean mCallbackReceived = false; Loading