diff options
| -rw-r--r-- | services/core/java/com/android/server/hdmi/Constants.java | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiControlService.java | 47 |
2 files changed, 47 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java index 6b5af88d5300..59aa3f96e3fa 100644 --- a/services/core/java/com/android/server/hdmi/Constants.java +++ b/services/core/java/com/android/server/hdmi/Constants.java @@ -620,6 +620,12 @@ final class Constants { @interface HpdSignalType {} static final String DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE = "soundbar_mode"; + static final String DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX = "enable_earc_tx"; + @StringDef({ + DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE, + DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX + }) + @interface FeatureFlag {} private Constants() { /* cannot be instantiated */ diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index c3433d448c69..7ac8fd0cf2cc 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -18,6 +18,7 @@ package com.android.server.hdmi; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; +import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED; import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_ENABLED; import static android.hardware.hdmi.HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; import static android.hardware.hdmi.HdmiControlManager.SOUNDBAR_MODE_DISABLED; @@ -454,6 +455,9 @@ public class HdmiControlService extends SystemService { private boolean mSoundbarModeFeatureFlagEnabled = false; @ServiceThreadOnly + private boolean mEarcTxFeatureFlagEnabled = false; + + @ServiceThreadOnly private int mActivePortId = Constants.INVALID_PORT_ID; // Set to true while the input change by MHL is allowed. @@ -666,9 +670,18 @@ public class HdmiControlService extends SystemService { setProhibitMode(false); mHdmiControlEnabled = mHdmiCecConfig.getIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED); + + mSoundbarModeFeatureFlagEnabled = mDeviceConfig.getBoolean( + Constants.DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE, false); + mEarcTxFeatureFlagEnabled = mDeviceConfig.getBoolean( + Constants.DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX, false); + synchronized (mLock) { mEarcEnabled = (mHdmiCecConfig.getIntValue( HdmiControlManager.SETTING_NAME_EARC_ENABLED) == EARC_FEATURE_ENABLED); + if (isTvDevice()) { + mEarcEnabled &= mEarcTxFeatureFlagEnabled; + } } setHdmiCecVolumeControlEnabledInternal(getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)); @@ -812,20 +825,42 @@ public class HdmiControlService extends SystemService { } } }, mServiceThreadExecutor); + + if (isTvDevice()) { + mDeviceConfig.addOnPropertiesChangedListener(getContext().getMainExecutor(), + new DeviceConfig.OnPropertiesChangedListener() { + @Override + public void onPropertiesChanged(DeviceConfig.Properties properties) { + mEarcTxFeatureFlagEnabled = properties.getBoolean( + Constants.DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX, + false); + boolean earcEnabledSetting = mHdmiCecConfig.getIntValue( + HdmiControlManager.SETTING_NAME_EARC_ENABLED) + == EARC_FEATURE_ENABLED; + setEarcEnabled(earcEnabledSetting && mEarcTxFeatureFlagEnabled + ? EARC_FEATURE_ENABLED : EARC_FEATURE_DISABLED); + } + }); + } + mHdmiCecConfig.registerChangeListener(HdmiControlManager.SETTING_NAME_EARC_ENABLED, new HdmiCecConfig.SettingChangeListener() { @Override public void onChange(String setting) { - @HdmiControlManager.HdmiCecControl int enabled = mHdmiCecConfig.getIntValue( - HdmiControlManager.SETTING_NAME_EARC_ENABLED); - setEarcEnabled(enabled); + if (isTvDevice()) { + boolean earcEnabledSetting = mHdmiCecConfig.getIntValue( + HdmiControlManager.SETTING_NAME_EARC_ENABLED) + == EARC_FEATURE_ENABLED; + setEarcEnabled(earcEnabledSetting && mEarcTxFeatureFlagEnabled + ? EARC_FEATURE_ENABLED : EARC_FEATURE_DISABLED); + } else { + setEarcEnabled(mHdmiCecConfig.getIntValue( + HdmiControlManager.SETTING_NAME_EARC_ENABLED)); + } } }, mServiceThreadExecutor); - mSoundbarModeFeatureFlagEnabled = mDeviceConfig.getBoolean( - Constants.DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE, false); - mDeviceConfig.addOnPropertiesChangedListener(getContext().getMainExecutor(), new DeviceConfig.OnPropertiesChangedListener() { @Override |