Merge "[CEC Configuration] Rename getAvailableCecSettings to getUserCecSettings"

This commit is contained in:
TreeHugger Robot
2020-10-22 15:19:41 +00:00
committed by Android (Google) Code Review
7 changed files with 118 additions and 65 deletions

View File

@@ -424,36 +424,37 @@ public final class HdmiControlManager {
*
* @hide
*/
public static final String SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled";
public static final String CEC_SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled";
/**
* Name of a setting deciding on the Standby message behaviour on sleep.
*
* @hide
*/
public static final String SETTING_NAME_SEND_STANDBY_ON_SLEEP = "send_standby_on_sleep";
public static final String CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP = "send_standby_on_sleep";
/**
* Name of a setting deciding on power state action when losing Active Source.
*
* @hide
*/
public static final String SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST =
public static final String CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST =
"power_state_change_on_active_source_lost";
/**
* Name of a setting deciding whether System Audio Muting is allowed.
*
* @hide
*/
public static final String SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING = "system_audio_mode_muting";
public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING =
"system_audio_mode_muting";
/**
* @hide
*/
@StringDef({
SETTING_NAME_HDMI_CEC_ENABLED,
SETTING_NAME_SEND_STANDBY_ON_SLEEP,
SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING,
CEC_SETTING_NAME_HDMI_CEC_ENABLED,
CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP,
CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING,
})
public @interface SettingName {}
public @interface CecSettingName {}
// True if we have a logical device of type playback hosted in the system.
private final boolean mHasPlaybackDevice;
@@ -1301,14 +1302,15 @@ public final class HdmiControlManager {
* @hide
*/
@NonNull
@CecSettingName
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public List<String> getAvailableCecSettings() {
public List<String> getUserCecSettings() {
if (mService == null) {
Log.e(TAG, "HdmiControlService is not available");
throw new RuntimeException("HdmiControlService is not available");
}
try {
return mService.getAvailableCecSettings();
return mService.getUserCecSettings();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1326,7 +1328,7 @@ public final class HdmiControlManager {
*/
@NonNull
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public List<String> getAllowedCecSettingValues(@NonNull String name) {
public List<String> getAllowedCecSettingValues(@NonNull @CecSettingName String name) {
if (mService == null) {
Log.e(TAG, "HdmiControlService is not available");
throw new RuntimeException("HdmiControlService is not available");
@@ -1354,7 +1356,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
mService.setCecSettingValue(SETTING_NAME_HDMI_CEC_ENABLED, value);
mService.setCecSettingValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED, value);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1377,7 +1379,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
return mService.getCecSettingValue(SETTING_NAME_HDMI_CEC_ENABLED);
return mService.getCecSettingValue(CEC_SETTING_NAME_HDMI_CEC_ENABLED);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1399,7 +1401,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
mService.setCecSettingValue(SETTING_NAME_SEND_STANDBY_ON_SLEEP, value);
mService.setCecSettingValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, value);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1422,7 +1424,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
return mService.getCecSettingValue(SETTING_NAME_SEND_STANDBY_ON_SLEEP);
return mService.getCecSettingValue(CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1446,7 +1448,7 @@ public final class HdmiControlManager {
}
try {
mService.setCecSettingValue(
SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, value);
CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, value);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1470,7 +1472,7 @@ public final class HdmiControlManager {
}
try {
return mService.getCecSettingValue(
SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST);
CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1492,7 +1494,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
mService.setCecSettingValue(SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, value);
mService.setCecSettingValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, value);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1515,7 +1517,7 @@ public final class HdmiControlManager {
throw new RuntimeException("HdmiControlService is not available");
}
try {
return mService.getCecSettingValue(SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING);
return mService.getCecSettingValue(CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -296,8 +296,8 @@ public final class HdmiControlServiceWrapper {
}
@Override
public List<String> getAvailableCecSettings() {
return HdmiControlServiceWrapper.this.getAvailableCecSettings();
public List<String> getUserCecSettings() {
return HdmiControlServiceWrapper.this.getUserCecSettings();
}
@Override
@@ -489,7 +489,7 @@ public final class HdmiControlServiceWrapper {
IHdmiCecVolumeControlFeatureListener listener) {}
/** @hide */
public List<String> getAvailableCecSettings() {
public List<String> getUserCecSettings() {
return new ArrayList<>();
}

View File

@@ -87,7 +87,7 @@ interface IHdmiControlService {
boolean isHdmiCecVolumeControlEnabled();
void reportAudioStatus(int deviceType, int volume, int maxVolume, boolean isMute);
void setSystemAudioModeOnForAudioOnlySource();
List<String> getAvailableCecSettings();
List<String> getUserCecSettings();
List<String> getAllowedCecSettingValues(String name);
String getCecSettingValue(String name);
void setCecSettingValue(String name, String value);

View File

@@ -376,7 +376,7 @@ public class HdmiAudioSystemClientTest {
}
@Override
public List<String> getAvailableCecSettings() {
public List<String> getUserCecSettings() {
return new ArrayList<>();
}

View File

@@ -16,6 +16,8 @@
package com.android.server.hdmi;
import static android.hardware.hdmi.HdmiControlManager.CecSettingName;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -179,13 +181,13 @@ public class HdmiCecConfig {
@Storage
private int getStorage(@NonNull Setting setting) {
switch (setting.getName()) {
case HdmiControlManager.SETTING_NAME_HDMI_CEC_ENABLED:
case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED:
return STORAGE_GLOBAL_SETTINGS;
case HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP:
case HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP:
return STORAGE_GLOBAL_SETTINGS;
case HdmiControlManager.SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST:
case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST:
return STORAGE_SYSPROPS;
case HdmiControlManager.SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING:
case HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING:
return STORAGE_SYSPROPS;
default:
throw new RuntimeException("Invalid CEC setting '" + setting.getName()
@@ -195,13 +197,13 @@ public class HdmiCecConfig {
private String getStorageKey(@NonNull Setting setting) {
switch (setting.getName()) {
case HdmiControlManager.SETTING_NAME_HDMI_CEC_ENABLED:
case HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED:
return Global.HDMI_CONTROL_ENABLED;
case HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP:
case HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP:
return Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP;
case HdmiControlManager.SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST:
case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST:
return SYSPROP_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST;
case HdmiControlManager.SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING:
case HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING:
return SYSPROP_SYSTEM_AUDIO_MODE_MUTING;
default:
throw new RuntimeException("Invalid CEC setting '" + setting.getName()
@@ -238,33 +240,44 @@ public class HdmiCecConfig {
}
/**
* Returns a list of currently available settings based on the XML metadata.
* Returns a list of all settings based on the XML metadata.
*/
public List<String> getAvailableSettings() {
Set<String> availableSettings = new HashSet<String>();
public @CecSettingName List<String> getAllSettings() {
List<String> allSettings = new ArrayList<String>();
for (Setting setting : mProductConfig.getSetting()) {
allSettings.add(setting.getName());
}
return allSettings;
}
/**
* Returns a list of user-modifiable settings based on the XML metadata.
*/
public @CecSettingName List<String> getUserSettings() {
Set<String> userSettings = new HashSet<String>();
// First read from the product config.
for (Setting setting : mProductConfig.getSetting()) {
if (setting.getUserConfigurable()) {
availableSettings.add(setting.getName());
userSettings.add(setting.getName());
}
}
if (mVendorOverride != null) {
// Next either add or remove based on the vendor override.
for (Setting setting : mVendorOverride.getSetting()) {
if (setting.getUserConfigurable()) {
availableSettings.add(setting.getName());
userSettings.add(setting.getName());
} else {
availableSettings.remove(setting.getName());
userSettings.remove(setting.getName());
}
}
}
return new ArrayList(availableSettings);
return new ArrayList(userSettings);
}
/**
* For a given setting name returns values that are allowed for that setting.
*/
public List<String> getAllowedValues(@NonNull String name) {
public List<String> getAllowedValues(@NonNull @CecSettingName String name) {
Setting setting = getSetting(name);
if (setting == null) {
throw new IllegalArgumentException("Setting '" + name + "' does not exist.");
@@ -279,7 +292,7 @@ public class HdmiCecConfig {
/**
* For a given setting name returns the default value for that setting.
*/
public String getDefaultValue(@NonNull String name) {
public String getDefaultValue(@NonNull @CecSettingName String name) {
Setting setting = getSetting(name);
if (setting == null) {
throw new IllegalArgumentException("Setting '" + name + "' does not exist.");
@@ -290,7 +303,7 @@ public class HdmiCecConfig {
/**
* For a given setting name returns the current value of that setting.
*/
public String getValue(@NonNull Context context, @NonNull String name) {
public String getValue(@NonNull Context context, @NonNull @CecSettingName String name) {
Setting setting = getSetting(name);
if (setting == null) {
throw new IllegalArgumentException("Setting '" + name + "' does not exist.");
@@ -302,7 +315,8 @@ public class HdmiCecConfig {
/**
* For a given setting name and value sets the current value of that setting.
*/
public void setValue(@NonNull Context context, @NonNull String name, @NonNull String value) {
public void setValue(@NonNull Context context, @NonNull @CecSettingName String name,
@NonNull String value) {
Setting setting = getSetting(name);
if (setting == null) {
throw new IllegalArgumentException("Setting '" + name + "' does not exist.");

View File

@@ -2334,11 +2334,11 @@ public class HdmiControlService extends SystemService {
}
@Override
public List<String> getAvailableCecSettings() {
public List<String> getUserCecSettings() {
enforceAccessPermission();
long token = Binder.clearCallingIdentity();
try {
return HdmiControlService.this.getHdmiCecConfig().getAvailableSettings();
return HdmiControlService.this.getHdmiCecConfig().getUserSettings();
} finally {
Binder.restoreCallingIdentity(token);
}

View File

@@ -64,16 +64,53 @@ public final class HdmiCecConfigTest {
}
@Test
public void getAvailableCecSettings_Empty() {
public void getAllCecSettings_Empty() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getAvailableSettings()).isEmpty();
assertThat(hdmiCecConfig.getAllSettings()).isEmpty();
}
@Test
public void getAvailableCecSettings_OnlyMasterXml() {
public void getAllCecSettings_BasicSanity() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ " <setting name=\"hdmi_cec_enabled\""
+ " user-configurable=\"true\">"
+ " <allowed-values>"
+ " <value string-value=\"0\" />"
+ " <value string-value=\"1\" />"
+ " </allowed-values>"
+ " <default-value string-value=\"1\" />"
+ " </setting>"
+ " <setting name=\"send_standby_on_sleep\""
+ " user-configurable=\"false\">"
+ " <allowed-values>"
+ " <value string-value=\"to_tv\" />"
+ " <value string-value=\"broadcast\" />"
+ " <value string-value=\"none\" />"
+ " </allowed-values>"
+ " <default-value string-value=\"to_tv\" />"
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getAllSettings())
.containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP);
}
@Test
public void getUserCecSettings_Empty() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getUserSettings()).isEmpty();
}
@Test
public void getUserCecSettings_OnlyMasterXml() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
@@ -95,13 +132,13 @@ public final class HdmiCecConfigTest {
+ " <default-value string-value=\"to_tv\" />"
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getAvailableSettings())
.containsExactly(HdmiControlManager.SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP);
assertThat(hdmiCecConfig.getUserSettings())
.containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP);
}
@Test
public void getAvailableCecSettings_WithOverride() {
public void getUserCecSettings_WithOverride() {
HdmiCecConfig hdmiCecConfig = createHdmiCecConfig(
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
+ "<cec-settings>"
@@ -135,8 +172,8 @@ public final class HdmiCecConfigTest {
+ " <default-value string-value=\"to_tv\" />"
+ " </setting>"
+ "</cec-settings>");
assertThat(hdmiCecConfig.getAvailableSettings())
.containsExactly(HdmiControlManager.SETTING_NAME_HDMI_CEC_ENABLED);
assertThat(hdmiCecConfig.getUserSettings())
.containsExactly(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED);
}
@Test
@@ -165,7 +202,7 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getAllowedValues(
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP))
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP))
.containsExactly(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV,
HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST,
HdmiControlManager.SEND_STANDBY_ON_SLEEP_NONE);
@@ -197,7 +234,7 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getDefaultValue(
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP))
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP))
.isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV);
}
@@ -231,7 +268,7 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getValue(mContext,
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP))
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP))
.isEqualTo(HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST);
}
@@ -256,7 +293,7 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
assertThat(hdmiCecConfig.getValue(mContext,
HdmiControlManager.SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST))
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());
}
@@ -288,7 +325,7 @@ public final class HdmiCecConfigTest {
+ "</cec-settings>", null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.setValue(mContext,
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST));
}
@@ -309,7 +346,7 @@ public final class HdmiCecConfigTest {
+ "</cec-settings>", null);
assertThrows(IllegalArgumentException.class,
() -> hdmiCecConfig.setValue(mContext,
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP,
"bar"));
}
@@ -329,7 +366,7 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
hdmiCecConfig.setValue(mContext,
HdmiControlManager.SETTING_NAME_SEND_STANDBY_ON_SLEEP,
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,
@@ -351,9 +388,9 @@ public final class HdmiCecConfigTest {
+ " </setting>"
+ "</cec-settings>", null);
hdmiCecConfig.setValue(mContext,
HdmiControlManager.SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
HdmiProperties.power_state_change_on_active_source_lost_values
.STANDBY_NOW.name().toLowerCase());
HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
HdmiProperties.power_state_change_on_active_source_lost_values
.STANDBY_NOW.name().toLowerCase());
verify(mStorageAdapter).storeSystemProperty(
HdmiCecConfig.SYSPROP_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
HdmiProperties.power_state_change_on_active_source_lost_values