Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3560f4c7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 6ef294dc 460a24ba
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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) {
+46 −51
Original line number Diff line number Diff line
@@ -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);
    }
}