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

Commit d0df8698 authored by Nathalie Le Clair's avatar Nathalie Le Clair
Browse files

Determine if CEC stack should handle KEYCODE_TV_POWER

Bug: 157402294
Test: atest HdmiCecLocalDevicePlaybackTest and atest
HdmiCecLocalDeviceTvTest

Change-Id: I1ffc246ff25354d3d61548d10756f1088850d367
parent 76b105c2
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -847,6 +847,20 @@ public final class HdmiControlManager {
        }
    }

    /**
     * Determines whether the HDMI CEC stack should handle KEYCODE_TV_POWER.
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public boolean shouldHandleTvPowerKey() {
        try {
            return mService.shouldHandleTvPowerKey();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Controls whether volume control commands via HDMI CEC are enabled.
     *
+10 −0
Original line number Diff line number Diff line
@@ -71,6 +71,11 @@ public final class HdmiControlServiceWrapper {
            HdmiControlServiceWrapper.this.toggleAndFollowTvPower();
        }

        @Override
        public boolean shouldHandleTvPowerKey() {
            return HdmiControlServiceWrapper.this.shouldHandleTvPowerKey();
        }

        @Override
        public void queryDisplayStatus(IHdmiControlCallback callback) {
            HdmiControlServiceWrapper.this.queryDisplayStatus(callback);
@@ -367,6 +372,11 @@ public final class HdmiControlServiceWrapper {
    /** @hide */
    public void toggleAndFollowTvPower() {}

    /** @hide */
    public boolean shouldHandleTvPowerKey() {
        return true;
    }

    /** @hide */
    public void queryDisplayStatus(IHdmiControlCallback callback) {}

+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ interface IHdmiControlService {
    HdmiDeviceInfo getActiveSource();
    void oneTouchPlay(IHdmiControlCallback callback);
    void toggleAndFollowTvPower();
    boolean shouldHandleTvPowerKey();
    void queryDisplayStatus(IHdmiControlCallback callback);
    void addHdmiControlStatusChangeListener(IHdmiControlStatusChangeListener listener);
    void removeHdmiControlStatusChangeListener(IHdmiControlStatusChangeListener listener);
+5 −0
Original line number Diff line number Diff line
@@ -194,6 +194,11 @@ public class HdmiAudioSystemClientTest {
        public void toggleAndFollowTvPower() {
        }

        @Override
        public boolean shouldHandleTvPowerKey() {
            return false;
        }

        @Override
        public void queryDisplayStatus(final IHdmiControlCallback callback) {
        }
+24 −0
Original line number Diff line number Diff line
@@ -1652,6 +1652,12 @@ public class HdmiControlService extends SystemService {
            });
        }

        @Override
        public boolean shouldHandleTvPowerKey() {
            enforceAccessPermission();
            return HdmiControlService.this.shouldHandleTvPowerKey();
        }

        @Override
        public void queryDisplayStatus(final IHdmiControlCallback callback) {
            enforceAccessPermission();
@@ -2334,6 +2340,24 @@ public class HdmiControlService extends SystemService {
        source.toggleAndFollowTvPower();
    }

    @VisibleForTesting
    protected boolean shouldHandleTvPowerKey() {
        if (isTvDevice()) {
            return false;
        }
        String powerControlMode = getHdmiCecConfig().getStringValue(
                HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE);
        if (powerControlMode.equals(HdmiControlManager.POWER_CONTROL_MODE_NONE)) {
            return false;
        }
        int hdmiCecEnabled = getHdmiCecConfig().getIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED);
        if (hdmiCecEnabled != HdmiControlManager.HDMI_CEC_CONTROL_ENABLED) {
            return false;
        }
        return true;
    }

    @ServiceThreadOnly
    protected void queryDisplayStatus(final IHdmiControlCallback callback) {
        assertRunOnServiceThread();
Loading