Send admin enabled broadcast in foreground queue

Currently admin enabled broadcast is sent as a background broadcast
upon ACTION_USER_STARTED. This can lead to delays on managed secondary
users. During that period the admin has no chance to apply any
policies, effectively leaving the user unmanaged. Sending it as a
foreground broadcast should speed up that process.

Using a foreground broadcast on ACTION_USER_STARTED can cause a race
condition where the user is not unlocked yet and therefore the
broadcast is omitted (unless the receiver is direct boot aware).
Sending the broadcast upon ACTION_USER_UNLOCKED fixes that issue.

Bug: 64382185
Test: manual
Change-Id: I3a89ba2e64cd6013723699cc1211b0144db254a6
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index 0fda0fe..e8a1811 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -58,6 +58,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.pm.StringParceledListSlice;
 import android.content.pm.UserInfo;
 import android.graphics.Color;
@@ -166,6 +167,11 @@
         mServiceContext.binder.callingUid = DpmMockContext.CALLER_UID;
         when(getServices().packageManager.hasSystemFeature(eq(PackageManager.FEATURE_DEVICE_ADMIN)))
                 .thenReturn(true);
+        doReturn(Collections.singletonList(new ResolveInfo()))
+                .when(getServices().packageManager).queryBroadcastReceiversAsUser(
+                        any(Intent.class),
+                        anyInt(),
+                        any(UserHandle.class));
 
         // By default, pretend all users are running and unlocked.
         when(getServices().userManager.isUserUnlocked(anyInt())).thenReturn(true);