OSDN Git Service

Allow privileged apps to set the organization color.
authorNicolas Prevot <nprevot@google.com>
Thu, 11 Feb 2016 16:05:33 +0000 (16:05 +0000)
committerNicolas Prevot <nprevot@google.com>
Fri, 12 Feb 2016 10:23:32 +0000 (10:23 +0000)
BUG:26923835
Change-Id: I97b0cbbc0d4fb9e9ca0e3d335a9d15eb5a1f9602

core/java/android/app/admin/DevicePolicyManager.java
core/java/android/app/admin/IDevicePolicyManager.aidl
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java

index 1b2322f..876f625 100644 (file)
 
 package android.app.admin;
 
+import android.annotation.ColorInt;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
+import android.annotation.UserIdInt;
 import android.app.Activity;
 import android.auditing.SecurityLog;
 import android.auditing.SecurityLog.SecurityEvent;
@@ -5598,6 +5600,25 @@ public class DevicePolicyManager {
     }
 
     /**
+     * @hide
+     *
+     * Sets the color used for customization.
+     *
+     * @param color The 32bit representation of the color to be used.
+     * @param userId which user to set the color to.
+     * @RequiresPermission(allOf = {
+     *       Manifest.permission.MANAGE_USERS,
+     *       Manifest.permission.INTERACT_ACROSS_USERS_FULL})
+     */
+    public void setOrganizationColorForUser(@ColorInt int color, @UserIdInt int userId) {
+        try {
+            mService.setOrganizationColorForUser(color, userId);
+        } catch (RemoteException re) {
+            Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, re);
+        }
+    }
+
+    /**
      * Called by a profile owner of a managed profile to retrieve the color used for customization.
      * This color is used as background color of the confirm credentials screen for that user.
      *
index bd68182..685ec3e 100644 (file)
@@ -277,6 +277,7 @@ interface IDevicePolicyManager {
     boolean isSeparateProfileChallengeAllowed(int userHandle);
 
     void setOrganizationColor(in ComponentName admin, in int color);
+    void setOrganizationColorForUser(in int color, in int userId);
     int getOrganizationColor(in ComponentName admin);
     int getOrganizationColorForUser(int userHandle);
 
index b7138d2..da93af4 100644 (file)
@@ -8314,6 +8314,21 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
     }
 
     @Override
+    public void setOrganizationColorForUser(int color, int userId) {
+        if (!mHasFeature) {
+            return;
+        }
+        enforceFullCrossUsersPermission(userId);
+        enforceManageUsers();
+        enforceManagedProfile(userId, "set organization color");
+        synchronized (this) {
+            ActiveAdmin admin = getProfileOwnerAdminLocked(userId);
+            admin.organizationColor = color;
+            saveSettingsLocked(userId);
+        }
+    }
+
+    @Override
     public int getOrganizationColor(@NonNull ComponentName who) {
         if (!mHasFeature) {
             return ActiveAdmin.DEF_ORGANIZATION_COLOR;