CEC: Check standby action availability before request for sleep mode

When the playback device is asked to go to Standby state with <Standby>
message, it needs to check whether it can accept the request or
not. This check should be done before asking the system for sleep mode.

Additionally, this change will fix the behavior after screen
timeout. After the timeout, playback device may go into sleep mode, but
canGoToStandby() check will prevent the device from tracking the right
current power status value. So need to set the status properly, and keep
HdmiCecLocalDevices enabled for accepting future CEC commands.

Bug: 30182748
Test: Check fugu screen after turning off/on Samsung TV and
Archer. Also tested the case of screen timeout.
Change-Id: Idbcd7abd5d4e22942845760f77f7f7e622b987c0
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 5dc9d02..72ee218 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -2011,6 +2011,9 @@
     @ServiceThreadOnly
     void standby() {
         assertRunOnServiceThread();
+        if (!canGoToStandby()) {
+            return;
+        }
         mStandbyMessageReceived = true;
         mPowerManager.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_HDMI, 0);
         // PowerManger will send the broadcast Intent.ACTION_SCREEN_OFF and after this gets
@@ -2038,10 +2041,13 @@
     @ServiceThreadOnly
     private void onStandby(final int standbyAction) {
         assertRunOnServiceThread();
-        if (!canGoToStandby()) return;
         mPowerStatus = HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY;
         invokeVendorCommandListenersOnControlStateChanged(false,
                 HdmiControlManager.CONTROL_STATE_CHANGED_REASON_STANDBY);
+        if (!canGoToStandby()) {
+            mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
+            return;
+        }
 
         final List<HdmiCecLocalDevice> devices = getAllLocalDevices();
         disableDevices(new PendingActionClearedCallback() {