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

Commit 62eafa25 authored by Yan Han's avatar Yan Han
Browse files

Fix stuck HDMI-CEC actions after boot

Ensures that all queued actions on local devices are started after
boot. Previously, an unstarted SendKeyAction could stick around after
boot, blocking any future SendKeyAction from being created.

Bug: 193188675
Test: atest HdmiControlServiceTest#normalBoot_queuedActionsStartedAfterBoot

      manual test: spam volume up on boot with IR volume control enabled

Change-Id: I0050ca927bdba939b0b0030a6aa2f6235b11ff5c
Merged-In: I0050ca927bdba939b0b0030a6aa2f6235b11ff5c
(cherry picked from commit 22dc89a8)
(cherry picked from commit 66b6a8cc17d3c2f4d7d3a09369f7538633c43259)
parent b370ca08
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -634,6 +634,12 @@ public class HdmiControlService extends SystemService {
        // on boot, if device is interactive, set HDMI CEC state as powered on as well
        if (mPowerManager.isInteractive() && isPowerStandbyOrTransient()) {
            mPowerStatusController.setPowerStatus(HdmiControlManager.POWER_STATUS_ON);
            // Start all actions that were queued because the device was in standby
            if (mAddressAllocated) {
                for (HdmiCecLocalDevice localDevice : getAllLocalDevices()) {
                    localDevice.startQueuedActions();
                }
            }
        }
    }

+15 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
@@ -59,6 +61,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
@@ -320,6 +323,18 @@ public class HdmiControlServiceTest {
        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportPowerStatus);
    }

    @Test
    public void normalBoot_queuedActionsStartedAfterBoot() {
        Mockito.clearInvocations(mAudioSystemDeviceSpy);
        Mockito.clearInvocations(mPlaybackDeviceSpy);

        mHdmiControlServiceSpy.onBootPhase(PHASE_BOOT_COMPLETED);
        mTestLooper.dispatchAll();

        verify(mAudioSystemDeviceSpy, times(1)).startQueuedActions();
        verify(mPlaybackDeviceSpy, times(1)).startQueuedActions();
    }

    @Test
    public void initialPowerStatus_normalBoot_goToStandby_broadcastsPowerStatus_2_0() {
        mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(