Skip to content

Commit 920ace0

Browse files
author
Amith Yamasani
committed
Query users excluding any being removed
Keep track of user creation and last logged-in time. adb shell dumpsys users User switcher shouldn't show users about to be removed. No need to check for singleton for activities. Bug: 7194894 Change-Id: Ic9a59ea5bd544920479e191d1a1e8a77f8b6ddcf
1 parent 2f98008 commit 920ace0

File tree

13 files changed

+143
-27
lines changed

13 files changed

+143
-27
lines changed

cmds/pm/src/com/android/commands/pm/Pm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ public void runRemoveUser() {
10251025

10261026
public void runListUsers() {
10271027
try {
1028-
List<UserInfo> users = mUm.getUsers();
1028+
List<UserInfo> users = mUm.getUsers(false);
10291029
if (users == null) {
10301030
System.err.println("Error: couldn't get users");
10311031
} else {

core/java/android/content/pm/UserInfo.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public class UserInfo implements Parcelable {
6868
public String name;
6969
public String iconPath;
7070
public int flags;
71+
public long creationTime;
72+
public long lastLoggedInTime;
7173

7274
public UserInfo(int id, String name, int flags) {
7375
this(id, name, null, flags);
@@ -101,6 +103,8 @@ public UserInfo(UserInfo orig) {
101103
id = orig.id;
102104
flags = orig.flags;
103105
serialNumber = orig.serialNumber;
106+
creationTime = orig.creationTime;
107+
lastLoggedInTime = orig.lastLoggedInTime;
104108
}
105109

106110
public UserHandle getUserHandle() {
@@ -122,6 +126,8 @@ public void writeToParcel(Parcel dest, int parcelableFlags) {
122126
dest.writeString(iconPath);
123127
dest.writeInt(flags);
124128
dest.writeInt(serialNumber);
129+
dest.writeLong(creationTime);
130+
dest.writeLong(lastLoggedInTime);
125131
}
126132

127133
public static final Parcelable.Creator<UserInfo> CREATOR
@@ -140,5 +146,7 @@ private UserInfo(Parcel source) {
140146
iconPath = source.readString();
141147
flags = source.readInt();
142148
serialNumber = source.readInt();
149+
creationTime = source.readLong();
150+
lastLoggedInTime = source.readLong();
143151
}
144152
}

core/java/android/os/IUserManager.aidl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ interface IUserManager {
3030
void setUserName(int userHandle, String name);
3131
void setUserIcon(int userHandle, in Bitmap icon);
3232
Bitmap getUserIcon(int userHandle);
33-
List<UserInfo> getUsers();
33+
List<UserInfo> getUsers(boolean excludeDying);
3434
UserInfo getUserInfo(int userHandle);
3535
void setGuestEnabled(boolean enable);
3636
boolean isGuestEnabled();

core/java/android/os/UserManager.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,23 @@ public UserInfo createUser(String name, int flags) {
116116
*/
117117
public List<UserInfo> getUsers() {
118118
try {
119-
return mService.getUsers();
119+
return mService.getUsers(false);
120+
} catch (RemoteException re) {
121+
Log.w(TAG, "Could not get user list", re);
122+
return null;
123+
}
124+
}
125+
126+
/**
127+
* Returns information for all users on this device.
128+
* Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
129+
* @param excludeDying specify if the list should exclude users being removed.
130+
* @return the list of users that were created.
131+
* @hide
132+
*/
133+
public List<UserInfo> getUsers(boolean excludeDying) {
134+
try {
135+
return mService.getUsers(excludeDying);
120136
} catch (RemoteException re) {
121137
Log.w(TAG, "Could not get user list", re);
122138
return null;
@@ -271,6 +287,4 @@ public int getUserHandle(int userSerialNumber) {
271287
}
272288
return -1;
273289
}
274-
275-
276290
}

policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ private void inflateAndAddUserSelectorWidgetIfNecessary() {
703703
// if there are multiple users, we need to add the multi-user switcher widget to the
704704
// keyguard.
705705
UserManager mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
706-
List<UserInfo> users = mUm.getUsers();
706+
List<UserInfo> users = mUm.getUsers(true);
707707

708708
if (users.size() > 1) {
709709
KeyguardWidgetFrame userSwitcher = (KeyguardWidgetFrame)

policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public void init() {
7676
}
7777

7878
UserManager mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
79-
ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUm.getUsers());
79+
ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUm.getUsers(true));
8080
Collections.sort(users, mOrderAddedComparator);
8181

8282
for (UserInfo user: users) {

policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ private void doKeyguardLocked() {
792792
return;
793793
}
794794

795-
if (mUserManager.getUsers().size() < 2
795+
if (mUserManager.getUsers(true).size() < 2
796796
&& mLockPatternUtils.isLockScreenDisabled() && !lockedOrMissing) {
797797
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
798798
return;

services/java/com/android/server/MountService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1176,7 +1176,7 @@ private void readStorageListLocked() {
11761176
true, mtpReserve, false, maxFileSize, null);
11771177

11781178
final UserManagerService userManager = UserManagerService.getInstance();
1179-
for (UserInfo user : userManager.getUsers()) {
1179+
for (UserInfo user : userManager.getUsers(false)) {
11801180
createEmulatedVolumeForUserLocked(user.getUserHandle());
11811181
}
11821182

services/java/com/android/server/am/ActivityManagerService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14034,6 +14034,7 @@ public void performReceive(Intent intent, int resultCode,
1403414034
startHomeActivityLocked(userId);
1403514035
}
1403614036

14037+
getUserManagerLocked().userForeground(userId);
1403714038
sendUserSwitchBroadcastsLocked(oldUserId, userId);
1403814039
}
1403914040
} finally {

services/java/com/android/server/am/ActivityStack.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3038,11 +3038,6 @@ final int startActivityMayWait(IApplicationThread caller, int callingUid,
30383038
// Collect information about the target of the Intent.
30393039
ActivityInfo aInfo = resolveActivity(intent, resolvedType, startFlags,
30403040
profileFile, profileFd, userId);
3041-
if (aInfo != null && (aInfo.flags & ActivityInfo.FLAG_MULTIPROCESS) == 0
3042-
&& mService.isSingleton(aInfo.processName, aInfo.applicationInfo, null, 0)) {
3043-
userId = 0;
3044-
}
3045-
aInfo = mService.getActivityInfoForUser(aInfo, userId);
30463041

30473042
synchronized (mService) {
30483043
int callingPid;

0 commit comments

Comments
 (0)