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

Commit ed79497f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "CEC: Make persisting volume control flag configurable"

parents 8ffc02dd ec565372
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -685,7 +685,7 @@ public class HdmiControlService extends SystemService {
                    setControlEnabled(enabled);
                    break;
                case Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED:
                    setHdmiCecVolumeControlEnabled(enabled);
                    setHdmiCecVolumeControlEnabledInternal(enabled);
                    break;
                case Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED:
                    if (isTvDeviceEnabled()) {
@@ -3076,6 +3076,14 @@ public class HdmiControlService extends SystemService {
    }

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

        writeBooleanSetting(Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED,
                isHdmiCecVolumeControlEnabled);
    }

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

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

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

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

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
@@ -265,6 +266,30 @@ public class HdmiControlServiceTest {
        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
    public void disableAndReenableCec_volumeControlReturnsToOriginalValue() {
        boolean volumeControlEnabled = true;
@@ -278,6 +303,22 @@ public class HdmiControlServiceTest {
                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
    public void addHdmiCecVolumeControlFeatureListener_emitsCurrentState_enabled() {
        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);