diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java index 3224d31fd0b0c..652bf5a7a67f8 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java @@ -135,6 +135,12 @@ public class HdmiCecConfig { mStorageAdapter = storageAdapter; mProductConfig = productConfig; mVendorOverride = vendorOverride; + if (mProductConfig == null) { + Slog.i(TAG, "CEC master configuration XML missing."); + } + if (mVendorOverride == null) { + Slog.i(TAG, "CEC OEM configuration override XML missing."); + } } HdmiCecConfig(@NonNull Context context) { @@ -164,6 +170,9 @@ public class HdmiCecConfig { @Nullable private Setting getSetting(@NonNull String name) { + if (mProductConfig == null) { + return null; + } if (mVendorOverride != null) { // First read from the vendor override. for (Setting setting : mVendorOverride.getSetting()) { @@ -245,6 +254,9 @@ public class HdmiCecConfig { * Returns a list of all settings based on the XML metadata. */ public @CecSettingName List getAllSettings() { + if (mProductConfig == null) { + return new ArrayList(); + } List allSettings = new ArrayList(); for (Setting setting : mProductConfig.getSetting()) { allSettings.add(setting.getName()); @@ -256,6 +268,9 @@ public class HdmiCecConfig { * Returns a list of user-modifiable settings based on the XML metadata. */ public @CecSettingName List getUserSettings() { + if (mProductConfig == null) { + return new ArrayList(); + } Set userSettings = new HashSet(); // First read from the product config. for (Setting setting : mProductConfig.getSetting()) { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java index 8fe1f042b120a..a1eb0378a210f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java @@ -63,6 +63,12 @@ public final class HdmiCecConfigTest { mContext = InstrumentationRegistry.getTargetContext(); } + @Test + public void getAllCecSettings_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThat(hdmiCecConfig.getAllSettings()).isEmpty(); + } + @Test public void getAllCecSettings_Empty() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -100,6 +106,12 @@ public final class HdmiCecConfigTest { HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP); } + @Test + public void getUserCecSettings_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThat(hdmiCecConfig.getUserSettings()).isEmpty(); + } + @Test public void getUserCecSettings_Empty() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -176,6 +188,13 @@ public final class HdmiCecConfigTest { .containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED); } + @Test + public void getAllowedValues_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getAllowedValues("foo")); + } + @Test public void getAllowedValues_InvalidSetting() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -208,6 +227,13 @@ public final class HdmiCecConfigTest { HdmiControlManager.SEND_STANDBY_ON_SLEEP_NONE); } + @Test + public void getDefaultValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getDefaultValue("foo")); + } + @Test public void getDefaultValue_InvalidSetting() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -238,6 +264,13 @@ public final class HdmiCecConfigTest { .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV); } + @Test + public void getValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getValue("foo")); + } + @Test public void getValue_InvalidSetting() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -298,6 +331,13 @@ public final class HdmiCecConfigTest { .STANDBY_NOW.name().toLowerCase()); } + @Test + public void setValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setValue("foo", "bar")); + } + @Test public void setValue_InvalidSetting() { HdmiCecConfig hdmiCecConfig = createHdmiCecConfig( @@ -400,7 +440,10 @@ public final class HdmiCecConfigTest { CecSettings productConfig = null; CecSettings vendorOverride = null; try { - productConfig = XmlParser.read(new ByteArrayInputStream(productConfigXml.getBytes())); + if (productConfigXml != null) { + productConfig = XmlParser.read( + new ByteArrayInputStream(productConfigXml.getBytes())); + } if (vendorOverrideXml != null) { vendorOverride = XmlParser.read( new ByteArrayInputStream(vendorOverrideXml.getBytes()));