Merge "Limit CEC version on version reported by CEC HAL" into sc-dev

This commit is contained in:
Marvin Ramin
2021-02-18 05:12:29 +00:00
committed by Android (Google) Code Review
3 changed files with 54 additions and 2 deletions

View File

@@ -774,8 +774,14 @@ public class HdmiControlService extends SystemService {
private void initializeCec(int initiatedBy) {
mAddressAllocated = false;
mCecVersion = getHdmiCecConfig().getIntValue(
int settingsCecVersion = getHdmiCecConfig().getIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION);
int supportedCecVersion = mCecController.getVersion();
// Limit the used CEC version to the highest supported version by HAL and selected
// version in settings (but at least v1.4b).
mCecVersion = Math.max(HdmiControlManager.HDMI_CEC_VERSION_1_4_B,
Math.min(settingsCecVersion, supportedCecVersion));
mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
mCecController.setLanguage(mMenuLanguage);
@@ -2184,6 +2190,7 @@ public class HdmiControlService extends SystemService {
pw.println("mProhibitMode: " + mProhibitMode);
pw.println("mPowerStatus: " + mPowerStatusController.getPowerStatus());
pw.println("mCecVersion: " + mCecVersion);
// System settings
pw.println("System_settings:");

View File

@@ -58,6 +58,7 @@ final class FakeNativeWrapper implements NativeWrapper {
private int mMyPhysicalAddress = 0;
private HdmiPortInfo[] mHdmiPortInfo = null;
private HdmiCecController.HdmiCecCallback mCallback = null;
private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0;
@Override
public String nativeInit() {
@@ -96,7 +97,7 @@ final class FakeNativeWrapper implements NativeWrapper {
@Override
public int nativeGetVersion() {
return HdmiControlManager.HDMI_CEC_VERSION_2_0;
return mCecVersion;
}
@Override
@@ -132,6 +133,10 @@ final class FakeNativeWrapper implements NativeWrapper {
mPortConnectionStatus.put(port, connected);
}
public void setCecVersion(@HdmiControlManager.HdmiCecVersion int cecVersion) {
mCecVersion = cecVersion;
}
public void onCecMessage(HdmiCecMessage hdmiCecMessage) {
if (mCallback == null) {
return;

View File

@@ -49,6 +49,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -622,6 +623,45 @@ public class HdmiControlServiceTest {
assertEquals(runnerUid, Binder.getCallingWorkSourceUid());
}
@Ignore("b/180499471")
@Test
public void initCecVersion_limitToMinimumSupportedVersion() {
mHdmiControlService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
HdmiControlManager.HDMI_CEC_VERSION_2_0);
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
mHdmiControlService.initService();
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
}
@Ignore("b/180499471")
@Test
public void initCecVersion_limitToAtLeast1_4() {
mHdmiControlService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
HdmiControlManager.HDMI_CEC_VERSION_2_0);
mNativeWrapper.setCecVersion(0x0);
mHdmiControlService.initService();
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
}
@Ignore("b/180499471")
@Test
public void initCecVersion_useHighestMatchingVersion() {
mHdmiControlService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
HdmiControlManager.HDMI_CEC_VERSION_2_0);
mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0);
mHdmiControlService.initService();
assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
HdmiControlManager.HDMI_CEC_VERSION_2_0);
}
private static class VolumeControlFeatureCallback extends
IHdmiCecVolumeControlFeatureListener.Stub {
boolean mCallbackReceived = false;