diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java index 401bb9d324920..bf325609b1a65 100644 --- a/core/java/android/hardware/hdmi/HdmiControlManager.java +++ b/core/java/android/hardware/hdmi/HdmiControlManager.java @@ -42,9 +42,11 @@ import com.android.internal.util.ConcurrentUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; +import java.util.stream.Collectors; /** * The {@link HdmiControlManager} class is used to send HDMI control messages @@ -325,17 +327,17 @@ public final class HdmiControlManager { * * @hide */ - public static final String HDMI_CEC_CONTROL_ENABLED = "1"; + public static final int HDMI_CEC_CONTROL_ENABLED = 1; /** * HDMI CEC disabled. * * @hide */ - public static final String HDMI_CEC_CONTROL_DISABLED = "0"; + public static final int HDMI_CEC_CONTROL_DISABLED = 0; /** * @hide */ - @StringDef({ + @IntDef({ HDMI_CEC_CONTROL_ENABLED, HDMI_CEC_CONTROL_DISABLED }) @@ -401,17 +403,17 @@ public final class HdmiControlManager { * * @hide */ - public static final String SYSTEM_AUDIO_MODE_MUTING_ENABLED = "1"; + public static final int SYSTEM_AUDIO_MODE_MUTING_ENABLED = 1; /** * System Audio Mode muting disabled. * * @hide */ - public static final String SYSTEM_AUDIO_MODE_MUTING_DISABLED = "0"; + public static final int SYSTEM_AUDIO_MODE_MUTING_DISABLED = 0; /** * @hide */ - @StringDef({ + @IntDef({ SYSTEM_AUDIO_MODE_MUTING_ENABLED, SYSTEM_AUDIO_MODE_MUTING_DISABLED }) @@ -1317,24 +1319,51 @@ public final class HdmiControlManager { } /** - * Get a set of allowed values for a settings. + * Get a set of allowed values for a setting (string value-type). * * @param name name of the setting * @return a set of allowed values for a settings. {@code null} on failure. * @throws IllegalArgumentException when setting {@code name} does not exist. + * @throws IllegalArgumentException when setting {@code name} value type is invalid. * @throws RuntimeException when the HdmiControlService is not available. * * @hide */ @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) - public List getAllowedCecSettingValues(@NonNull @CecSettingName String name) { + public List getAllowedCecSettingStringValues(@NonNull @CecSettingName String name) { if (mService == null) { Log.e(TAG, "HdmiControlService is not available"); throw new RuntimeException("HdmiControlService is not available"); } try { - return mService.getAllowedCecSettingValues(name); + return mService.getAllowedCecSettingStringValues(name); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Get a set of allowed values for a setting (int value-type). + * + * @param name name of the setting + * @return a set of allowed values for a settings. {@code null} on failure. + * @throws IllegalArgumentException when setting {@code name} does not exist. + * @throws IllegalArgumentException when setting {@code name} value type is invalid. + * @throws RuntimeException when the HdmiControlService is not available. + * + * @hide + */ + @NonNull + @RequiresPermission(android.Manifest.permission.HDMI_CEC) + public List getAllowedCecSettingIntValues(@NonNull @CecSettingName String name) { + if (mService == null) { + Log.e(TAG, "HdmiControlService is not available"); + throw new RuntimeException("HdmiControlService is not available"); + } + try { + int[] allowedValues = mService.getAllowedCecSettingIntValues(name); + return Arrays.stream(allowedValues).boxed().collect(Collectors.toList()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1350,13 +1379,13 @@ public final class HdmiControlManager { * @hide */ @RequiresPermission(android.Manifest.permission.HDMI_CEC) - public void setHdmiCecEnabled(@NonNull @HdmiCecControl String value) { + public void setHdmiCecEnabled(@NonNull @HdmiCecControl int value) { if (mService == null) { Log.e(TAG, "HdmiControlService is not available"); throw new RuntimeException("HdmiControlService is not available"); } try { - mService.setCecSettingValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED, value); + mService.setCecSettingIntValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED, value); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1373,13 +1402,13 @@ public final class HdmiControlManager { @NonNull @HdmiCecControl @RequiresPermission(android.Manifest.permission.HDMI_CEC) - public String getHdmiCecEnabled() { + public int getHdmiCecEnabled() { if (mService == null) { Log.e(TAG, "HdmiControlService is not available"); throw new RuntimeException("HdmiControlService is not available"); } try { - return mService.getCecSettingValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED); + return mService.getCecSettingIntValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1401,7 +1430,7 @@ public final class HdmiControlManager { throw new RuntimeException("HdmiControlService is not available"); } try { - mService.setCecSettingValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, value); + mService.setCecSettingStringValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, value); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1424,7 +1453,7 @@ public final class HdmiControlManager { throw new RuntimeException("HdmiControlService is not available"); } try { - return mService.getCecSettingValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP); + return mService.getCecSettingStringValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1447,7 +1476,7 @@ public final class HdmiControlManager { throw new RuntimeException("HdmiControlService is not available"); } try { - mService.setCecSettingValue( + mService.setCecSettingStringValue( CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, value); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -1471,7 +1500,7 @@ public final class HdmiControlManager { throw new RuntimeException("HdmiControlService is not available"); } try { - return mService.getCecSettingValue( + return mService.getCecSettingStringValue( CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -1488,13 +1517,13 @@ public final class HdmiControlManager { * @hide */ @RequiresPermission(android.Manifest.permission.HDMI_CEC) - public void setSystemAudioModeMuting(@NonNull @SystemAudioModeMuting String value) { + public void setSystemAudioModeMuting(@NonNull @SystemAudioModeMuting int value) { if (mService == null) { Log.e(TAG, "HdmiControlService is not available"); throw new RuntimeException("HdmiControlService is not available"); } try { - mService.setCecSettingValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, value); + mService.setCecSettingIntValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, value); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1511,13 +1540,13 @@ public final class HdmiControlManager { @NonNull @SystemAudioModeMuting @RequiresPermission(android.Manifest.permission.HDMI_CEC) - public String getSystemAudioModeMuting() { + public int getSystemAudioModeMuting() { if (mService == null) { Log.e(TAG, "HdmiControlService is not available"); throw new RuntimeException("HdmiControlService is not available"); } try { - return mService.getCecSettingValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING); + return mService.getCecSettingIntValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/hardware/hdmi/HdmiControlServiceWrapper.java b/core/java/android/hardware/hdmi/HdmiControlServiceWrapper.java index 22d4640be4931..fab56b8cea49a 100644 --- a/core/java/android/hardware/hdmi/HdmiControlServiceWrapper.java +++ b/core/java/android/hardware/hdmi/HdmiControlServiceWrapper.java @@ -301,18 +301,33 @@ public final class HdmiControlServiceWrapper { } @Override - public List getAllowedCecSettingValues(String name) { - return HdmiControlServiceWrapper.this.getAllowedCecSettingValues(name); + public List getAllowedCecSettingStringValues(String name) { + return HdmiControlServiceWrapper.this.getAllowedCecSettingStringValues(name); } @Override - public String getCecSettingValue(String name) { - return HdmiControlServiceWrapper.this.getCecSettingValue(name); + public int[] getAllowedCecSettingIntValues(String name) { + return HdmiControlServiceWrapper.this.getAllowedCecSettingIntValues(name); } @Override - public void setCecSettingValue(String name, String value) { - HdmiControlServiceWrapper.this.setCecSettingValue(name, value); + public String getCecSettingStringValue(String name) { + return HdmiControlServiceWrapper.this.getCecSettingStringValue(name); + } + + @Override + public void setCecSettingStringValue(String name, String value) { + HdmiControlServiceWrapper.this.setCecSettingStringValue(name, value); + } + + @Override + public int getCecSettingIntValue(String name) { + return HdmiControlServiceWrapper.this.getCecSettingIntValue(name); + } + + @Override + public void setCecSettingIntValue(String name, int value) { + HdmiControlServiceWrapper.this.setCecSettingIntValue(name, value); } }; @@ -494,15 +509,30 @@ public final class HdmiControlServiceWrapper { } /** @hide */ - public List getAllowedCecSettingValues(String name) { + public List getAllowedCecSettingStringValues(String name) { return new ArrayList<>(); } /** @hide */ - public String getCecSettingValue(String name) { + public int[] getAllowedCecSettingIntValues(String name) { + return new int[0]; + } + + /** @hide */ + public String getCecSettingStringValue(String name) { return ""; } /** @hide */ - public void setCecSettingValue(String name, String value) {} + public void setCecSettingStringValue(String name, String value) { + } + + /** @hide */ + public int getCecSettingIntValue(String name) { + return 0; + } + + /** @hide */ + public void setCecSettingIntValue(String name, int value) { + } } diff --git a/core/java/android/hardware/hdmi/IHdmiControlService.aidl b/core/java/android/hardware/hdmi/IHdmiControlService.aidl index 6df164bb71dc0..af9d3accd00e3 100644 --- a/core/java/android/hardware/hdmi/IHdmiControlService.aidl +++ b/core/java/android/hardware/hdmi/IHdmiControlService.aidl @@ -88,7 +88,10 @@ interface IHdmiControlService { void reportAudioStatus(int deviceType, int volume, int maxVolume, boolean isMute); void setSystemAudioModeOnForAudioOnlySource(); List getUserCecSettings(); - List getAllowedCecSettingValues(String name); - String getCecSettingValue(String name); - void setCecSettingValue(String name, String value); + List getAllowedCecSettingStringValues(String name); + int[] getAllowedCecSettingIntValues(String name); + String getCecSettingStringValue(String name); + void setCecSettingStringValue(String name, String value); + int getCecSettingIntValue(String name); + void setCecSettingIntValue(String name, int value); } diff --git a/core/tests/hdmitests/src/android/hardware/hdmi/HdmiAudioSystemClientTest.java b/core/tests/hdmitests/src/android/hardware/hdmi/HdmiAudioSystemClientTest.java index cc68bb6333cb9..4094f836ff5af 100644 --- a/core/tests/hdmitests/src/android/hardware/hdmi/HdmiAudioSystemClientTest.java +++ b/core/tests/hdmitests/src/android/hardware/hdmi/HdmiAudioSystemClientTest.java @@ -381,17 +381,31 @@ public class HdmiAudioSystemClientTest { } @Override - public List getAllowedCecSettingValues(String name) { + public List getAllowedCecSettingStringValues(String name) { return new ArrayList<>(); } @Override - public String getCecSettingValue(String name) { + public int[] getAllowedCecSettingIntValues(String name) { + return new int[0]; + } + + @Override + public String getCecSettingStringValue(String name) { return ""; } @Override - public void setCecSettingValue(String name, String value) { + public void setCecSettingStringValue(String name, String value) { + } + + @Override + public int getCecSettingIntValue(String name) { + return 0; + } + + @Override + public void setCecSettingIntValue(String name, int value) { } } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java index e906a7c8132c1..90d31f2d73685 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java @@ -21,6 +21,7 @@ import static android.hardware.hdmi.HdmiControlManager.CecSettingName; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.StringDef; import android.content.Context; import android.hardware.hdmi.HdmiControlManager; import android.os.Environment; @@ -68,6 +69,15 @@ public class HdmiCecConfig { private static final int STORAGE_SYSPROPS = 0; private static final int STORAGE_GLOBAL_SETTINGS = 1; + private static final String VALUE_TYPE_STRING = "string"; + private static final String VALUE_TYPE_INT = "int"; + + @StringDef({ + VALUE_TYPE_STRING, + VALUE_TYPE_INT, + }) + private @interface ValueType {} + /** * System property key for Power State Change on Active Source Lost. */ @@ -247,17 +257,15 @@ public class HdmiCecConfig { } } - private String retrieveValue(@NonNull Setting setting) { + private String retrieveValue(@NonNull Setting setting, @NonNull String defaultValue) { @Storage int storage = getStorage(setting); String storageKey = getStorageKey(setting); if (storage == STORAGE_SYSPROPS) { Slog.d(TAG, "Reading '" + storageKey + "' sysprop."); - return mStorageAdapter.retrieveSystemProperty(storageKey, - setting.getDefaultValue().getStringValue()); + return mStorageAdapter.retrieveSystemProperty(storageKey, defaultValue); } else if (storage == STORAGE_GLOBAL_SETTINGS) { Slog.d(TAG, "Reading '" + storageKey + "' global setting."); - return mStorageAdapter.retrieveGlobalSetting(mContext, storageKey, - setting.getDefaultValue().getStringValue()); + return mStorageAdapter.retrieveGlobalSetting(mContext, storageKey, defaultValue); } return null; } @@ -316,13 +324,41 @@ public class HdmiCecConfig { } /** - * For a given setting name returns values that are allowed for that setting. + * For a given setting name returns true if and only if the value type of that + * setting is a string. */ - public List getAllowedValues(@NonNull @CecSettingName String name) { + public boolean isStringValueType(@NonNull @CecSettingName String name) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); } + return getSetting(name).getValueType().equals(VALUE_TYPE_STRING); + } + + /** + * For a given setting name returns true if and only if the value type of that + * setting is an int. + */ + public boolean isIntValueType(@NonNull @CecSettingName String name) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + return getSetting(name).getValueType().equals(VALUE_TYPE_INT); + } + + /** + * For a given setting name returns values that are allowed for that setting (string). + */ + public List getAllowedStringValues(@NonNull @CecSettingName String name) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + if (!setting.getValueType().equals(VALUE_TYPE_STRING)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } List allowedValues = new ArrayList(); for (Value allowedValue : setting.getAllowedValues().getValue()) { allowedValues.add(allowedValue.getStringValue()); @@ -331,32 +367,92 @@ public class HdmiCecConfig { } /** - * For a given setting name returns the default value for that setting. + * For a given setting name returns values that are allowed for that setting (string). */ - public String getDefaultValue(@NonNull @CecSettingName String name) { + public List getAllowedIntValues(@NonNull @CecSettingName String name) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); } + if (!setting.getValueType().equals(VALUE_TYPE_INT)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } + List allowedValues = new ArrayList(); + for (Value allowedValue : setting.getAllowedValues().getValue()) { + allowedValues.add(allowedValue.getIntValue()); + } + return allowedValues; + } + + /** + * For a given setting name returns the default value for that setting (string). + */ + public String getDefaultStringValue(@NonNull @CecSettingName String name) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + if (!setting.getValueType().equals(VALUE_TYPE_STRING)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } return getSetting(name).getDefaultValue().getStringValue(); } /** - * For a given setting name returns the current value of that setting. + * For a given setting name returns the default value for that setting (int). */ - public String getValue(@NonNull @CecSettingName String name) { + public int getDefaultIntValue(@NonNull @CecSettingName String name) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); } - Slog.d(TAG, "Getting CEC setting value '" + name + "'."); - return retrieveValue(setting); + if (!setting.getValueType().equals(VALUE_TYPE_INT)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } + return getSetting(name).getDefaultValue().getIntValue(); } /** - * For a given setting name and value sets the current value of that setting. + * For a given setting name returns the current value of that setting (string). */ - public void setValue(@NonNull @CecSettingName String name, @NonNull String value) { + public String getStringValue(@NonNull @CecSettingName String name) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + if (!setting.getValueType().equals(VALUE_TYPE_STRING)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } + Slog.d(TAG, "Getting CEC setting value '" + name + "'."); + return retrieveValue(setting, setting.getDefaultValue().getStringValue()); + } + + /** + * For a given setting name returns the current value of that setting (int). + */ + public int getIntValue(@NonNull @CecSettingName String name) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + if (!setting.getValueType().equals(VALUE_TYPE_INT)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a int-type setting."); + } + Slog.d(TAG, "Getting CEC setting value '" + name + "'."); + String defaultValue = Integer.toString(setting.getDefaultValue().getIntValue()); + String value = retrieveValue(setting, defaultValue); + return Integer.parseInt(value); + } + + /** + * For a given setting name and value sets the current value of that setting (string). + */ + public void setStringValue(@NonNull @CecSettingName String name, @NonNull String value) { Setting setting = getSetting(name); if (setting == null) { throw new IllegalArgumentException("Setting '" + name + "' does not exist."); @@ -364,11 +460,38 @@ public class HdmiCecConfig { if (!setting.getUserConfigurable()) { throw new IllegalArgumentException("Updating CEC setting '" + name + "' prohibited."); } - if (!getAllowedValues(name).contains(value)) { + if (!setting.getValueType().equals(VALUE_TYPE_STRING)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a string-type setting."); + } + if (!getAllowedStringValues(name).contains(value)) { throw new IllegalArgumentException("Invalid CEC setting '" + name + "' value: '" + value + "'."); } Slog.d(TAG, "Updating CEC setting '" + name + "' to '" + value + "'."); storeValue(setting, value); } + + /** + * For a given setting name and value sets the current value of that setting (int). + */ + public void setIntValue(@NonNull @CecSettingName String name, int value) { + Setting setting = getSetting(name); + if (setting == null) { + throw new IllegalArgumentException("Setting '" + name + "' does not exist."); + } + if (!setting.getUserConfigurable()) { + throw new IllegalArgumentException("Updating CEC setting '" + name + "' prohibited."); + } + if (!setting.getValueType().equals(VALUE_TYPE_INT)) { + throw new IllegalArgumentException("Setting '" + name + + "' is not a int-type setting."); + } + if (!getAllowedIntValues(name).contains(value)) { + throw new IllegalArgumentException("Invalid CEC setting '" + name + + "' value: '" + value + "'."); + } + Slog.d(TAG, "Updating CEC setting '" + name + "' to '" + value + "'."); + storeValue(setting, Integer.toString(value)); + } } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index da4c6f115d555..cc0b8829fb7c7 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -2242,9 +2242,15 @@ public class HdmiControlService extends SystemService { List allSettings = hdmiCecConfig.getAllSettings(); Set userSettings = new HashSet<>(hdmiCecConfig.getUserSettings()); for (String setting : allSettings) { - pw.println(setting + ": " + hdmiCecConfig.getValue(setting) - + " (default: " + hdmiCecConfig.getDefaultValue(setting) + ")" - + (userSettings.contains(setting) ? " [modifiable]" : "")); + if (hdmiCecConfig.isStringValueType(setting)) { + pw.println(setting + " (string): " + hdmiCecConfig.getStringValue(setting) + + " (default: " + hdmiCecConfig.getDefaultStringValue(setting) + ")" + + (userSettings.contains(setting) ? " [modifiable]" : "")); + } else if (hdmiCecConfig.isIntValueType(setting)) { + pw.println(setting + " (int): " + hdmiCecConfig.getIntValue(setting) + + " (default: " + hdmiCecConfig.getDefaultIntValue(setting) + ")" + + (userSettings.contains(setting) ? " [modifiable]" : "")); + } } pw.decreaseIndent(); @@ -2273,33 +2279,68 @@ public class HdmiControlService extends SystemService { } @Override - public List getAllowedCecSettingValues(String name) { + public List getAllowedCecSettingStringValues(String name) { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { - return HdmiControlService.this.getHdmiCecConfig().getAllowedValues(name); + return HdmiControlService.this.getHdmiCecConfig().getAllowedStringValues(name); } finally { Binder.restoreCallingIdentity(token); } } @Override - public String getCecSettingValue(String name) { + public int[] getAllowedCecSettingIntValues(String name) { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { - return HdmiControlService.this.getHdmiCecConfig().getValue(name); + List allowedValues = + HdmiControlService.this.getHdmiCecConfig().getAllowedIntValues(name); + return allowedValues.stream().mapToInt(i->i).toArray(); } finally { Binder.restoreCallingIdentity(token); } } @Override - public void setCecSettingValue(String name, String value) { + public String getCecSettingStringValue(String name) { enforceAccessPermission(); long token = Binder.clearCallingIdentity(); try { - HdmiControlService.this.getHdmiCecConfig().setValue(name, value); + return HdmiControlService.this.getHdmiCecConfig().getStringValue(name); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override + public void setCecSettingStringValue(String name, String value) { + enforceAccessPermission(); + long token = Binder.clearCallingIdentity(); + try { + HdmiControlService.this.getHdmiCecConfig().setStringValue(name, value); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override + public int getCecSettingIntValue(String name) { + enforceAccessPermission(); + long token = Binder.clearCallingIdentity(); + try { + return HdmiControlService.this.getHdmiCecConfig().getIntValue(name); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override + public void setCecSettingIntValue(String name, int value) { + enforceAccessPermission(); + long token = Binder.clearCallingIdentity(); + try { + HdmiControlService.this.getHdmiCecConfig().setIntValue(name, value); } finally { Binder.restoreCallingIdentity(token); } diff --git a/services/core/xsd/cec-config/cec-config.xsd b/services/core/xsd/cec-config/cec-config.xsd index 0801c88c54ade..ca02f70e9675e 100644 --- a/services/core/xsd/cec-config/cec-config.xsd +++ b/services/core/xsd/cec-config/cec-config.xsd @@ -12,6 +12,7 @@ + @@ -23,5 +24,6 @@ + diff --git a/services/core/xsd/cec-config/schema/current.txt b/services/core/xsd/cec-config/schema/current.txt index 34faf459d2512..00dd15ba28f94 100644 --- a/services/core/xsd/cec-config/schema/current.txt +++ b/services/core/xsd/cec-config/schema/current.txt @@ -12,15 +12,19 @@ package com.android.server.hdmi.cec.config { method public com.android.server.hdmi.cec.config.Value getDefaultValue(); method public String getName(); method public boolean getUserConfigurable(); + method public String getValueType(); method public void setAllowedValues(com.android.server.hdmi.cec.config.ValueList); method public void setDefaultValue(com.android.server.hdmi.cec.config.Value); method public void setName(String); method public void setUserConfigurable(boolean); + method public void setValueType(String); } public class Value { ctor public Value(); + method public int getIntValue(); method public String getStringValue(); + method public void setIntValue(int); method public void setStringValue(String); } 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 ae9c6188619f5..a92357f9150bb 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java @@ -17,6 +17,8 @@ package com.android.server.hdmi; import static com.google.common.truth.Truth.assertThat; +import static junit.framework.Assert.assertTrue; + import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertThrows; @@ -77,14 +79,16 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " - + " " - + " " + + " " + + " " + " " - + " " + + " " + " " + " " + " " + " " @@ -123,14 +127,16 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " - + " " - + " " + + " " + + " " + " " - + " " + + " " + " " + " " + " " + " " @@ -152,14 +158,16 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " - + " " - + " " + + " " + + " " + " " - + " " + + " " + " " + " " + " " + " " @@ -172,6 +180,7 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " + " " @@ -186,31 +195,32 @@ public final class HdmiCecConfigTest { } @Test - public void getAllowedValues_NoMasterXml() { + public void isStringValueType_NoMasterXml() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, null, null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getAllowedValues("foo")); + () -> hdmiCecConfig.isStringValueType("foo")); } @Test - public void getAllowedValues_InvalidSetting() { + public void isStringValueType_InvalidSetting() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getAllowedValues("foo")); + () -> hdmiCecConfig.isStringValueType("foo")); } @Test - public void getAllowedValues_BasicSanity() { + public void isStringValueType_BasicSanity() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + " " + " " @@ -220,7 +230,107 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - assertThat(hdmiCecConfig.getAllowedValues( + assertTrue(hdmiCecConfig.isStringValueType( + HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)); + } + + @Test + public void isIntValueType_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.isIntValueType("foo")); + } + + @Test + public void isIntValueType_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.isIntValueType("foo")); + } + + @Test + public void isIntValueType_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertTrue(hdmiCecConfig.isIntValueType( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); + } + + @Test + public void getAllowedStringValues_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getAllowedStringValues("foo")); + } + + @Test + public void getAllowedStringValues_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getAllowedStringValues("foo")); + } + + @Test + public void getAllowedStringValues_InvalidValueType() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getAllowedStringValues( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); + } + + @Test + public void getAllowedStringValues_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getAllowedStringValues( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) .containsExactly(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST, @@ -228,31 +338,32 @@ public final class HdmiCecConfigTest { } @Test - public void getDefaultValue_NoMasterXml() { + public void getAllowedIntValues_NoMasterXml() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, null, null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getDefaultValue("foo")); + () -> hdmiCecConfig.getAllowedIntValues("foo")); } @Test - public void getDefaultValue_InvalidSetting() { + public void getAllowedIntValues_InvalidSetting() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getDefaultValue("foo")); + () -> hdmiCecConfig.getAllowedIntValues("foo")); } @Test - public void getDefaultValue_BasicSanity() { + public void getAllowedIntValues_InvalidValueType() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + " " + " " @@ -262,32 +373,199 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - assertThat(hdmiCecConfig.getDefaultValue( - HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) - .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getAllowedIntValues( + HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)); } @Test - public void getValue_NoMasterXml() { + public void getAllowedIntValues_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getAllowedIntValues( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) + .containsExactly(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED, + HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); + } + + @Test + public void getDefaultStringValue_NoMasterXml() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, null, null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getValue("foo")); + () -> hdmiCecConfig.getDefaultStringValue("foo")); } @Test - public void getValue_InvalidSetting() { + public void getDefaultStringValue_InvalidSetting() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.getValue("foo")); + () -> hdmiCecConfig.getDefaultStringValue("foo")); } @Test - public void getValue_GlobalSetting_BasicSanity() { + public void getDefaultStringValue_InvalidValueType() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getDefaultStringValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); + } + + @Test + public void getDefaultStringValue_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getDefaultStringValue( + HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) + .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV); + } + + @Test + public void getDefaultIntValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getDefaultIntValue("foo")); + } + + @Test + public void getDefaultIntValue_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getDefaultIntValue("foo")); + } + + @Test + public void getDefaultIntValue_InvalidValueType() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getDefaultIntValue( + HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)); + } + + @Test + public void getDefaultIntValue_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getDefaultIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) + .isEqualTo(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); + } + + @Test + public void getStringValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getStringValue("foo")); + } + + @Test + public void getStringValue_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getStringValue("foo")); + } + + @Test + public void getStringValue_InvalidType() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getStringValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)); + } + + @Test + public void getStringValue_GlobalSetting_BasicSanity() { when(mStorageAdapter.retrieveGlobalSetting(mContext, Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV)) @@ -297,6 +575,7 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " + " " @@ -306,13 +585,13 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - assertThat(hdmiCecConfig.getValue( + assertThat(hdmiCecConfig.getStringValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)) .isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); } @Test - public void getValue_SystemProperty_BasicSanity() { + public void getStringValue_SystemProperty_BasicSanity() { when(mStorageAdapter.retrieveSystemProperty( HdmiCecConfig.SYSPROP_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiProperties.power_state_change_on_active_source_lost_values @@ -324,6 +603,7 @@ public final class HdmiCecConfigTest { "" + "" + " " + " " + " " @@ -332,38 +612,130 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - assertThat(hdmiCecConfig.getValue( + assertThat(hdmiCecConfig.getStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST)) .isEqualTo(HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); } @Test - public void setValue_NoMasterXml() { + public void getIntValue_NoMasterXml() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, null, null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.setValue("foo", "bar")); + () -> hdmiCecConfig.getIntValue("foo")); } @Test - public void setValue_InvalidSetting() { + public void getIntValue_InvalidSetting() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.setValue("foo", "bar")); + () -> hdmiCecConfig.getIntValue("foo")); } @Test - public void setValue_NotConfigurable() { + public void getIntValue_InvalidType() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.getIntValue( + HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP)); + } + + @Test + public void getIntValue_GlobalSetting_BasicSanity() { + when(mStorageAdapter.retrieveGlobalSetting(mContext, + Global.HDMI_CONTROL_ENABLED, + Integer.toString(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED))) + .thenReturn(Integer.toString(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED)); + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED)) + .isEqualTo(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); + } + + @Test + public void getIntValue_SystemProperty_BasicSanity() { + when(mStorageAdapter.retrieveSystemProperty( + HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, + Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED))) + .thenReturn(Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThat(hdmiCecConfig.getIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING)) + .isEqualTo(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); + } + + @Test + public void setStringValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setStringValue("foo", "bar")); + } + + @Test + public void setStringValue_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setStringValue("foo", "bar")); + } + + @Test + public void setStringValue_NotConfigurable() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + " " + " " @@ -374,18 +746,19 @@ public final class HdmiCecConfigTest { + " " + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.setValue( + () -> hdmiCecConfig.setStringValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST)); } @Test - public void setValue_InvalidValue() { + public void setStringValue_InvalidValue() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + " " + " " @@ -396,18 +769,19 @@ public final class HdmiCecConfigTest { + " " + "", null); assertThrows(IllegalArgumentException.class, - () -> hdmiCecConfig.setValue( + () -> hdmiCecConfig.setStringValue( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, "bar")); } @Test - public void setValue_GlobalSetting_BasicSanity() { + public void setStringValue_GlobalSetting_BasicSanity() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + " " + " " @@ -417,7 +791,7 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - hdmiCecConfig.setValue(HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, + hdmiCecConfig.setStringValue(HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST); verify(mStorageAdapter).storeGlobalSetting(mContext, Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP, @@ -425,12 +799,13 @@ public final class HdmiCecConfigTest { } @Test - public void setValue_SystemProperty_BasicSanity() { + public void setStringValue_SystemProperty_BasicSanity() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" + "" + " " + " " + " " @@ -439,7 +814,7 @@ public final class HdmiCecConfigTest { + " " + " " + "", null); - hdmiCecConfig.setValue( + hdmiCecConfig.setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); @@ -448,4 +823,114 @@ public final class HdmiCecConfigTest { HdmiProperties.power_state_change_on_active_source_lost_values .STANDBY_NOW.name().toLowerCase()); } + + @Test + public void setIntValue_NoMasterXml() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, null, null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setIntValue("foo", 0)); + } + + @Test + public void setIntValue_InvalidSetting() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setIntValue("foo", 0)); + } + + @Test + public void setIntValue_NotConfigurable() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, + HdmiControlManager.HDMI_CEC_CONTROL_DISABLED)); + } + + @Test + public void setIntValue_InvalidValue() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + assertThrows(IllegalArgumentException.class, + () -> hdmiCecConfig.setIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, + 123)); + } + + @Test + public void setIntValue_GlobalSetting_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + hdmiCecConfig.setIntValue(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, + HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); + verify(mStorageAdapter).storeGlobalSetting(mContext, + Global.HDMI_CONTROL_ENABLED, + Integer.toString(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED)); + } + + @Test + public void setIntValue_SystemProperty_BasicSanity() { + HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( + mContext, mStorageAdapter, + "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "", null); + hdmiCecConfig.setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, + HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); + verify(mStorageAdapter).storeSystemProperty( + HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, + Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); + } }