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

Commit ce0fd355 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Treat TV_POWER as POWER on non-CEC sink" into sc-dev am: fba76a66

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14199825

Change-Id: I7280de0953e2d079c4e9ecc42b67dea86ca5337d
parents d33f1f13 fba76a66
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -422,6 +422,9 @@ public class HdmiControlService extends SystemService {
    // Set to true if the logical address allocation is completed.
    private boolean mAddressAllocated = false;

    // Whether a CEC-enabled sink is connected to the playback device
    private boolean mIsCecAvailable = false;

    // Object that handles logging statsd atoms.
    // Use getAtomWriter() instead of accessing directly, to allow dependency injection for testing.
    private HdmiCecAtomWriter mAtomWriter = new HdmiCecAtomWriter();
@@ -2229,6 +2232,7 @@ public class HdmiControlService extends SystemService {

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

            // System settings
@@ -2450,7 +2454,7 @@ public class HdmiControlService extends SystemService {
        if (hdmiCecEnabled != HdmiControlManager.HDMI_CEC_CONTROL_ENABLED) {
            return false;
        }
        return true;
        return mIsCecAvailable;
    }

    @ServiceThreadOnly
@@ -2835,24 +2839,24 @@ public class HdmiControlService extends SystemService {
    private void invokeHdmiControlStatusChangeListenerLocked(
            Collection<IHdmiControlStatusChangeListener> listeners,
            @HdmiControlManager.HdmiCecControl int isEnabled) {
        if (listeners.isEmpty()) {
            return;
        }
        if (isEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED) {
            queryDisplayStatus(new IHdmiControlCallback.Stub() {
                public void onComplete(int status) {
                    boolean isAvailable = true;
                    if (status == HdmiControlManager.POWER_STATUS_UNKNOWN
                            || status == HdmiControlManager.RESULT_EXCEPTION
                            || status == HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE) {
                        isAvailable = false;
                        mIsCecAvailable = false;
                    } else {
                        mIsCecAvailable = true;
                    }
                    invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, isAvailable);
                }
            });
            return;
        } else {
            mIsCecAvailable = false;
        }
        if (!listeners.isEmpty()) {
            invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, mIsCecAvailable);
        }
        invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, false);
    }

    private void invokeHdmiControlStatusChangeListenerLocked(
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ public class DevicePowerStatusActionTest {
        mDevicePowerStatusAction = DevicePowerStatusAction.create(mPlaybackDevice, ADDR_TV,
                mCallbackMock);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();
    }

    @Test
+33 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import java.util.concurrent.TimeUnit;
@RunWith(JUnit4.class)
/** Tests for {@link HdmiCecLocalDevicePlayback} class. */
public class HdmiCecLocalDevicePlaybackTest {
    private static final int TIMEOUT_MS = HdmiConfig.TIMEOUT_MS + 1;

    private static final int PORT_1 = 1;
    private static final HdmiDeviceInfo INFO_TV = new HdmiDeviceInfo(
@@ -1135,6 +1136,10 @@ public class HdmiCecLocalDevicePlaybackTest {
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
        // 4. DUT turned off.
        mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
        // TODO(b/184939731): remove waiting times once pending actions no longer block <Standby>
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mTestLooper.dispatchAll();
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mTestLooper.dispatchAll();
        HdmiCecMessage standbyMessageBroadcast = HdmiCecMessageBuilder.buildStandby(
                mHdmiCecLocalDevicePlayback.mAddress, ADDR_BROADCAST);
@@ -1615,6 +1620,7 @@ public class HdmiCecLocalDevicePlaybackTest {

    @Test
    public void queryDisplayStatus() {
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mHdmiControlService.queryDisplayStatus(new IHdmiControlCallback.Stub() {
            @Override
            public void onComplete(int result) {
@@ -1731,6 +1737,12 @@ public class HdmiCecLocalDevicePlaybackTest {

    @Test
    public void shouldHandleTvPowerKey_CecDisabled() {
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        HdmiCecMessage reportPowerStatusMessage = HdmiCecMessageBuilder.buildReportPowerStatus(
                Constants.ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
        mNativeWrapper.onCecMessage(reportPowerStatusMessage);
        mTestLooper.dispatchAll();

        mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
                HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
@@ -1739,14 +1751,35 @@ public class HdmiCecLocalDevicePlaybackTest {

    @Test
    public void shouldHandleTvPowerKey_PowerControlModeNone() {
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        HdmiCecMessage reportPowerStatusMessage = HdmiCecMessageBuilder.buildReportPowerStatus(
                Constants.ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
        mNativeWrapper.onCecMessage(reportPowerStatusMessage);
        mTestLooper.dispatchAll();

        mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(
                HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE,
                HdmiControlManager.POWER_CONTROL_MODE_NONE);
        assertThat(mHdmiControlService.shouldHandleTvPowerKey()).isFalse();
    }

    @Test
    public void shouldHandleTvPowerKey_CecNotAvailable() {
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        // TV doesn't report its power status
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mTestLooper.dispatchAll();
        assertThat(mHdmiControlService.shouldHandleTvPowerKey()).isFalse();
    }

    @Test
    public void shouldHandleTvPowerKey_CecEnabled_PowerControlModeTv() {
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        HdmiCecMessage reportPowerStatusMessage = HdmiCecMessageBuilder.buildReportPowerStatus(
                Constants.ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON);
        mNativeWrapper.onCecMessage(reportPowerStatusMessage);
        mTestLooper.dispatchAll();

        mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
                HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
+5 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import java.util.ArrayList;
@RunWith(JUnit4.class)
/** Tests for {@link HdmiCecLocalDeviceTv} class. */
public class HdmiCecLocalDeviceTvTest {
    private static final int TIMEOUT_MS = HdmiConfig.TIMEOUT_MS + 1;

    private HdmiControlService mHdmiControlService;
    private HdmiCecController mHdmiCecController;
@@ -294,6 +295,10 @@ public class HdmiCecLocalDeviceTvTest {
                HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
        mTestLooper.dispatchAll();
        mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
        // TODO(184939731): remove waiting times once pending actions no longer block <Standby>
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mTestLooper.dispatchAll();
        mTestLooper.moveTimeForward(TIMEOUT_MS);
        mTestLooper.dispatchAll();
        HdmiCecMessage standby = HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_BROADCAST);
        assertThat(mNativeWrapper.getResultMessages()).contains(standby);
+8 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ public class OneTouchPlayActionTest {
        mPhysicalAddress = 0x2000;
        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();
    }

    private OneTouchPlayAction createOneTouchPlayAction(HdmiCecLocalDevicePlayback device,
@@ -161,6 +162,7 @@ public class OneTouchPlayActionTest {
        mLocalDevices.add(playbackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -203,6 +205,7 @@ public class OneTouchPlayActionTest {
        mLocalDevices.add(playbackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -245,6 +248,7 @@ public class OneTouchPlayActionTest {
        mLocalDevices.add(playbackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -297,6 +301,7 @@ public class OneTouchPlayActionTest {
        mLocalDevices.add(playbackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -342,6 +347,7 @@ public class OneTouchPlayActionTest {
        mHdmiControlService.getHdmiCecNetwork().updateDevicePowerStatus(ADDR_TV,
                HdmiControlManager.POWER_STATUS_ON);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -376,6 +382,7 @@ public class OneTouchPlayActionTest {
        mHdmiControlService.getHdmiCecNetwork().updateDevicePowerStatus(ADDR_TV,
                HdmiControlManager.POWER_STATUS_UNKNOWN);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();
@@ -420,6 +427,7 @@ public class OneTouchPlayActionTest {
        mHdmiControlService.getHdmiCecNetwork().updateDevicePowerStatus(ADDR_TV,
                HdmiControlManager.POWER_STATUS_STANDBY);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        TestActionTimer actionTimer = new TestActionTimer();
        TestCallback callback = new TestCallback();