Merge "[CEC Configuration] Add HdmiCecConfig.createFromStrings method"

This commit is contained in:
TreeHugger Robot
2020-10-29 14:39:37 +00:00
committed by Android (Google) Code Review
2 changed files with 70 additions and 51 deletions

View File

@@ -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) {

View File

@@ -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,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
@@ -80,7 +72,8 @@ public final class HdmiCecConfigTest {
@Test
public void getAllCecSettings_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"hdmi_cec_enabled\""
@@ -108,13 +101,15 @@ public final class HdmiCecConfigTest {
@Test
public void getUserCecSettings_NoMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter, null, null);
assertThat(hdmiCecConfig.getUserSettings()).isEmpty();
}
@Test
public void getUserCecSettings_Empty() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
@@ -123,7 +118,8 @@ public final class HdmiCecConfigTest {
@Test
public void getUserCecSettings_OnlyMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"hdmi_cec_enabled\""
@@ -151,7 +147,8 @@ public final class HdmiCecConfigTest {
@Test
public void getUserCecSettings_WithOverride() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"hdmi_cec_enabled\""
@@ -190,14 +187,16 @@ public final class HdmiCecConfigTest {
@Test
public void getAllowedValues_NoMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter, null, null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.getAllowedValues("foo"));
}
@Test
public void getAllowedValues_InvalidSetting() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
@@ -207,7 +206,8 @@ public final class HdmiCecConfigTest {
@Test
public void getAllowedValues_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -229,14 +229,16 @@ public final class HdmiCecConfigTest {
@Test
public void getDefaultValue_NoMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter, null, null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.getDefaultValue("foo"));
}
@Test
public void getDefaultValue_InvalidSetting() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
@@ -246,7 +248,8 @@ public final class HdmiCecConfigTest {
@Test
public void getDefaultValue_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -266,14 +269,16 @@ public final class HdmiCecConfigTest {
@Test
public void getValue_NoMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter, null, null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.getValue("foo"));
}
@Test
public void getValue_InvalidSetting() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", 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,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -313,7 +319,8 @@ public final class HdmiCecConfigTest {
.NONE.name().toLowerCase()))
.thenReturn(HdmiProperties.power_state_change_on_active_source_lost_values
.STANDBY_NOW.name().toLowerCase());
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"power_state_change_on_active_source_lost\""
@@ -333,14 +340,16 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_NoMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(null, null);
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter, null, null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.setValue("foo", "bar"));
}
@Test
public void setValue_InvalidSetting() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
@@ -350,7 +359,8 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_NotConfigurable() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -371,7 +381,8 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_InvalidValue() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -392,7 +403,8 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_GlobalSetting_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"send_standby_on_sleep\""
@@ -414,7 +426,8 @@ public final class HdmiCecConfigTest {
@Test
public void setValue_SystemProperty_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings(
mContext, mStorageAdapter,
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"power_state_change_on_active_source_lost\""
@@ -435,22 +448,4 @@ public final class HdmiCecConfigTest {
HdmiProperties.power_state_change_on_active_source_lost_values
.STANDBY_NOW.name().toLowerCase());
}
private HdmiCecConfig createHdmiCecConfig(String productConfigXml, String vendorOverrideXml) {
CecSettings productConfig = null;
CecSettings vendorOverride = null;
try {
if (productConfigXml != null) {
productConfig = XmlParser.read(
new ByteArrayInputStream(productConfigXml.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(mContext, mStorageAdapter, productConfig, vendorOverride);
}
}