Loading services/core/java/com/android/server/pm/UserManagerService.java +73 −5 Original line number Diff line number Diff line Loading @@ -1481,36 +1481,45 @@ public class UserManagerService extends IUserManager.Stub { @Override public void setUserAdmin(@UserIdInt int userId) { checkManageUserAndAcrossUsersFullPermission("set user admin"); synchronized (mPackagesLock) { final long sessionId = logGrantAdminJourneyBegin(userId); UserInfo info; synchronized (mPackagesLock) { synchronized (mUsersLock) { info = getUserInfoLU(userId); } if (info == null || info.isAdmin()) { // Exit if no user found with that id, or the user is already an Admin. logUserJourneyError(sessionId, FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN, userId); return; } info.flags ^= UserInfo.FLAG_ADMIN; writeUserLP(getUserDataLU(info.id)); } logGrantAdminJourneyFinish(sessionId, userId, info.userType, info.flags); } @Override public void revokeUserAdmin(@UserIdInt int userId) { checkManageUserAndAcrossUsersFullPermission("revoke admin privileges"); final long sessionId = logRevokeAdminJourneyBegin(userId); UserData user; synchronized (mPackagesLock) { synchronized (mUsersLock) { UserData user = getUserDataLU(userId); user = getUserDataLU(userId); if (user == null || !user.info.isAdmin()) { // Exit if no user found with that id, or the user is not an Admin. logUserJourneyError(sessionId, FrameworkStatsLog .USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN, userId); return; } user.info.flags ^= UserInfo.FLAG_ADMIN; writeUserLP(user); } } logRevokeAdminJourneyFinish(sessionId, userId, user.info.userType, user.info.flags); } /** Loading Loading @@ -5147,12 +5156,38 @@ public class UserManagerService extends IUserManager.Stub { 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= */ -1, userId, journey, /* origin_user= */ getCurrentUserId(), userId, UserManager.getUserTypeForStatsd(userType), flags); int event; Loading @@ -5163,6 +5198,12 @@ public class UserManagerService extends IUserManager.Stub { 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."); } Loading @@ -5184,6 +5225,12 @@ public class UserManagerService extends IUserManager.Stub { 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."); } Loading @@ -5193,6 +5240,27 @@ public class UserManagerService extends IUserManager.Stub { 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. */ private void registerStatsCallbacks() { final StatsManager statsManager = mContext.getSystemService(StatsManager.class); Loading Loading
services/core/java/com/android/server/pm/UserManagerService.java +73 −5 Original line number Diff line number Diff line Loading @@ -1481,36 +1481,45 @@ public class UserManagerService extends IUserManager.Stub { @Override public void setUserAdmin(@UserIdInt int userId) { checkManageUserAndAcrossUsersFullPermission("set user admin"); synchronized (mPackagesLock) { final long sessionId = logGrantAdminJourneyBegin(userId); UserInfo info; synchronized (mPackagesLock) { synchronized (mUsersLock) { info = getUserInfoLU(userId); } if (info == null || info.isAdmin()) { // Exit if no user found with that id, or the user is already an Admin. logUserJourneyError(sessionId, FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__GRANT_ADMIN, userId); return; } info.flags ^= UserInfo.FLAG_ADMIN; writeUserLP(getUserDataLU(info.id)); } logGrantAdminJourneyFinish(sessionId, userId, info.userType, info.flags); } @Override public void revokeUserAdmin(@UserIdInt int userId) { checkManageUserAndAcrossUsersFullPermission("revoke admin privileges"); final long sessionId = logRevokeAdminJourneyBegin(userId); UserData user; synchronized (mPackagesLock) { synchronized (mUsersLock) { UserData user = getUserDataLU(userId); user = getUserDataLU(userId); if (user == null || !user.info.isAdmin()) { // Exit if no user found with that id, or the user is not an Admin. logUserJourneyError(sessionId, FrameworkStatsLog .USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__REVOKE_ADMIN, userId); return; } user.info.flags ^= UserInfo.FLAG_ADMIN; writeUserLP(user); } } logRevokeAdminJourneyFinish(sessionId, userId, user.info.userType, user.info.flags); } /** Loading Loading @@ -5147,12 +5156,38 @@ public class UserManagerService extends IUserManager.Stub { 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= */ -1, userId, journey, /* origin_user= */ getCurrentUserId(), userId, UserManager.getUserTypeForStatsd(userType), flags); int event; Loading @@ -5163,6 +5198,12 @@ public class UserManagerService extends IUserManager.Stub { 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."); } Loading @@ -5184,6 +5225,12 @@ public class UserManagerService extends IUserManager.Stub { 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."); } Loading @@ -5193,6 +5240,27 @@ public class UserManagerService extends IUserManager.Stub { 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. */ private void registerStatsCallbacks() { final StatsManager statsManager = mContext.getSystemService(StatsManager.class); Loading