@Override
  public UserInfo createUser(String name, int flags) {
    checkManageUsersPermission("Only the system can create users");

    final long ident = Binder.clearCallingIdentity();
    final UserInfo userInfo;
    try {
      synchronized (mInstallLock) {
        synchronized (mPackagesLock) {
          if (isUserLimitReachedLocked()) return null;
          int userId = getNextAvailableIdLocked();
          userInfo = new UserInfo(userId, name, null, flags);
          File userPath = new File(mBaseUserPath, Integer.toString(userId));
          userInfo.serialNumber = mNextSerialNumber++;
          long now = System.currentTimeMillis();
          userInfo.creationTime = (now > EPOCH_PLUS_30_YEARS) ? now : 0;
          userInfo.partial = true;
          Environment.getUserSystemDirectory(userInfo.id).mkdirs();
          mUsers.put(userId, userInfo);
          writeUserListLocked();
          writeUserLocked(userInfo);
          mPm.createNewUserLILPw(userId, userPath);
          userInfo.partial = false;
          writeUserLocked(userInfo);
          updateUserIdsLocked();
        }
      }
      if (userInfo != null) {
        Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
        addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userInfo.id);
        mContext.sendBroadcastAsUser(
            addedIntent, UserHandle.ALL, android.Manifest.permission.MANAGE_USERS);
      }
    } finally {
      Binder.restoreCallingIdentity(ident);
    }
    return userInfo;
  }