Revert "Revert "Remove ActivityManager calls with PM.mInstallLock held""
Added the missing import.
This reverts commit c51e725644be6d46e25c29e8774b542d52c29400.
Change-Id: Icd63619a12e10dee628e568a6200d429a9936cf0
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 4541e2e..9c62b20 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -22,7 +22,6 @@
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.ActivityManager;
@@ -32,7 +31,6 @@
import android.app.IActivityManager;
import android.app.IStopUserCallback;
import android.app.KeyguardManager;
-import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -78,6 +76,7 @@
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
import android.util.TimeUtils;
import android.util.Xml;
@@ -90,6 +89,7 @@
import com.android.internal.util.XmlUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.server.LocalServices;
+import com.android.server.am.UserState;
import libcore.io.IoUtils;
import libcore.util.Objects;
@@ -331,8 +331,8 @@
@GuardedBy("mUsersLock")
private boolean mForceEphemeralUsers;
- @GuardedBy("mUsersLock")
- private final SparseBooleanArray mUnlockingOrUnlockedUsers = new SparseBooleanArray();
+ @GuardedBy("mUserStates")
+ private final SparseIntArray mUserStates = new SparseIntArray();
private static UserManagerService sInstance;
@@ -379,6 +379,7 @@
mLocalService = new LocalService();
LocalServices.addService(UserManagerInternal.class, mLocalService);
mLockPatternUtils = new LockPatternUtils(mContext);
+ mUserStates.put(UserHandle.USER_SYSTEM, UserState.STATE_BOOTING);
}
void systemReady() {
@@ -2380,7 +2381,9 @@
synchronized (mUsersLock) {
mUsers.remove(userHandle);
mIsUserManaged.delete(userHandle);
- mUnlockingOrUnlockedUsers.delete(userHandle);
+ }
+ synchronized (mUserStates) {
+ mUserStates.delete(userHandle);
}
synchronized (mRestrictionsLock) {
mBaseUserRestrictions.remove(userHandle);
@@ -3081,6 +3084,9 @@
pw.println();
pw.println(" Device managed: " + mIsDeviceManaged);
}
+ synchronized (mUserStates) {
+ pw.println(" Started users state: " + mUserStates);
+ }
// Dump some capabilities
pw.println();
pw.println(" Max users: " + UserManager.getMaxSupportedUsers());
@@ -3267,16 +3273,32 @@
}
@Override
- public void setUserUnlockingOrUnlocked(int userId, boolean unlockingOrUnlocked) {
- synchronized (mUsersLock) {
- mUnlockingOrUnlockedUsers.put(userId, unlockingOrUnlocked);
+ public boolean isUserRunning(int userId) {
+ synchronized (mUserStates) {
+ return mUserStates.get(userId, -1) >= 0;
+ }
+ }
+
+ @Override
+ public void setUserState(int userId, int userState) {
+ synchronized (mUserStates) {
+ mUserStates.put(userId, userState);
+ }
+ }
+
+ @Override
+ public void removeUserState(int userId) {
+ synchronized (mUserStates) {
+ mUserStates.delete(userId);
}
}
@Override
public boolean isUserUnlockingOrUnlocked(int userId) {
- synchronized (mUsersLock) {
- return mUnlockingOrUnlockedUsers.get(userId);
+ synchronized (mUserStates) {
+ int state = mUserStates.get(userId, -1);
+ return (state == UserState.STATE_RUNNING_UNLOCKING)
+ || (state == UserState.STATE_RUNNING_UNLOCKED);
}
}
}