[DO NOT MERGE] Bluetooth support for Headless User

If Headless User 0 is enabled then don't launch Bluetooth until after
user has switched out of 0.  This is specifically an issue for
automotive platforms.

Bug: 118400949
Test: Boot device while headless user 0 is enabled, with a paired
Bluetooth device in a phonecall.

Change-Id: I9ea833df7ae7dc8841102ab9693f3810b31f672f
(cherry picked from commit 195a1c026fb17ab8b4fa0dd812381fe39126d213)
diff --git a/services/core/java/com/android/server/BluetoothService.java b/services/core/java/com/android/server/BluetoothService.java
index 1bf4e3a..6018f00 100644
--- a/services/core/java/com/android/server/BluetoothService.java
+++ b/services/core/java/com/android/server/BluetoothService.java
@@ -18,15 +18,26 @@
 
 import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
+import android.os.SystemProperties;
 
 class BluetoothService extends SystemService {
+    private static final String HEADLESS_SYSTEM_USER = "android.car.systemuser.headless";
+
     private BluetoothManagerService mBluetoothManagerService;
+    private boolean mInitialized = false;
 
     public BluetoothService(Context context) {
         super(context);
         mBluetoothManagerService = new BluetoothManagerService(context);
     }
 
+    private void initialize() {
+        if (!mInitialized) {
+            mBluetoothManagerService.handleOnBootPhase();
+            mInitialized = true;
+        }
+    }
+
     @Override
     public void onStart() {
     }
@@ -36,13 +47,15 @@
         if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
             publishBinderService(BluetoothAdapter.BLUETOOTH_MANAGER_SERVICE,
                     mBluetoothManagerService);
-        } else if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
-            mBluetoothManagerService.handleOnBootPhase();
+        } else if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY &&
+                !SystemProperties.getBoolean(HEADLESS_SYSTEM_USER, false)) {
+            initialize();
         }
     }
 
     @Override
     public void onSwitchUser(int userHandle) {
+        initialize();
         mBluetoothManagerService.handleOnSwitchUser(userHandle);
     }