summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xservices/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java35
2 files changed, 45 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index e7f302c1977a..b4fa05464881 100755
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -18,6 +18,7 @@ package com.android.server.hdmi;
import android.annotation.CallSuper;
import android.annotation.Nullable;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.input.InputManager;
@@ -560,10 +561,15 @@ abstract class HdmiCecLocalDevice {
protected abstract List<Integer> getDeviceFeatures();
protected boolean handleGiveFeatures(HdmiCecMessage message) {
- if (mService.getCecVersion() < Constants.VERSION_2_0) {
+ if (mService.getCecVersion() < HdmiControlManager.HDMI_CEC_VERSION_2_0) {
return false;
}
+ reportFeatures();
+ return true;
+ }
+
+ protected void reportFeatures() {
List<Integer> localDeviceTypes = new ArrayList<>();
for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) {
localDeviceTypes.add(localDevice.mDeviceType);
@@ -577,7 +583,6 @@ abstract class HdmiCecLocalDevice {
mService.sendCecCommand(
HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(),
localDeviceTypes, rcProfile, rcFeatures, deviceFeatures));
- return true;
}
@ServiceThreadOnly
@@ -789,6 +794,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 94291aa3994c..859d232dfe53 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;