Keyguard: fix possible divergent state

Fixes an issue where the state in SystemUI and AM/WM could
get out of sync: If the keyguardGoingAway transition is
started and then later canceled by SystemUI, it never
tells AM that it canceled it.
This causes SystemUI to show itself in keyguard mode,
meanwhile AM/WM do not hide the underlying app because
the status bar is in the going away transition as far
as it is concerned.

Change-Id: I5966f0655fd694ae599a83dda7a9f6463088632b
Fixes: 76367931
Test: delay keyguard going away callback, unlock phone, during the delay, remove SIM; verify it does not end up in bad state
diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java
index 1b7f75b..5764382 100644
--- a/services/core/java/com/android/server/am/KeyguardController.java
+++ b/services/core/java/com/android/server/am/KeyguardController.java
@@ -121,6 +121,8 @@
     void setKeyguardShown(boolean keyguardShowing, boolean aodShowing,
             int secondaryDisplayShowing) {
         boolean showingChanged = keyguardShowing != mKeyguardShowing || aodShowing != mAodShowing;
+        // If keyguard is going away, but SystemUI aborted the transition, need to reset state.
+        showingChanged |= mKeyguardGoingAway && keyguardShowing;
         if (!showingChanged && secondaryDisplayShowing == mSecondaryDisplayShowing) {
             return;
         }