Introduce system user and primary user.

Bug: 19913735
Change-Id: I2c7855915d778cf80a7154314321ddd90e2eaaac
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index b1319cf..5dd5a72 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -209,7 +209,7 @@
                 mUsersDir = new File(dataDir, USER_INFO_DIR);
                 mUsersDir.mkdirs();
                 // Make zeroth user directory, for services to migrate their files to that location
-                File userZeroDir = new File(mUsersDir, "0");
+                File userZeroDir = new File(mUsersDir, String.valueOf(UserHandle.USER_SYSTEM));
                 userZeroDir.mkdirs();
                 mBaseUserPath = baseUserPath;
                 FileUtils.setPermissions(mUsersDir.toString(),
@@ -243,7 +243,7 @@
                 }
             }
         }
-        onUserForeground(UserHandle.USER_OWNER);
+        onUserForeground(UserHandle.USER_SYSTEM);
         mAppOpsService = IAppOpsService.Stub.asInterface(
                 ServiceManager.getService(Context.APP_OPS_SERVICE));
         for (int i = 0; i < mUserIds.length; ++i) {
@@ -256,6 +256,20 @@
     }
 
     @Override
+    public UserInfo getPrimaryUser() {
+        checkManageUsersPermission("query users");
+        synchronized (mPackagesLock) {
+            for (int i = 0; i < mUsers.size(); i++) {
+                UserInfo ui = mUsers.valueAt(i);
+                if (ui.isPrimary()) {
+                    return ui;
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
     public List<UserInfo> getUsers(boolean excludeDying) {
         checkManageUsersPermission("query users");
         synchronized (mPackagesLock) {
@@ -810,22 +824,23 @@
     }
 
     private void fallbackToSingleUserLocked() {
-        // Create the primary user
-        UserInfo primary = new UserInfo(UserHandle.USER_OWNER,
+        // Create the system user
+        // TODO: UserInfo.FLAG_PRIMARY flag should be set on the first human user.
+        UserInfo system = new UserInfo(UserHandle.USER_SYSTEM,
                 mContext.getResources().getString(com.android.internal.R.string.owner_name), null,
                 UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY | UserInfo.FLAG_INITIALIZED);
-        mUsers.put(0, primary);
+        mUsers.put(system.id, system);
         mNextSerialNumber = MIN_USER_ID;
         mUserVersion = USER_VERSION;
 
         Bundle restrictions = new Bundle();
-        mUserRestrictions.append(UserHandle.USER_OWNER, restrictions);
+        mUserRestrictions.append(UserHandle.USER_SYSTEM, restrictions);
 
         updateUserIdsLocked();
         initDefaultGuestRestrictions();
 
         writeUserListLocked();
-        writeUserLocked(primary);
+        writeUserLocked(system);
     }
 
     private void scheduleWriteUserLocked(UserInfo userInfo) {