From 8f7698aaf630787693ec7edb4779a27fdd2b888b Mon Sep 17 00:00:00 2001 From: Nicolas Prevot Date: Thu, 11 Feb 2016 16:05:33 +0000 Subject: [PATCH] Allow privileged apps to set the organization color. BUG:26923835 Change-Id: I97b0cbbc0d4fb9e9ca0e3d335a9d15eb5a1f9602 --- .../java/android/app/admin/DevicePolicyManager.java | 21 +++++++++++++++++++++ .../android/app/admin/IDevicePolicyManager.aidl | 1 + .../devicepolicy/DevicePolicyManagerService.java | 15 +++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 1b2322ff0c6c..876f6257e9c2 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -16,12 +16,14 @@ 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. * diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index bd6818264448..685ec3e08415 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -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); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index b7138d29cc93..da93af4e9a18 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -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; -- 2.11.0