User Manager service to manage users and query user details
Moved a bunch of methods from PackageManager to UserManager.
Fix launching of activities from recents to correct user.
Guest creation APIs
Change-Id: I0733405e6eb2829675665e225c759d6baa2b708f
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 5bed015..d3ec9f7 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -27,6 +27,7 @@
import com.android.server.SystemServer;
import com.android.server.Watchdog;
import com.android.server.am.ActivityStack.ActivityState;
+import com.android.server.pm.UserManagerService;
import com.android.server.wm.WindowManagerService;
import dalvik.system.Zygote;
@@ -76,12 +77,12 @@
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PathPermission;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
-import android.content.pm.UserInfo;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
@@ -111,6 +112,7 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserId;
+import android.os.UserManager;
import android.provider.Settings;
import android.text.format.Time;
import android.util.EventLog;
@@ -778,6 +780,10 @@
static ActivityManagerService mSelf;
static ActivityThread mSystemThread;
+ private int mCurrentUserId;
+ private SparseIntArray mLoggedInUsers = new SparseIntArray(5);
+ private UserManager mUserManager;
+
private final class AppDeathRecipient implements IBinder.DeathRecipient {
final ProcessRecord mApp;
final int mPid;
@@ -4197,19 +4203,14 @@
// Tell anyone interested that we are done booting!
SystemProperties.set("sys.boot_completed", "1");
SystemProperties.set("dev.bootcomplete", "1");
- try {
- List<UserInfo> users = AppGlobals.getPackageManager().getUsers();
- for (UserInfo user : users) {
- broadcastIntentLocked(null, null,
- new Intent(Intent.ACTION_BOOT_COMPLETED, null),
- null, null, 0, null, null,
- android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
- false, false, MY_PID, Process.SYSTEM_UID, user.id);
- }
- } catch (RemoteException re) {
- // Won't happen, in same process
+ List<UserInfo> users = getUserManager().getUsers();
+ for (UserInfo user : users) {
+ broadcastIntentLocked(null, null,
+ new Intent(Intent.ACTION_BOOT_COMPLETED, null),
+ null, null, 0, null, null,
+ android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
+ false, false, MY_PID, Process.SYSTEM_UID, user.id);
}
-
}
}
}
@@ -13358,9 +13359,6 @@
// Multi-user methods
- private int mCurrentUserId;
- private SparseIntArray mLoggedInUsers = new SparseIntArray(5);
-
public boolean switchUser(int userId) {
final int callingUid = Binder.getCallingUid();
if (callingUid != 0 && callingUid != Process.myUid()) {
@@ -13403,7 +13401,7 @@
Slog.e(TAG, "Trying to get user from unauthorized app");
return null;
}
- return AppGlobals.getPackageManager().getUser(mCurrentUserId);
+ return getUserManager().getUserInfo(mCurrentUserId);
}
private void onUserRemoved(Intent intent) {
@@ -13431,14 +13429,15 @@
}
private boolean userExists(int userId) {
- try {
- UserInfo user = AppGlobals.getPackageManager().getUser(userId);
- return user != null;
- } catch (RemoteException re) {
- // Won't happen, in same process
- }
+ UserInfo user = getUserManager().getUserInfo(userId);
+ return user != null;
+ }
- return false;
+ UserManager getUserManager() {
+ if (mUserManager == null) {
+ mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ }
+ return mUserManager;
}
private void checkValidCaller(int uid, int userId) {