Refactored user switch workflow to decouple UserInfo from TargetUser.
UserController calls SystemServiceManager on some stages of the user switch lifecycle, and SystemServiceManager calls the respective callbacks in the SystemService objects it manage. Prior to Android 11, these callbacks would take a @UserIdInt userid, but now they take a TargetUser (which in turns contains a Userinfo). So, currently, UserController calls SystemServiceManager passing the userid, and SystemServiceManager gets the UserInfo from UserManagerService. That works fine most of the time, but there might be some race conditions when a user is removed that can crash the system when such user is stopped (because UserManagerService doesn't have its UserInfo anymore). This CL fixes this issue by refactoring the user switch workflow so: - TargetUser doesn't hold a reference to the UserInfo anymore, but offer the methods needed by SystemService implementations. - SystemServiceManager keeps track of the TargetUser objects used in the callbacks. Test: manual verification Fixes: 159831354 Change-Id: If68ab1b5e247c7389c8cac16432d8b8809507e86
Loading
Please register or sign in to comment