diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-10-27 08:23:40 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-10-27 08:23:40 +0000 |
commit | c680c7efed68d6b8ea6e647759648c0900d50892 (patch) | |
tree | 9e4fd9a2749453312875f3c905946bcb175bd6ce | |
parent | 35cbd1d5ee4c345ab53f5db62232227514d73035 (diff) | |
parent | 68e23ec2e6b04483cfab37abb7ed32188a22c5fe (diff) | |
download | base-c680c7efed68d6b8ea6e647759648c0900d50892.tar.gz |
Merge "Clear pending actions on local device on wakeup."
-rwxr-xr-x | services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java | 6 | ||||
-rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiControlService.java | 13 |
2 files changed, 16 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index a2cb78d27a57..c27293c3cc09 100755 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -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; } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index e5a8a17df525..a571dc06db97 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -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; |