Loading core/java/android/os/IUserManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ interface IUserManager { UserInfo getPrimaryUser(); List<UserInfo> getUsers(boolean excludeDying); List<UserInfo> getProfiles(int userHandle, boolean enabledOnly); int[] getProfileIds(int userId, boolean enabledOnly); boolean canAddMoreManagedProfiles(int userHandle, boolean allowedToRemoveOne); UserInfo getProfileParent(int userHandle); boolean isSameProfileGroup(int userHandle, int otherUserHandle); Loading core/java/android/os/UserManager.java +36 −8 Original line number Diff line number Diff line Loading @@ -1590,18 +1590,46 @@ public class UserManager { * @return A non-empty list of UserHandles associated with the calling user. */ public List<UserHandle> getUserProfiles() { ArrayList<UserHandle> profiles = new ArrayList<UserHandle>(); List<UserInfo> users; int[] userIds = getProfileIds(UserHandle.myUserId(), true /* enabledOnly */); List<UserHandle> result = new ArrayList<>(userIds.length); for (int userId : userIds) { result.add(UserHandle.of(userId)); } return result; } /** * Returns a list of ids for profiles associated with the specified user including the user * itself. * * @param userId id of the user to return profiles for * @param enabledOnly whether return only {@link UserInfo#isEnabled() enabled} profiles * @return A non-empty list of ids of profiles associated with the specified user. * * @hide */ public int[] getProfileIds(@UserIdInt int userId, boolean enabledOnly) { try { users = mService.getProfiles(UserHandle.myUserId(), true /* enabledOnly */); return mService.getProfileIds(userId, enabledOnly); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } for (UserInfo info : users) { UserHandle userHandle = new UserHandle(info.id); profiles.add(userHandle); } return profiles; /** * @see #getProfileIds(int, boolean) * @hide */ public int[] getProfileIdsWithDisabled(@UserIdInt int userId) { return getProfileIds(userId, false /* enabledOnly */); } /** * @see #getProfileIds(int, boolean) * @hide */ public int[] getEnabledProfileIds(@UserIdInt int userId) { return getProfileIds(userId, true /* enabledOnly */); } /** Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +3 −6 Original line number Diff line number Diff line Loading @@ -1831,14 +1831,11 @@ public class SettingsProvider extends ContentProvider { private void maybeNotifyProfiles(int userId, Uri uri, String name, Set<String> keysCloned) { if (keysCloned.contains(name)) { List<UserInfo> profiles = mUserManager.getProfiles(userId); int size = profiles.size(); for (int i = 0; i < size; i++) { UserInfo profile = profiles.get(i); for (int profileId : mUserManager.getProfileIdsWithDisabled(userId)) { // the notification for userId has already been sent. if (profile.id != userId) { if (profileId != userId) { mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED, profile.id, 0, uri).sendToTarget(); profileId, 0, uri).sendToTarget(); } } } Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +9 −12 Original line number Diff line number Diff line Loading @@ -847,17 +847,16 @@ public class KeyguardViewMediator extends SystemUI { private void doKeyguardLaterForChildProfilesLocked() { UserManager um = UserManager.get(mContext); List<UserInfo> profiles = um.getEnabledProfiles(UserHandle.myUserId()); for (UserInfo info : profiles) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(info.id)) { long userTimeout = getLockTimeout(info.id); for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) { long userTimeout = getLockTimeout(profileId); if (userTimeout == 0) { doKeyguardForChildProfilesLocked(); } else { long userWhen = SystemClock.elapsedRealtime() + userTimeout; Intent lockIntent = new Intent(DELAYED_LOCK_PROFILE_ACTION); lockIntent.putExtra("seq", mDelayedProfileShowingSequence); lockIntent.putExtra(Intent.EXTRA_USER_ID, info.id); lockIntent.putExtra(Intent.EXTRA_USER_ID, profileId); PendingIntent lockSender = PendingIntent.getBroadcast( mContext, 0, lockIntent, PendingIntent.FLAG_CANCEL_CURRENT); mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, Loading @@ -869,10 +868,9 @@ public class KeyguardViewMediator extends SystemUI { private void doKeyguardForChildProfilesLocked() { UserManager um = UserManager.get(mContext); List<UserInfo> profiles = um.getEnabledProfiles(UserHandle.myUserId()); for (UserInfo info : profiles) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(info.id)) { lockProfile(info.id); for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) { lockProfile(profileId); } } } Loading Loading @@ -1482,9 +1480,8 @@ public class KeyguardViewMediator extends SystemUI { final UserHandle currentUser = new UserHandle(KeyguardUpdateMonitor.getCurrentUser()); final UserManager um = (UserManager) mContext.getSystemService( Context.USER_SERVICE); List <UserInfo> userHandles = um.getProfiles(currentUser.getIdentifier()); for (UserInfo ui : userHandles) { mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, ui.getUserHandle()); for (int profileId : um.getProfileIdsWithDisabled(currentUser.getIdentifier())) { mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, UserHandle.of(profileId)); } } else { mBootSendUserPresent = true; Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +8 −8 Original line number Diff line number Diff line Loading @@ -114,8 +114,8 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getProfileOwnerName() { for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { String name = mDevicePolicyManager.getProfileOwnerNameAsUser(profile.id); for (int profileId : mUserManager.getProfileIdsWithDisabled(mCurrentUserId)) { String name = mDevicePolicyManager.getProfileOwnerNameAsUser(profileId); if (name != null) { return name; } Loading @@ -135,13 +135,13 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getProfileVpnName() { for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { if (profile.id == mVpnUserId) { for (int profileId : mUserManager.getProfileIdsWithDisabled(mVpnUserId)) { if (profileId == mVpnUserId) { continue; } VpnConfig cfg = mCurrentVpns.get(profile.id); VpnConfig cfg = mCurrentVpns.get(profileId); if (cfg != null) { return getNameForVpnConfig(cfg, profile.getUserHandle()); return getNameForVpnConfig(cfg, UserHandle.of(profileId)); } } return null; Loading @@ -149,8 +149,8 @@ public class SecurityControllerImpl implements SecurityController { @Override public boolean isVpnEnabled() { for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { if (mCurrentVpns.get(profile.id) != null) { for (int profileId : mUserManager.getProfileIdsWithDisabled(mVpnUserId)) { if (mCurrentVpns.get(profileId) != null) { return true; } } Loading Loading
core/java/android/os/IUserManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ interface IUserManager { UserInfo getPrimaryUser(); List<UserInfo> getUsers(boolean excludeDying); List<UserInfo> getProfiles(int userHandle, boolean enabledOnly); int[] getProfileIds(int userId, boolean enabledOnly); boolean canAddMoreManagedProfiles(int userHandle, boolean allowedToRemoveOne); UserInfo getProfileParent(int userHandle); boolean isSameProfileGroup(int userHandle, int otherUserHandle); Loading
core/java/android/os/UserManager.java +36 −8 Original line number Diff line number Diff line Loading @@ -1590,18 +1590,46 @@ public class UserManager { * @return A non-empty list of UserHandles associated with the calling user. */ public List<UserHandle> getUserProfiles() { ArrayList<UserHandle> profiles = new ArrayList<UserHandle>(); List<UserInfo> users; int[] userIds = getProfileIds(UserHandle.myUserId(), true /* enabledOnly */); List<UserHandle> result = new ArrayList<>(userIds.length); for (int userId : userIds) { result.add(UserHandle.of(userId)); } return result; } /** * Returns a list of ids for profiles associated with the specified user including the user * itself. * * @param userId id of the user to return profiles for * @param enabledOnly whether return only {@link UserInfo#isEnabled() enabled} profiles * @return A non-empty list of ids of profiles associated with the specified user. * * @hide */ public int[] getProfileIds(@UserIdInt int userId, boolean enabledOnly) { try { users = mService.getProfiles(UserHandle.myUserId(), true /* enabledOnly */); return mService.getProfileIds(userId, enabledOnly); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } for (UserInfo info : users) { UserHandle userHandle = new UserHandle(info.id); profiles.add(userHandle); } return profiles; /** * @see #getProfileIds(int, boolean) * @hide */ public int[] getProfileIdsWithDisabled(@UserIdInt int userId) { return getProfileIds(userId, false /* enabledOnly */); } /** * @see #getProfileIds(int, boolean) * @hide */ public int[] getEnabledProfileIds(@UserIdInt int userId) { return getProfileIds(userId, true /* enabledOnly */); } /** Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +3 −6 Original line number Diff line number Diff line Loading @@ -1831,14 +1831,11 @@ public class SettingsProvider extends ContentProvider { private void maybeNotifyProfiles(int userId, Uri uri, String name, Set<String> keysCloned) { if (keysCloned.contains(name)) { List<UserInfo> profiles = mUserManager.getProfiles(userId); int size = profiles.size(); for (int i = 0; i < size; i++) { UserInfo profile = profiles.get(i); for (int profileId : mUserManager.getProfileIdsWithDisabled(userId)) { // the notification for userId has already been sent. if (profile.id != userId) { if (profileId != userId) { mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED, profile.id, 0, uri).sendToTarget(); profileId, 0, uri).sendToTarget(); } } } Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +9 −12 Original line number Diff line number Diff line Loading @@ -847,17 +847,16 @@ public class KeyguardViewMediator extends SystemUI { private void doKeyguardLaterForChildProfilesLocked() { UserManager um = UserManager.get(mContext); List<UserInfo> profiles = um.getEnabledProfiles(UserHandle.myUserId()); for (UserInfo info : profiles) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(info.id)) { long userTimeout = getLockTimeout(info.id); for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) { long userTimeout = getLockTimeout(profileId); if (userTimeout == 0) { doKeyguardForChildProfilesLocked(); } else { long userWhen = SystemClock.elapsedRealtime() + userTimeout; Intent lockIntent = new Intent(DELAYED_LOCK_PROFILE_ACTION); lockIntent.putExtra("seq", mDelayedProfileShowingSequence); lockIntent.putExtra(Intent.EXTRA_USER_ID, info.id); lockIntent.putExtra(Intent.EXTRA_USER_ID, profileId); PendingIntent lockSender = PendingIntent.getBroadcast( mContext, 0, lockIntent, PendingIntent.FLAG_CANCEL_CURRENT); mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, Loading @@ -869,10 +868,9 @@ public class KeyguardViewMediator extends SystemUI { private void doKeyguardForChildProfilesLocked() { UserManager um = UserManager.get(mContext); List<UserInfo> profiles = um.getEnabledProfiles(UserHandle.myUserId()); for (UserInfo info : profiles) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(info.id)) { lockProfile(info.id); for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) { if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) { lockProfile(profileId); } } } Loading Loading @@ -1482,9 +1480,8 @@ public class KeyguardViewMediator extends SystemUI { final UserHandle currentUser = new UserHandle(KeyguardUpdateMonitor.getCurrentUser()); final UserManager um = (UserManager) mContext.getSystemService( Context.USER_SERVICE); List <UserInfo> userHandles = um.getProfiles(currentUser.getIdentifier()); for (UserInfo ui : userHandles) { mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, ui.getUserHandle()); for (int profileId : um.getProfileIdsWithDisabled(currentUser.getIdentifier())) { mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, UserHandle.of(profileId)); } } else { mBootSendUserPresent = true; Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +8 −8 Original line number Diff line number Diff line Loading @@ -114,8 +114,8 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getProfileOwnerName() { for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { String name = mDevicePolicyManager.getProfileOwnerNameAsUser(profile.id); for (int profileId : mUserManager.getProfileIdsWithDisabled(mCurrentUserId)) { String name = mDevicePolicyManager.getProfileOwnerNameAsUser(profileId); if (name != null) { return name; } Loading @@ -135,13 +135,13 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getProfileVpnName() { for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { if (profile.id == mVpnUserId) { for (int profileId : mUserManager.getProfileIdsWithDisabled(mVpnUserId)) { if (profileId == mVpnUserId) { continue; } VpnConfig cfg = mCurrentVpns.get(profile.id); VpnConfig cfg = mCurrentVpns.get(profileId); if (cfg != null) { return getNameForVpnConfig(cfg, profile.getUserHandle()); return getNameForVpnConfig(cfg, UserHandle.of(profileId)); } } return null; Loading @@ -149,8 +149,8 @@ public class SecurityControllerImpl implements SecurityController { @Override public boolean isVpnEnabled() { for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { if (mCurrentVpns.get(profile.id) != null) { for (int profileId : mUserManager.getProfileIdsWithDisabled(mVpnUserId)) { if (mCurrentVpns.get(profileId) != null) { return true; } } Loading