Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfe5028a authored by Marvin Ramin's avatar Marvin Ramin Committed by Android (Google) Code Review
Browse files

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

parents c1d7c4d6 36bfe205
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -774,8 +774,14 @@ public class HdmiControlService extends SystemService {


    private void initializeCec(int initiatedBy) {
    private void initializeCec(int initiatedBy) {
        mAddressAllocated = false;
        mAddressAllocated = false;
        mCecVersion = getHdmiCecConfig().getIntValue(
        int settingsCecVersion = getHdmiCecConfig().getIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION);
                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.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
        mCecController.setLanguage(mMenuLanguage);
        mCecController.setLanguage(mMenuLanguage);
@@ -2184,6 +2190,7 @@ public class HdmiControlService extends SystemService {


            pw.println("mProhibitMode: " + mProhibitMode);
            pw.println("mProhibitMode: " + mProhibitMode);
            pw.println("mPowerStatus: " + mPowerStatusController.getPowerStatus());
            pw.println("mPowerStatus: " + mPowerStatusController.getPowerStatus());
            pw.println("mCecVersion: " + mCecVersion);


            // System settings
            // System settings
            pw.println("System_settings:");
            pw.println("System_settings:");
+6 −1
Original line number Original line Diff line number Diff line
@@ -58,6 +58,7 @@ final class FakeNativeWrapper implements NativeWrapper {
    private int mMyPhysicalAddress = 0;
    private int mMyPhysicalAddress = 0;
    private HdmiPortInfo[] mHdmiPortInfo = null;
    private HdmiPortInfo[] mHdmiPortInfo = null;
    private HdmiCecController.HdmiCecCallback mCallback = null;
    private HdmiCecController.HdmiCecCallback mCallback = null;
    private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0;


    @Override
    @Override
    public String nativeInit() {
    public String nativeInit() {
@@ -96,7 +97,7 @@ final class FakeNativeWrapper implements NativeWrapper {


    @Override
    @Override
    public int nativeGetVersion() {
    public int nativeGetVersion() {
        return HdmiControlManager.HDMI_CEC_VERSION_2_0;
        return mCecVersion;
    }
    }


    @Override
    @Override
@@ -132,6 +133,10 @@ final class FakeNativeWrapper implements NativeWrapper {
        mPortConnectionStatus.put(port, connected);
        mPortConnectionStatus.put(port, connected);
    }
    }


    public void setCecVersion(@HdmiControlManager.HdmiCecVersion int cecVersion) {
        mCecVersion = cecVersion;
    }

    public void onCecMessage(HdmiCecMessage hdmiCecMessage) {
    public void onCecMessage(HdmiCecMessage hdmiCecMessage) {
        if (mCallback == null) {
        if (mCallback == null) {
            return;
            return;
+40 −0
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import org.junit.Before;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.runners.JUnit4;
@@ -622,6 +623,45 @@ public class HdmiControlServiceTest {
        assertEquals(runnerUid, Binder.getCallingWorkSourceUid());
        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
    private static class VolumeControlFeatureCallback extends
            IHdmiCecVolumeControlFeatureListener.Stub {
            IHdmiCecVolumeControlFeatureListener.Stub {
        boolean mCallbackReceived = false;
        boolean mCallbackReceived = false;