Merge "Clear pending actions on local device on wakeup." am: c680c7efed

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

Change-Id: I47a79203b319b10121fac3e89a4f6b5b608db666
This commit is contained in:
Treehugger Robot
2021-10-27 08:44:55 +00:00
committed by Automerger Merge Worker
2 changed files with 16 additions and 3 deletions

View File

@@ -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;
}

View File

@@ -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;