summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-10-28 09:03:09 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-10-28 09:03:09 +0000
commitfe43160894530d6e7321cd8085e60a1f6af6e169 (patch)
tree14651466df14c7c02913541a8c9503bb52e6d055
parent64cd208bee81ee31306cf8d3c917efefd2a719e2 (diff)
parent0ef6062ea142f24536887e3259e810c6b1fb5207 (diff)
Merge "Add Setting for HDMI CEC 2.0"
-rw-r--r--core/java/android/provider/Settings.java7
-rw-r--r--packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java1
-rw-r--r--services/core/java/com/android/server/hdmi/Constants.java9
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java21
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java35
5 files changed, 72 insertions, 1 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 9c41886850fe..9e1b495c5202 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9897,6 +9897,13 @@ public final class Settings {
"hdmi_cec_switch_enabled";
/**
+ * HDMI CEC version to use. Defaults to v1.4b.
+ * @hide
+ */
+ public static final String HDMI_CEC_VERSION =
+ "hdmi_cec_version";
+
+ /**
* Whether TV will automatically turn on upon reception of the CEC command
* &lt;Text View On&gt; or &lt;Image View On&gt;. (0 = false, 1 = true)
*
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 6b4629a3f981..de4325098a7f 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -293,6 +293,7 @@ public class SettingsBackupTest {
Settings.Global.GNSS_SATELLITE_BLACKLIST,
Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS,
Settings.Global.HDMI_CEC_SWITCH_ENABLED,
+ Settings.Global.HDMI_CEC_VERSION,
Settings.Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
Settings.Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED,
Settings.Global.HDMI_CONTROL_ENABLED,
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index 425fbc5687ec..6ff661b1637e 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -492,6 +492,15 @@ final class Constants {
static final int DISABLED = 0;
static final int ENABLED = 1;
+ @IntDef({
+ VERSION_1_4,
+ VERSION_2_0
+ })
+ @interface CecVersion {}
+ static final int VERSION_1_3 = 0x04;
+ static final int VERSION_1_4 = 0x05;
+ static final int VERSION_2_0 = 0x06;
+
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 ee86593916ae..b4a765e10fca 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -26,6 +26,7 @@ import static com.android.server.hdmi.Constants.OPTION_MHL_ENABLE;
import static com.android.server.hdmi.Constants.OPTION_MHL_INPUT_SWITCHING;
import static com.android.server.hdmi.Constants.OPTION_MHL_POWER_CHARGE;
import static com.android.server.hdmi.Constants.OPTION_MHL_SERVICE_CONTROL;
+import static com.android.server.hdmi.Constants.VERSION_1_4;
import static com.android.server.power.ShutdownThread.SHUTDOWN_ACTION_PROPERTY;
import android.annotation.Nullable;
@@ -79,6 +80,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.SystemService;
+import com.android.server.hdmi.Constants.CecVersion;
import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
import com.android.server.hdmi.HdmiCecController.AllocateAddressCallback;
import com.android.server.hdmi.HdmiCecLocalDevice.ActiveSource;
@@ -373,6 +375,9 @@ public class HdmiControlService extends SystemService {
@Nullable
private Looper mIoLooper;
+ @CecVersion
+ private int mCecVersion = Constants.VERSION_1_4;
+
// Last input port before switching to the MHL port. Should switch back to this port
// when the mobile device sends the request one touch play with off.
// Gets invalidated if we go to other port/input.
@@ -660,6 +665,7 @@ public class HdmiControlService extends SystemService {
String[] settings = new String[] {
Global.HDMI_CONTROL_ENABLED,
Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED,
+ Global.HDMI_CEC_VERSION,
Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED,
Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
@@ -688,6 +694,9 @@ public class HdmiControlService extends SystemService {
case Global.HDMI_CONTROL_ENABLED:
setControlEnabled(enabled);
break;
+ case Global.HDMI_CEC_VERSION:
+ initializeCec(INITIATED_BY_ENABLE_CEC);
+ break;
case Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED:
setHdmiCecVolumeControlEnabledInternal(enabled);
break;
@@ -753,6 +762,12 @@ public class HdmiControlService extends SystemService {
return Global.getInt(cr, key, toInt(defVal)) == ENABLED;
}
+ @VisibleForTesting
+ int readIntSetting(String key, int defVal) {
+ ContentResolver cr = getContext().getContentResolver();
+ return Global.getInt(cr, key, defVal);
+ }
+
void writeBooleanSetting(String key, boolean value) {
ContentResolver cr = getContext().getContentResolver();
Global.putInt(cr, key, toInt(value));
@@ -783,6 +798,8 @@ public class HdmiControlService extends SystemService {
private void initializeCec(int initiatedBy) {
mAddressAllocated = false;
+ mCecVersion = readIntSetting(Global.HDMI_CEC_VERSION, VERSION_1_4);
+
mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
mCecController.setLanguage(mMenuLanguage);
initializeLocalDevices(initiatedBy);
@@ -989,8 +1006,9 @@ public class HdmiControlService extends SystemService {
/**
* Returns version of CEC.
*/
+ @CecVersion
int getCecVersion() {
- return mCecController.getVersion();
+ return mCecVersion;
}
/**
@@ -2204,6 +2222,7 @@ public class HdmiControlService extends SystemService {
if (!DumpUtils.checkDumpPermission(getContext(), TAG, writer)) return;
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
+ pw.println("mCecVersion: " + mCecVersion);
pw.println("mProhibitMode: " + mProhibitMode);
pw.println("mPowerStatus: " + mPowerStatus);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
index 8f631a307f15..382ae8218729 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
@@ -383,6 +383,41 @@ public class HdmiControlServiceTest {
}
+ @Test
+ public void getCecVersion_default() {
+ assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4);
+ }
+
+ @Test
+ public void getCecVersion_1_4() {
+ Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION,
+ Constants.VERSION_1_4);
+ mHdmiControlService.setControlEnabled(true);
+ assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4);
+ }
+
+ @Test
+ public void getCecVersion_2_0() {
+ Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION,
+ Constants.VERSION_2_0);
+ mHdmiControlService.setControlEnabled(true);
+ assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_2_0);
+ }
+
+ @Test
+ public void getCecVersion_change() {
+ Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION,
+ Constants.VERSION_1_4);
+ mHdmiControlService.setControlEnabled(true);
+ assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_1_4);
+
+ Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION,
+ Constants.VERSION_2_0);
+ mHdmiControlService.setControlEnabled(true);
+ assertThat(mHdmiControlService.getCecVersion()).isEqualTo(Constants.VERSION_2_0);
+ }
+
+
private static class VolumeControlFeatureCallback extends
IHdmiCecVolumeControlFeatureListener.Stub {
boolean mCallbackReceived = false;