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

Commit 68e23ec2 authored by eric_kuang.rs's avatar eric_kuang.rs Committed by Yan Han
Browse files

Clear pending actions on local device on wakeup.

Test: manual test with AVR after STR (suspend to RAM)
Bug: 186084437

Change-Id: I7d9a7d18a2284cfeae6613c13a22e4a0e411b0ce
parent 56e85bb8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -209,6 +209,12 @@ abstract class HdmiCecLocalDevice {
    void init() {
        assertRunOnServiceThread();
        mPreferredAddress = getPreferredAddress();
        if (mHandler.hasMessages(MSG_DISABLE_DEVICE_TIMEOUT)) {
            // Remove and trigger the queued message for clearing all actions when going to standby.
            // This is necessary because the device may wake up before the message is triggered.
            mHandler.removeMessages(MSG_DISABLE_DEVICE_TIMEOUT);
            handleDisableDeviceTimeout();
        }
        mPendingActionClearedCallback = null;
    }

+10 −3
Original line number Diff line number Diff line
@@ -3131,7 +3131,7 @@ public class HdmiControlService extends SystemService {
                Slog.v(TAG, "On standby-action cleared:" + device.mDeviceType);
                devices.remove(device);
                if (devices.isEmpty()) {
                    onStandbyCompleted(standbyAction);
                    onPendingActionsCleared(standbyAction);
                    // We will not clear local devices here, since some OEM/SOC will keep passing
                    // the received packets until the application processor enters to the sleep
                    // actually.
@@ -3193,10 +3193,17 @@ public class HdmiControlService extends SystemService {
        mHdmiCecNetwork.clearLocalDevices();
    }

    /**
     * Normally called after all devices have cleared their pending actions, to execute the final
     * phase of the standby flow.
     *
     * This can also be called during wakeup, when pending actions are cleared after failing to be
     * cleared during standby. In this case, it does not execute the standby flow.
     */
    @ServiceThreadOnly
    private void onStandbyCompleted(int standbyAction) {
    private void onPendingActionsCleared(int standbyAction) {
        assertRunOnServiceThread();
        Slog.v(TAG, "onStandbyCompleted");
        Slog.v(TAG, "onPendingActionsCleared");

        if (!mPowerStatusController.isPowerStatusTransientToStandby()) {
            return;