Snap for 7906314 from c7f7d7c5b5b7cbc9c2116a8ce2cef2c0a1207cad to sc-v2-release

Change-Id: I4aa1599558097d9374cbfec3d3559ba5af2105b0
diff --git a/src/com/android/internal/car/CarServiceHelperService.java b/src/com/android/internal/car/CarServiceHelperService.java
index 4331788..20e53b8 100644
--- a/src/com/android/internal/car/CarServiceHelperService.java
+++ b/src/com/android/internal/car/CarServiceHelperService.java
@@ -693,6 +693,11 @@
                 return null;
             }
         }
+
+        @Override
+        public void sendInitialUser(UserHandle user) {
+            mCarServiceProxy.saveInitialUser(user);
+        }
     }
 
     private class ICarWatchdogMonitorImpl extends ICarWatchdogMonitor.Stub {
diff --git a/src/com/android/internal/car/CarServiceProxy.java b/src/com/android/internal/car/CarServiceProxy.java
index 42c344b..9c1f06c 100644
--- a/src/com/android/internal/car/CarServiceProxy.java
+++ b/src/com/android/internal/car/CarServiceProxy.java
@@ -113,7 +113,8 @@
 
     @GuardedBy("mLock")
     private ICarSystemServerClient mCarService;
-
+    @GuardedBy("mLock")
+    private UserHandle mInitialUser;
     private final CarServiceHelperService mCarServiceHelperService;
     private final UserMetrics mUserMetrics = new UserMetrics();
 
@@ -136,9 +137,37 @@
             runQueuedOperationLocked(PO_ON_FACTORY_RESET);
         }
         sendLifeCycleEvents();
+        sendInitialUser();
         t.traceEnd();
     }
 
+    private void sendInitialUser() {
+        UserHandle initialUser;
+        ICarSystemServerClient carService;
+        synchronized (mLock) {
+            initialUser = mInitialUser;
+            carService = mCarService;
+        }
+        if (initialUser != null && carService != null) {
+            try {
+                carService.setInitialUser(initialUser);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "RemoteException from car service while calling setInitialUser.", e);
+            }
+        } else {
+            Slog.i(TAG, "Didn't send Initial User, User: " + initialUser + " , CarService: "
+                    + carService);
+        }
+    }
+
+    void saveInitialUser(UserHandle user) {
+        synchronized (mLock) {
+            if (user != null || user.getIdentifier() != UserHandle.USER_NULL) {
+                mInitialUser = user;
+            }
+        }
+    }
+
     @GuardedBy("mLock")
     private void runQueuedOperationLocked(@PendingOperationId int operationId) {
         PendingOperation pendingOperation = mPendingOperations.get(operationId);
@@ -453,6 +482,7 @@
         writer.println("CarServiceProxy");
         writer.increaseIndent();
         writer.printf("mLastSwitchedUser=%s\n", mLastSwitchedUser);
+        writer.printf("mInitialUser=%s\n", mInitialUser);
         writer.printf("mLastUserLifecycle:\n");
         int user0Lifecycle = mLastUserLifecycle.get(UserHandle.USER_SYSTEM, 0);
         if (user0Lifecycle != 0) {