Revert "Move onBeforeUserSwitching call to the beginning of the user switch."

This reverts commit bd1399244a3cef79f5d8e3b07b2e29452685ff0a.

Reason for revert: DF.daily blocking bug: b/369294724
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:11b16fe5a2aea9baa56e7aabd046bfb62b91dcf7)
Merged-In: I4f5f4ccc3d22d8197d0da2c5231a74ebf3538f61
Change-Id: I4f5f4ccc3d22d8197d0da2c5231a74ebf3538f61
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 94eb5a3..b186eaa 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -1986,7 +1986,6 @@
                 // it should be moved outside, but for now it's not as there are many calls to
                 // external components here afterwards
                 updateProfileRelatedCaches();
-                dispatchOnBeforeUserSwitching(userId);
                 mInjector.getWindowManager().setCurrentUser(userId);
                 mInjector.reportCurWakefulnessUsageEvent();
                 if (userSwitchUiEnabled) {
@@ -2285,25 +2284,6 @@
         mUserSwitchObservers.finishBroadcast();
     }
 
-    private void dispatchOnBeforeUserSwitching(@UserIdInt int newUserId) {
-        final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
-        t.traceBegin("dispatchOnBeforeUserSwitching-" + newUserId);
-        final int observerCount = mUserSwitchObservers.beginBroadcast();
-        for (int i = 0; i < observerCount; i++) {
-            final String name = "#" + i + " " + mUserSwitchObservers.getBroadcastCookie(i);
-            t.traceBegin("onBeforeUserSwitching-" + name);
-            try {
-                mUserSwitchObservers.getBroadcastItem(i).onBeforeUserSwitching(newUserId);
-            } catch (RemoteException e) {
-                // Ignore
-            } finally {
-                t.traceEnd();
-            }
-        }
-        mUserSwitchObservers.finishBroadcast();
-        t.traceEnd();
-    }
-
     /** Called on handler thread */
     @VisibleForTesting
     void dispatchUserSwitchComplete(@UserIdInt int oldUserId, @UserIdInt int newUserId) {
@@ -2519,6 +2499,17 @@
 
         final int observerCount = mUserSwitchObservers.beginBroadcast();
         if (observerCount > 0) {
+            for (int i = 0; i < observerCount; i++) {
+                final String name = "#" + i + " " + mUserSwitchObservers.getBroadcastCookie(i);
+                t.traceBegin("onBeforeUserSwitching-" + name);
+                try {
+                    mUserSwitchObservers.getBroadcastItem(i).onBeforeUserSwitching(newUserId);
+                } catch (RemoteException e) {
+                    // Ignore
+                } finally {
+                    t.traceEnd();
+                }
+            }
             final ArraySet<String> curWaitingUserSwitchCallbacks = new ArraySet<>();
             synchronized (mLock) {
                 uss.switching = true;
diff --git a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
index 31ad25d..a25621a 100644
--- a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
@@ -432,7 +432,6 @@
         mUserController.registerUserSwitchObserver(observer, "mock");
         // Start user -- this will update state of mUserController
         mUserController.startUser(TEST_USER_ID, USER_START_MODE_FOREGROUND);
-        verify(observer, times(1)).onBeforeUserSwitching(eq(TEST_USER_ID));
         Message reportMsg = mInjector.mHandler.getMessageForCode(REPORT_USER_SWITCH_MSG);
         assertNotNull(reportMsg);
         UserState userState = (UserState) reportMsg.obj;
@@ -441,6 +440,7 @@
         // Call dispatchUserSwitch and verify that observer was called only once
         mInjector.mHandler.clearAllRecordedMessages();
         mUserController.dispatchUserSwitch(userState, oldUserId, newUserId);
+        verify(observer, times(1)).onBeforeUserSwitching(eq(TEST_USER_ID));
         verify(observer, times(1)).onUserSwitching(eq(TEST_USER_ID), any());
         Set<Integer> expectedCodes = Collections.singleton(CONTINUE_USER_SWITCH_MSG);
         Set<Integer> actualCodes = mInjector.mHandler.getMessageCodes();
@@ -463,7 +463,6 @@
         mUserController.registerUserSwitchObserver(observer, "mock");
         // Start user -- this will update state of mUserController
         mUserController.startUser(TEST_USER_ID, USER_START_MODE_FOREGROUND);
-        verify(observer, times(1)).onBeforeUserSwitching(eq(TEST_USER_ID));
         Message reportMsg = mInjector.mHandler.getMessageForCode(REPORT_USER_SWITCH_MSG);
         assertNotNull(reportMsg);
         UserState userState = (UserState) reportMsg.obj;
@@ -472,6 +471,7 @@
         // Call dispatchUserSwitch and verify that observer was called only once
         mInjector.mHandler.clearAllRecordedMessages();
         mUserController.dispatchUserSwitch(userState, oldUserId, newUserId);
+        verify(observer, times(1)).onBeforeUserSwitching(eq(TEST_USER_ID));
         verify(observer, times(1)).onUserSwitching(eq(TEST_USER_ID), any());
         // Verify that CONTINUE_USER_SWITCH_MSG is not sent (triggers timeout)
         Set<Integer> actualCodes = mInjector.mHandler.getMessageCodes();