Clear calling identity before setting restrictions

Previously Settings.Secure.putIntForUser was failing with AppOps package
mismatch exception when createRestrictedProfile method was called from
a shell process.

Bug: 24212155
Change-Id: I47ecfa572b110d627e5b049aa98ed4d10b2e1374
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 3cc7b10..a466355 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1930,13 +1930,18 @@
         if (user == null) {
             return null;
         }
-        setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user.id);
-        // Change the setting before applying the DISALLOW_SHARE_LOCATION restriction, otherwise
-        // the putIntForUser() will fail.
-        android.provider.Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                android.provider.Settings.Secure.LOCATION_MODE,
-                android.provider.Settings.Secure.LOCATION_MODE_OFF, user.id);
-        setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, true, user.id);
+        long identity = Binder.clearCallingIdentity();
+        try {
+            setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user.id);
+            // Change the setting before applying the DISALLOW_SHARE_LOCATION restriction, otherwise
+            // the putIntForUser() will fail.
+            android.provider.Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                    android.provider.Settings.Secure.LOCATION_MODE,
+                    android.provider.Settings.Secure.LOCATION_MODE_OFF, user.id);
+            setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, true, user.id);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
         return user;
     }