summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/hdmi/Constants.java6
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java47
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