diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
index 00fd586477080..e906a7c8132c1 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
@@ -37,6 +37,7 @@ import com.android.server.hdmi.cec.config.XmlParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -168,6 +169,29 @@ public class HdmiCecConfig {
return null;
}
+ @NonNull
+ @VisibleForTesting
+ static HdmiCecConfig createFromStrings(@NonNull Context context,
+ @NonNull StorageAdapter storageAdapter,
+ @Nullable String systemConfigXml,
+ @Nullable String vendorOverrideXml) {
+ CecSettings systemConfig = null;
+ CecSettings vendorOverride = null;
+ try {
+ if (systemConfigXml != null) {
+ systemConfig = XmlParser.read(
+ new ByteArrayInputStream(systemConfigXml.getBytes()));
+ }
+ if (vendorOverrideXml != null) {
+ vendorOverride = XmlParser.read(
+ new ByteArrayInputStream(vendorOverrideXml.getBytes()));
+ }
+ } catch (IOException | DatatypeConfigurationException | XmlPullParserException e) {
+ Slog.e(TAG, "Encountered an error while reading/parsing CEC config strings", e);
+ }
+ return new HdmiCecConfig(context, storageAdapter, systemConfig, vendorOverride);
+ }
+
@Nullable
private Setting getSetting(@NonNull String name) {
if (mSystemConfig == null) {
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 a1eb0378a210f..ae9c6188619f5 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
@@ -26,26 +26,16 @@ import android.hardware.hdmi.HdmiControlManager;
import android.platform.test.annotations.Presubmit;
import android.provider.Settings.Global;
import android.sysprop.HdmiProperties;
-import android.util.Slog;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
-import com.android.server.hdmi.cec.config.CecSettings;
-import com.android.server.hdmi.cec.config.XmlParser;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import javax.xml.datatype.DatatypeConfigurationException;
@SmallTest
@Presubmit
@@ -65,13 +55,15 @@ public final class HdmiCecConfigTest {
@Test
public void getAllCecSettings_NoMasterXml() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter, null, null);
assertThat(hdmiCecConfig.getAllSettings()).isEmpty();
}
@Test
public void getAllCecSettings_Empty() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ "", null);
@@ -80,7 +72,8 @@ public final class HdmiCecConfigTest {
@Test
public void getAllCecSettings_BasicSanity() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " "
+ ""
+ "", null);
@@ -123,7 +118,8 @@ public final class HdmiCecConfigTest {
@Test
public void getUserCecSettings_OnlyMasterXml() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " "
+ ""
+ " hdmiCecConfig.getAllowedValues("foo"));
}
@Test
public void getAllowedValues_InvalidSetting() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ "", null);
@@ -207,7 +206,8 @@ public final class HdmiCecConfigTest {
@Test
public void getAllowedValues_BasicSanity() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " hdmiCecConfig.getDefaultValue("foo"));
}
@Test
public void getDefaultValue_InvalidSetting() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ "", null);
@@ -246,7 +248,8 @@ public final class HdmiCecConfigTest {
@Test
public void getDefaultValue_BasicSanity() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " hdmiCecConfig.getValue("foo"));
}
@Test
public void getValue_InvalidSetting() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ "", null);
@@ -287,7 +292,8 @@ public final class HdmiCecConfigTest {
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV))
.thenReturn(HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST);
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " "
+ ""
+ " hdmiCecConfig.setValue("foo", "bar"));
}
@Test
public void setValue_InvalidSetting() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ "", null);
@@ -350,7 +359,8 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_NotConfigurable() {
- HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
+ HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
+ mContext, mStorageAdapter,
""
+ ""
+ " "
+ ""
+ " "
+ ""
+ " "
+ ""
+ "