Add per-user versions of set{Component,Application}EnabledSetting.

Change-Id: Id63b233308e92a4c360f38d4728c519ac2131ff0
Fixes: 30230444
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 8cc1bc4..5d87528 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -2080,8 +2080,14 @@
     @Override
     public void setComponentEnabledSetting(ComponentName componentName,
                                            int newState, int flags) {
+        setComponentEnabledSettingAsUser(componentName, newState, flags, mContext.getUserId());
+    }
+
+    @Override
+    public void setComponentEnabledSettingAsUser(ComponentName componentName,
+            int newState, int flags, int userId) {
         try {
-            mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId());
+            mPM.setComponentEnabledSetting(componentName, newState, flags, userId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -2099,9 +2105,16 @@
     @Override
     public void setApplicationEnabledSetting(String packageName,
                                              int newState, int flags) {
+        setApplicationEnabledSettingAsUser(packageName, newState, flags,
+                mContext.getUserId());
+    }
+
+    @Override
+    public void setApplicationEnabledSettingAsUser(String packageName,
+            int newState, int flags, int userId) {
         try {
             mPM.setApplicationEnabledSetting(packageName, newState, flags,
-                    mContext.getUserId(), mContext.getOpPackageName());
+                    userId, mContext.getOpPackageName());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 281d6f6..511ed75 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -5381,6 +5381,14 @@
             int newState, int flags);
 
     /**
+     * Per-user version of {@link #setComponentEnabledSetting(ComponentName, int, int)}
+     *
+     * @hide
+     */
+    public abstract void setComponentEnabledSettingAsUser(ComponentName componentName,
+            int newState, int flags, int userId);
+
+    /**
      * Return the enabled setting for a package component (activity,
      * receiver, service, provider).  This returns the last value set by
      * {@link #setComponentEnabledSetting(ComponentName, int, int)}; in most
@@ -5419,6 +5427,14 @@
             int newState, int flags);
 
     /**
+     * Per-user version of {@link #setApplicationEnabledSetting(String, int, int)}
+     *
+     * @hide
+     */
+    public abstract void setApplicationEnabledSettingAsUser(String packageName,
+            int newState, int flags, int userId);
+
+    /**
      * Return the enabled setting for an application. This returns
      * the last value set by
      * {@link #setApplicationEnabledSetting(String, int, int)}; in most
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 68ccbdf..79a5665 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -27,7 +27,6 @@
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
 import android.app.ActivityManagerNative;
-import android.app.AppGlobals;
 import android.app.IActivityManager;
 import android.app.IStopUserCallback;
 import android.app.KeyguardManager;
@@ -38,7 +37,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.UserInfo;
@@ -2930,17 +2928,13 @@
             if (!TextUtils.isEmpty(demoLauncher)) {
                 ComponentName componentToEnable = ComponentName.unflattenFromString(demoLauncher);
                 String demoLauncherPkg = componentToEnable.getPackageName();
-                try {
-                    final IPackageManager iPm = AppGlobals.getPackageManager();
-                    iPm.setComponentEnabledSetting(componentToEnable,
-                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ 0,
-                            /* userId= */ userId);
-                    iPm.setApplicationEnabledSetting(demoLauncherPkg,
-                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ 0,
-                            /* userId= */ userId, null);
-                } catch (RemoteException re) {
-                    // Internal, shouldn't happen
-                }
+                final PackageManager pm = mContext.getPackageManager();
+                pm.setComponentEnabledSettingAsUser(componentToEnable,
+                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ 0,
+                        /* userId= */ userId);
+                pm.setApplicationEnabledSettingAsUser(demoLauncherPkg,
+                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ 0,
+                        /* userId= */ userId);
             }
         }
     }
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 330dbab..4eae4ab 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -752,6 +752,13 @@
         throw new UnsupportedOperationException();
     }
 
+    /** @hide - hidden in superclass */
+    @Override
+    public void setComponentEnabledSettingAsUser(ComponentName componentName,
+            int newState, int flags, int userId) {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public int getComponentEnabledSetting(ComponentName componentName) {
         throw new UnsupportedOperationException();
@@ -762,6 +769,13 @@
         throw new UnsupportedOperationException();
     }
 
+    /** @hide - hidden in superclass */
+    @Override
+    public void setApplicationEnabledSettingAsUser(String packageName, int newState, int flags,
+            int userId) {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public int getApplicationEnabledSetting(String packageName) {
         throw new UnsupportedOperationException();
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
index b3ed9e1..cef622b 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
@@ -712,6 +712,11 @@
     }
 
     @Override
+    public void setComponentEnabledSettingAsUser(ComponentName componentName, int newState,
+            int flags, int userId) {
+    }
+
+    @Override
     public int getComponentEnabledSetting(ComponentName componentName) {
         return 0;
     }
@@ -721,6 +726,11 @@
     }
 
     @Override
+    public void setApplicationEnabledSettingAsUser(String packageName, int newState, int flags,
+            int userId) {
+    }
+
+    @Override
     public int getApplicationEnabledSetting(String packageName) {
         return 0;
     }