Clear pending actions on local device on wakeup.

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

Change-Id: I7d9a7d18a2284cfeae6613c13a22e4a0e411b0ce
This commit is contained in:
eric_kuang.rs
2021-04-22 17:22:35 +08:00
committed by Yan Han
parent 56e85bb8c0
commit 68e23ec2e6
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;