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

Commit ec565372 authored by Marvin Ramin's avatar Marvin Ramin
Browse files

CEC: Make persisting volume control flag configurable

Add an internal method for changes to the volume flag which doesn't
presist the value. External API calls to change the volume feature flag
will continue to be persisted in setHdmiCecVolumeControlEnabled(boolean).

All internal calls to setHdmiCecVolumeControlEnabled change to the
internal method.

Bug: 158307190
Test: atest HdmiControlService
Change-Id: I2ac4a70db01752f214dd87ca17174b81acddb1dd
parent 487ce5a5
Loading
Loading
Loading
Loading
+11 −5
Original line number Original line Diff line number Diff line
@@ -685,7 +685,7 @@ public class HdmiControlService extends SystemService {
                    setControlEnabled(enabled);
                    setControlEnabled(enabled);
                    break;
                    break;
                case Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED:
                case Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED:
                    setHdmiCecVolumeControlEnabled(enabled);
                    setHdmiCecVolumeControlEnabledInternal(enabled);
                    break;
                    break;
                case Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED:
                case Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED:
                    if (isTvDeviceEnabled()) {
                    if (isTvDeviceEnabled()) {
@@ -3076,6 +3076,14 @@ public class HdmiControlService extends SystemService {
    }
    }


    void setHdmiCecVolumeControlEnabled(boolean isHdmiCecVolumeControlEnabled) {
    void setHdmiCecVolumeControlEnabled(boolean isHdmiCecVolumeControlEnabled) {
        setHdmiCecVolumeControlEnabledInternal(isHdmiCecVolumeControlEnabled);

        writeBooleanSetting(Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED,
                isHdmiCecVolumeControlEnabled);
    }

    @VisibleForTesting
    void setHdmiCecVolumeControlEnabledInternal(boolean isHdmiCecVolumeControlEnabled) {
        synchronized (mLock) {
        synchronized (mLock) {
            mHdmiCecVolumeControlEnabled = isHdmiCecVolumeControlEnabled;
            mHdmiCecVolumeControlEnabled = isHdmiCecVolumeControlEnabled;


@@ -3084,8 +3092,6 @@ public class HdmiControlService extends SystemService {
            if (storedValue != isHdmiCecVolumeControlEnabled) {
            if (storedValue != isHdmiCecVolumeControlEnabled) {
                HdmiLogger.debug("Changing HDMI CEC volume control feature state: %s",
                HdmiLogger.debug("Changing HDMI CEC volume control feature state: %s",
                        isHdmiCecVolumeControlEnabled);
                        isHdmiCecVolumeControlEnabled);
                writeBooleanSetting(Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED,
                        isHdmiCecVolumeControlEnabled);
            }
            }
        }
        }
        announceHdmiCecVolumeControlFeatureChange(isHdmiCecVolumeControlEnabled);
        announceHdmiCecVolumeControlFeatureChange(isHdmiCecVolumeControlEnabled);
@@ -3137,12 +3143,12 @@ public class HdmiControlService extends SystemService {


        if (enabled) {
        if (enabled) {
            enableHdmiControlService();
            enableHdmiControlService();
            setHdmiCecVolumeControlEnabled(
            setHdmiCecVolumeControlEnabledInternal(
                    readBooleanSetting(Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true));
                    readBooleanSetting(Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true));
            return;
            return;
        }
        }


        mHdmiCecVolumeControlEnabled = false;
        setHdmiCecVolumeControlEnabledInternal(false);
        // Call the vendor handler before the service is disabled.
        // Call the vendor handler before the service is disabled.
        invokeVendorCommandListenersOnControlStateChanged(false,
        invokeVendorCommandListenersOnControlStateChanged(false,
                HdmiControlManager.CONTROL_STATE_CHANGED_REASON_SETTING);
                HdmiControlManager.CONTROL_STATE_CHANGED_REASON_SETTING);
+41 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.test.TestLooper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;
import android.provider.Settings;


import androidx.test.InstrumentationRegistry;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
@@ -265,6 +266,30 @@ public class HdmiControlServiceTest {
        assertThat(mHdmiControlService.isHdmiCecVolumeControlEnabled()).isTrue();
        assertThat(mHdmiControlService.isHdmiCecVolumeControlEnabled()).isTrue();
    }
    }


    @Test
    public void setAndGetCecVolumeControlEnabled_changesSetting() {
        mHdmiControlService.setHdmiCecVolumeControlEnabled(false);
        assertThat(mHdmiControlService.readBooleanSetting(
                Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true)).isFalse();

        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
        assertThat(mHdmiControlService.readBooleanSetting(
                Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true)).isTrue();
    }

    @Test
    public void setAndGetCecVolumeControlEnabledInternal_doesNotChangeSetting() {
        mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(true);

        mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(false);
        assertThat(mHdmiControlService.readBooleanSetting(
                Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true)).isTrue();

        mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(true);
        assertThat(mHdmiControlService.readBooleanSetting(
                Settings.Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, true)).isTrue();
    }

    @Test
    @Test
    public void disableAndReenableCec_volumeControlReturnsToOriginalValue() {
    public void disableAndReenableCec_volumeControlReturnsToOriginalValue() {
        boolean volumeControlEnabled = true;
        boolean volumeControlEnabled = true;
@@ -278,6 +303,22 @@ public class HdmiControlServiceTest {
                volumeControlEnabled);
                volumeControlEnabled);
    }
    }


    @Test
    public void disableAndReenableCec_volumeControlFeatureListenersNotified() {
        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);

        VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback();
        mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback);

        mHdmiControlService.setControlEnabled(false);
        assertThat(callback.mCallbackReceived).isTrue();
        assertThat(callback.mVolumeControlEnabled).isFalse();


        mHdmiControlService.setControlEnabled(true);
        assertThat(callback.mVolumeControlEnabled).isTrue();
    }

    @Test
    @Test
    public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_enabled() {
    public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_enabled() {
        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);