Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 695c7769 authored by Anna Bauza's avatar Anna Bauza Committed by Automerger Merge Worker
Browse files

Merge "fix: Refactor User Lifecycle Event and Report metrics logging" into...

Merge "fix: Refactor User Lifecycle Event and Report metrics logging" into udc-dev am: 03238a8a am: 66c76cb6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21469411



Change-Id: I3e95590e45613dd0bdb85b350652d0c645434918
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 77712629 66c76cb6
Loading
Loading
Loading
Loading
+0 −33
Original line number Original line Diff line number Diff line
@@ -65,7 +65,6 @@ import android.util.Log;
import android.view.WindowManager.LayoutParams;
import android.view.WindowManager.LayoutParams;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.util.FrameworkStatsLog;


import java.io.IOException;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
@@ -2532,38 +2531,6 @@ public class UserManager {
        return USER_TYPE_PROFILE_CLONE.equals(userType);
        return USER_TYPE_PROFILE_CLONE.equals(userType);
    }
    }


    /**
     * Returns the enum defined in the statsd UserLifecycleJourneyReported atom corresponding to the
     * user type.
     * @hide
     */
    public static int getUserTypeForStatsd(@NonNull String userType) {
        switch (userType) {
            case USER_TYPE_FULL_SYSTEM:
                return FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__FULL_SYSTEM;
            case USER_TYPE_FULL_SECONDARY:
                return FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__FULL_SECONDARY;
            case USER_TYPE_FULL_GUEST:
                return FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__FULL_GUEST;
            case USER_TYPE_FULL_DEMO:
                return FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__FULL_DEMO;
            case USER_TYPE_FULL_RESTRICTED:
                return FrameworkStatsLog
                        .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__FULL_RESTRICTED;
            case USER_TYPE_PROFILE_MANAGED:
                return FrameworkStatsLog
                        .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__PROFILE_MANAGED;
            case USER_TYPE_SYSTEM_HEADLESS:
                return FrameworkStatsLog
                        .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__SYSTEM_HEADLESS;
            case USER_TYPE_PROFILE_CLONE:
                return FrameworkStatsLog
                        .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__PROFILE_CLONE;
            default:
                return FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__TYPE_UNKNOWN;
        }
    }

    /**
    /**
     * @hide
     * @hide
     * @deprecated Use {@link #isRestrictedProfile()}
     * @deprecated Use {@link #isRestrictedProfile()}
+2 −2
Original line number Original line Diff line number Diff line
@@ -67,7 +67,6 @@ import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.Trace;
import android.os.Trace;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.EventLog;
import android.util.IndentingPrintWriter;
import android.util.IndentingPrintWriter;
@@ -78,6 +77,7 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.os.TimeoutRecord;
import com.android.internal.os.TimeoutRecord;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.pm.UserJourneyLogger;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerInternal;


import dalvik.annotation.optimization.NeverCompile;
import dalvik.annotation.optimization.NeverCompile;
@@ -1518,7 +1518,7 @@ public class BroadcastQueueImpl extends BroadcastQueue {
            final UserInfo userInfo =
            final UserInfo userInfo =
                    (umInternal != null) ? umInternal.getUserInfo(r.userId) : null;
                    (umInternal != null) ? umInternal.getUserInfo(r.userId) : null;
            if (userInfo != null) {
            if (userInfo != null) {
                userType = UserManager.getUserTypeForStatsd(userInfo.userType);
                userType = UserJourneyLogger.getUserTypeForStatsd(userInfo.userType);
            }
            }
            Slog.i(TAG_BROADCAST,
            Slog.i(TAG_BROADCAST,
                    "BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED action:"
                    "BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED action:"
+82 −245

File changed.

Preview size limit exceeded, changes collapsed.

+552 −0

File added.

Preview size limit exceeded, changes collapsed.

+64 −158
Original line number Original line Diff line number Diff line
@@ -23,6 +23,15 @@ import static android.os.UserManager.DISALLOW_USER_SWITCH;
import static android.os.UserManager.SYSTEM_USER_MODE_EMULATION_PROPERTY;
import static android.os.UserManager.SYSTEM_USER_MODE_EMULATION_PROPERTY;
import static android.os.UserManager.USER_OPERATION_ERROR_UNKNOWN;
import static android.os.UserManager.USER_OPERATION_ERROR_UNKNOWN;


import static com.android.server.pm.UserJourneyLogger.ERROR_CODE_ABORTED;
import static com.android.server.pm.UserJourneyLogger.ERROR_CODE_UNSPECIFIED;
import static com.android.server.pm.UserJourneyLogger.ERROR_CODE_USER_ALREADY_AN_ADMIN;
import static com.android.server.pm.UserJourneyLogger.ERROR_CODE_USER_IS_NOT_AN_ADMIN;
import static com.android.server.pm.UserJourneyLogger.USER_JOURNEY_GRANT_ADMIN;
import static com.android.server.pm.UserJourneyLogger.USER_JOURNEY_REVOKE_ADMIN;
import static com.android.server.pm.UserJourneyLogger.USER_JOURNEY_USER_CREATE;
import static com.android.server.pm.UserJourneyLogger.USER_JOURNEY_USER_REMOVE;

import android.Manifest;
import android.Manifest;
import android.accounts.Account;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManager;
@@ -162,7 +171,6 @@ import java.util.List;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReference;
@@ -519,6 +527,8 @@ public class UserManagerService extends IUserManager.Stub {
    @GuardedBy("mUserLifecycleListeners")
    @GuardedBy("mUserLifecycleListeners")
    private final ArrayList<UserLifecycleListener> mUserLifecycleListeners = new ArrayList<>();
    private final ArrayList<UserLifecycleListener> mUserLifecycleListeners = new ArrayList<>();


    private final UserJourneyLogger mUserJourneyLogger = new UserJourneyLogger();

    private final LockPatternUtils mLockPatternUtils;
    private final LockPatternUtils mLockPatternUtils;


    private final String ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK =
    private final String ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK =
@@ -1580,45 +1590,56 @@ public class UserManagerService extends IUserManager.Stub {
    @Override
    @Override
    public void setUserAdmin(@UserIdInt int userId) {
    public void setUserAdmin(@UserIdInt int userId) {
        checkManageUserAndAcrossUsersFullPermission("set user admin");
        checkManageUserAndAcrossUsersFullPermission("set user admin");
        final long sessionId = logGrantAdminJourneyBegin(userId);
        mUserJourneyLogger.logUserJourneyBegin(userId, USER_JOURNEY_GRANT_ADMIN);
        UserInfo info;
        UserInfo info;
        synchronized (mPackagesLock) {
        synchronized (mPackagesLock) {
            synchronized (mUsersLock) {
            synchronized (mUsersLock) {
                info = getUserInfoLU(userId);
                info = getUserInfoLU(userId);
            }
            }
            if (info == null || info.isAdmin()) {
            if (info == null) {
                // Exit if no user found with that id, or the user is already an Admin.
                // Exit if no user found with that id,
                logUserJourneyError(sessionId,
                mUserJourneyLogger.logNullUserJourneyError(USER_JOURNEY_GRANT_ADMIN,
                        FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN,
                        getCurrentUserId(), userId, /* userType */ "", /* userFlags */ -1);
                        userId);
                return;
            } else if (info.isAdmin()) {
                // Exit if the user is already an Admin.
                mUserJourneyLogger.logUserJourneyFinishWithError(getCurrentUserId(), info,
                        USER_JOURNEY_GRANT_ADMIN, ERROR_CODE_USER_ALREADY_AN_ADMIN);
                return;
                return;
            }
            }
            info.flags ^= UserInfo.FLAG_ADMIN;
            info.flags ^= UserInfo.FLAG_ADMIN;
            writeUserLP(getUserDataLU(info.id));
            writeUserLP(getUserDataLU(info.id));
        }
        }
        logGrantAdminJourneyFinish(sessionId, userId, info.userType, info.flags);
        mUserJourneyLogger.logUserJourneyFinishWithError(getCurrentUserId(), info,
                USER_JOURNEY_GRANT_ADMIN, ERROR_CODE_UNSPECIFIED);
    }
    }


    @Override
    @Override
    public void revokeUserAdmin(@UserIdInt int userId) {
    public void revokeUserAdmin(@UserIdInt int userId) {
        checkManageUserAndAcrossUsersFullPermission("revoke admin privileges");
        checkManageUserAndAcrossUsersFullPermission("revoke admin privileges");
        final long sessionId = logRevokeAdminJourneyBegin(userId);
        mUserJourneyLogger.logUserJourneyBegin(userId, USER_JOURNEY_REVOKE_ADMIN);
        UserData user;
        UserData user;
        synchronized (mPackagesLock) {
        synchronized (mPackagesLock) {
            synchronized (mUsersLock) {
            synchronized (mUsersLock) {
                user = getUserDataLU(userId);
                user = getUserDataLU(userId);
                if (user == null || !user.info.isAdmin()) {
                if (user == null) {
                    // Exit if no user found with that id, or the user is not an Admin.
                    // Exit if no user found with that id
                    logUserJourneyError(sessionId, FrameworkStatsLog
                    mUserJourneyLogger.logNullUserJourneyError(
                                    .USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN,
                            USER_JOURNEY_REVOKE_ADMIN,
                            userId);
                            getCurrentUserId(), userId, "", -1);
                    return;
                } else if (!user.info.isAdmin()) {
                    // Exit if no user is not an Admin.
                    mUserJourneyLogger.logUserJourneyFinishWithError(getCurrentUserId(), user.info,
                            USER_JOURNEY_REVOKE_ADMIN, ERROR_CODE_USER_IS_NOT_AN_ADMIN);
                    return;
                    return;
                }
                }
                user.info.flags ^= UserInfo.FLAG_ADMIN;
                user.info.flags ^= UserInfo.FLAG_ADMIN;
                writeUserLP(user);
                writeUserLP(user);
            }
            }
        }
        }
        logRevokeAdminJourneyFinish(sessionId, userId, user.info.userType, user.info.flags);
        mUserJourneyLogger.logUserJourneyFinishWithError(getCurrentUserId(), user.info,
                USER_JOURNEY_REVOKE_ADMIN, ERROR_CODE_UNSPECIFIED);
    }
    }


    /**
    /**
@@ -4700,16 +4721,20 @@ public class UserManagerService extends IUserManager.Stub {
        final int noneUserId = -1;
        final int noneUserId = -1;
        final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
        final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
        t.traceBegin("createUser-" + flags);
        t.traceBegin("createUser-" + flags);
        final long sessionId = logUserCreateJourneyBegin(noneUserId);
        mUserJourneyLogger.logUserJourneyBegin(noneUserId, USER_JOURNEY_USER_CREATE);
        UserInfo newUser = null;
        UserInfo newUser = null;
        try {
        try {
            newUser = createUserInternalUncheckedNoTracing(name, userType, flags, parentId,
            newUser = createUserInternalUncheckedNoTracing(name, userType, flags, parentId,
                        preCreate, disallowedPackages, t, token);
                        preCreate, disallowedPackages, t, token);
            return newUser;
            return newUser;
        } finally {
        } finally {
            logUserCreateJourneyFinish(sessionId,
            if (newUser != null) {
                    newUser != null ? newUser.id : noneUserId, userType, flags,
                mUserJourneyLogger.logUserCreateJourneyFinish(getCurrentUserId(), newUser);
                    newUser != null);
            } else {
                mUserJourneyLogger.logNullUserJourneyError(
                        USER_JOURNEY_USER_CREATE,
                        getCurrentUserId(), noneUserId, userType, flags);
            }
            t.traceEnd();
            t.traceEnd();
        }
        }
    }
    }
@@ -5198,137 +5223,6 @@ public class UserManagerService extends IUserManager.Stub {
                && !userTypeDetails.getName().equals(UserManager.USER_TYPE_FULL_RESTRICTED);
                && !userTypeDetails.getName().equals(UserManager.USER_TYPE_FULL_RESTRICTED);
    }
    }


    private long logUserCreateJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE,
                userId);
    }

    private void logUserCreateJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags, boolean finish) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE,
                userId, userType, flags, finish);
    }

    private long logUserRemoveJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE,
                userId);
    }

    private void logUserRemoveJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags, boolean finish) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE,
                userId, userType, flags, finish);
    }

    private long logGrantAdminJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN,
                userId);
    }

    private void logGrantAdminJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN,
                userId, userType, flags, true);
    }

    private long logRevokeAdminJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN,
                userId);
    }

    private void logRevokeAdminJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN,
                userId, userType, flags, true);
    }

    private void logUserJourneyFinish(long sessionId, int journey, @UserIdInt int userId,
            String userType, @UserInfoFlag int flags, boolean finish) {

        // log the journey atom with the user metadata
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED, sessionId,
                journey, /* origin_user= */ getCurrentUserId(), userId,
                UserManager.getUserTypeForStatsd(userType), flags);

        int event;
        switch (journey) {
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__CREATE_USER;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REMOVE_USER;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__GRANT_ADMIN;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REVOKE_ADMIN;
                break;
            default:
                throw new IllegalArgumentException("Journey " + journey + " not expected.");
        }
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                event,
                finish ? FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__FINISH
                        : FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__NONE);
    }

    private long logUserJourneyBegin(int journey, @UserIdInt int userId) {
        final long sessionId = ThreadLocalRandom.current().nextLong(1, Long.MAX_VALUE);

        // log the event atom to indicate the event start
        int event;
        switch (journey) {
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__CREATE_USER;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REMOVE_USER;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__GRANT_ADMIN;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REVOKE_ADMIN;
                break;
            default:
                throw new IllegalArgumentException("Journey " + journey + " not expected.");
        }

        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                event, FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__BEGIN);
        return sessionId;
    }

    private void logUserJourneyError(long sessionId, int journey, @UserIdInt int userId) {

        // log the journey atom with the user metadata
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED, sessionId,
                journey, /* origin_user= */ getCurrentUserId(), userId);

        int event;
        switch (journey) {
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__GRANT_ADMIN;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REVOKE_ADMIN;
                break;
            default:
                throw new IllegalArgumentException("Journey " + journey + " not expected.");
        }
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                event, FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__ERROR);
    }

    /** Register callbacks for statsd pulled atoms. */
    /** Register callbacks for statsd pulled atoms. */
    private void registerStatsCallbacks() {
    private void registerStatsCallbacks() {
        final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
@@ -5352,7 +5246,8 @@ public class UserManagerService extends IUserManager.Stub {
            if (size > 1) {
            if (size > 1) {
                for (int idx = 0; idx < size; idx++) {
                for (int idx = 0; idx < size; idx++) {
                    final UserInfo user = users.get(idx);
                    final UserInfo user = users.get(idx);
                    final int userTypeStandard = UserManager.getUserTypeForStatsd(user.userType);
                    final int userTypeStandard = mUserJourneyLogger
                            .getUserTypeForStatsd(user.userType);
                    final String userTypeCustom = (userTypeStandard == FrameworkStatsLog
                    final String userTypeCustom = (userTypeStandard == FrameworkStatsLog
                            .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__TYPE_UNKNOWN)
                            .USER_LIFECYCLE_JOURNEY_REPORTED__USER_TYPE__TYPE_UNKNOWN)
                            ?
                            ?
@@ -5635,7 +5530,7 @@ public class UserManagerService extends IUserManager.Stub {
                writeUserLP(userData);
                writeUserLP(userData);
            }
            }


            final long sessionId = logUserRemoveJourneyBegin(userId);
            mUserJourneyLogger.logUserJourneyBegin(userId, USER_JOURNEY_USER_REMOVE);


            try {
            try {
                mAppOpsService.removeUser(userId);
                mAppOpsService.removeUser(userId);
@@ -5657,13 +5552,17 @@ public class UserManagerService extends IUserManager.Stub {
                            @Override
                            @Override
                            public void userStopped(int userIdParam) {
                            public void userStopped(int userIdParam) {
                                finishRemoveUser(userIdParam);
                                finishRemoveUser(userIdParam);
                                logUserRemoveJourneyFinish(sessionId, userIdParam,
                                int originUserId = UserManagerService.this.getCurrentUserId();
                                        userData.info.userType, userData.info.flags, true);
                                mUserJourneyLogger.logUserJourneyFinishWithError(originUserId,
                                        userData.info, USER_JOURNEY_USER_REMOVE,
                                        ERROR_CODE_UNSPECIFIED);
                            }
                            }
                            @Override
                            @Override
                            public void userStopAborted(int userIdParam) {
                            public void userStopAborted(int userIdParam) {
                                logUserRemoveJourneyFinish(sessionId, userIdParam,
                                int originUserId = UserManagerService.this.getCurrentUserId();
                                        userData.info.userType, userData.info.flags, false);
                                mUserJourneyLogger.logUserJourneyFinishWithError(originUserId,
                                        userData.info, USER_JOURNEY_USER_REMOVE,
                                        ERROR_CODE_ABORTED);
                            }
                            }
                        });
                        });
            } catch (RemoteException e) {
            } catch (RemoteException e) {
@@ -7297,9 +7196,9 @@ public class UserManagerService extends IUserManager.Stub {
                final UserInfo userInfo = getUserInfo(userIds[i]);
                final UserInfo userInfo = getUserInfo(userIds[i]);
                if (userInfo == null) {
                if (userInfo == null) {
                    // Not possible because the input user ids should all be valid
                    // Not possible because the input user ids should all be valid
                    userTypes[i] = UserManager.getUserTypeForStatsd("");
                    userTypes[i] = mUserJourneyLogger.getUserTypeForStatsd("");
                } else {
                } else {
                    userTypes[i] = UserManager.getUserTypeForStatsd(userInfo.userType);
                    userTypes[i] = mUserJourneyLogger.getUserTypeForStatsd(userInfo.userType);
                }
                }
            }
            }
            return userTypes;
            return userTypes;
@@ -7536,4 +7435,11 @@ public class UserManagerService extends IUserManager.Stub {
                .getBoolean(R.bool.config_canSwitchToHeadlessSystemUser);
                .getBoolean(R.bool.config_canSwitchToHeadlessSystemUser);
    }
    }


    /**
     * Returns instance of {@link com.android.server.pm.UserJourneyLogger}.
     */
    public UserJourneyLogger getUserJourneyLogger() {
        return mUserJourneyLogger;
    }

}
}
Loading