Merge "Allow --user current in dpm command"
diff --git a/cmds/dpm/src/com/android/commands/dpm/Dpm.java b/cmds/dpm/src/com/android/commands/dpm/Dpm.java
index ea53009..6dc3cd1 100644
--- a/cmds/dpm/src/com/android/commands/dpm/Dpm.java
+++ b/cmds/dpm/src/com/android/commands/dpm/Dpm.java
@@ -16,6 +16,8 @@
 
 package com.android.commands.dpm;
 
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
 import android.app.admin.IDevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -51,19 +53,21 @@
     public void onShowUsage(PrintStream out) {
         out.println(
                 "usage: dpm [subcommand] [options]\n" +
-                "usage: dpm set-active-admin [ --user <USER_ID> ] <COMPONENT>\n" +
+                "usage: dpm set-active-admin [ --user <USER_ID> | current ] <COMPONENT>\n" +
                 // STOPSHIP Finalize it
-                "usage: dpm set-device-owner [ --user <USER_ID> *EXPERIMENTAL* ] [ --name <NAME> ] <COMPONENT>\n" +
-                "usage: dpm set-profile-owner [ --user <USER_ID> ] [ --name <NAME> ] <COMPONENT>\n" +
+                "usage: dpm set-device-owner [ --user <USER_ID> | current *EXPERIMENTAL* ] " +
+                "[ --name <NAME> ] <COMPONENT>\n" +
+                "usage: dpm set-profile-owner [ --user <USER_ID> | current ] [ --name <NAME> ] " +
+                "<COMPONENT>\n" +
                 "\n" +
                 "dpm set-active-admin: Sets the given component as active admin" +
                 " for an existing user.\n" +
                 "\n" +
-                "dpm set-device-owner: Sets the given component as active admin, and its\n" +
-                "  package as device owner.\n" +
+                "dpm set-device-owner: Sets the given component as active admin, and its" +
+                " package as device owner.\n" +
                 "\n" +
                 "dpm set-profile-owner: Sets the given component as active admin and profile" +
-                "  owner for an existing user.\n");
+                " owner for an existing user.\n");
     }
 
     @Override
@@ -91,11 +95,24 @@
         }
     }
 
-    private void parseArgs(boolean canHaveUser, boolean canHaveName) {
+    private void parseArgs(boolean canHaveName) {
         String opt;
         while ((opt = nextOption()) != null) {
-            if (canHaveUser && "--user".equals(opt)) {
-                mUserId = parseInt(nextArgRequired());
+            if ("--user".equals(opt)) {
+                String arg = nextArgRequired();
+                if ("current".equals(arg) || "cur".equals(arg)) {
+                    mUserId = UserHandle.USER_CURRENT;
+                } else {
+                    mUserId = parseInt(arg);
+                }
+                if (mUserId == UserHandle.USER_CURRENT) {
+                    IActivityManager activityManager = ActivityManagerNative.getDefault();
+                    try {
+                        mUserId = activityManager.getCurrentUser().id;
+                    } catch (RemoteException e) {
+                        e.rethrowAsRuntimeException();
+                    }
+                }
             } else if (canHaveName && "--name".equals(opt)) {
                 mName = nextArgRequired();
             } else {
@@ -106,14 +123,14 @@
     }
 
     private void runSetActiveAdmin() throws RemoteException {
-        parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ false);
+        parseArgs(/*canHaveName=*/ false);
         mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
 
         System.out.println("Success: Active admin set to component " + mComponent.toShortString());
     }
 
     private void runSetDeviceOwner() throws RemoteException {
-        parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ true);
+        parseArgs(/*canHaveName=*/ true);
         mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
 
         try {
@@ -131,7 +148,7 @@
     }
 
     private void runSetProfileOwner() throws RemoteException {
-        parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ true);
+        parseArgs(/*canHaveName=*/ true);
         mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
 
         try {