Merge "Revert "Make sure userSwitchComplete is dispatched after screen is unfrozen.""
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index d296a8e..82d239f 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -2185,6 +2185,8 @@
         mHandler.sendMessage(mHandler.obtainMessage(COMPLETE_USER_SWITCH_MSG, newUserId, 0));
 
         uss.switching = false;
+        mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
+        mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_COMPLETE_MSG, newUserId, 0));
         stopGuestOrEphemeralUserIfBackground(oldUserId);
         stopUserOnSwitchIfEnforced(oldUserId);
         if (oldUserId == UserHandle.USER_SYSTEM) {
@@ -2198,20 +2200,20 @@
 
     @VisibleForTesting
     void completeUserSwitch(int newUserId) {
-        final Runnable runnable = () -> {
-            unfreezeScreen();
-            mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
-            mHandler.sendMessage(mHandler.obtainMessage(
-                    REPORT_USER_SWITCH_COMPLETE_MSG, newUserId, 0));
-        };
-
         if (isUserSwitchUiEnabled()) {
             // If there is no challenge set, dismiss the keyguard right away
             if (!mInjector.getKeyguardManager().isDeviceSecure(newUserId)) {
                 // Wait until the keyguard is dismissed to unfreeze
-                mInjector.dismissKeyguard(runnable, "User Switch");
+                mInjector.dismissKeyguard(
+                        new Runnable() {
+                            public void run() {
+                                unfreezeScreen();
+                            }
+                        },
+                        "User Switch");
+                return;
             } else {
-                runnable.run();
+                unfreezeScreen();
             }
         }
     }