summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author kholoud mohamed <kholoudm@google.com> 2022-02-05 12:32:03 +0000
committer kholoud mohamed <kholoudm@google.com> 2022-02-05 18:21:29 +0000
commit4b0c36c3296cb83b25f9e62d40e400198725629b (patch)
treeb15ec652046d23590c3f2c5dbb5a124ef522133e
parent499454759689e38bce250762d64f51ad20d525c3 (diff)
Allow updating enterprise drawables in settingsLib
Bug: 203548565 Bug: 188414370 Bug: 188410712 Test: manual Change-Id: I550477bb5d783facf572f2e06292c3a09aed6bb0
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java56
1 files changed, 48 insertions, 8 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
index a781a629b7a1..035fafd5bb58 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
@@ -16,6 +16,10 @@
package com.android.settingslib.drawable;
+import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED;
+import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON;
+import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_USER_ICON;
+
import android.annotation.ColorInt;
import android.annotation.DrawableRes;
import android.annotation.NonNull;
@@ -38,9 +42,12 @@ import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.UserHandle;
+import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
+import androidx.core.os.BuildCompat;
import com.android.settingslib.R;
@@ -82,8 +89,23 @@ public class UserIconDrawable extends Drawable implements Drawable.Callback {
* @return drawable containing just the badge
*/
public static Drawable getManagedUserDrawable(Context context) {
- return getDrawableForDisplayDensity
- (context, com.android.internal.R.drawable.ic_corp_user_badge);
+ if (BuildCompat.isAtLeastT()) {
+ return getUpdatableManagedUserDrawable(context);
+ } else {
+ return getDrawableForDisplayDensity(
+ context, com.android.internal.R.drawable.ic_corp_user_badge);
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ private static Drawable getUpdatableManagedUserDrawable(Context context) {
+ DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
+ return dpm.getDrawableForDensity(
+ WORK_PROFILE_USER_ICON,
+ SOLID_COLORED,
+ context.getResources().getDisplayMetrics().densityDpi,
+ /* default= */ () -> getDrawableForDisplayDensity(
+ context, com.android.internal.R.drawable.ic_corp_user_badge));
}
private static Drawable getDrawableForDisplayDensity(
@@ -181,8 +203,7 @@ public class UserIconDrawable extends Drawable implements Drawable.Callback {
&& dpm.getProfileOwnerOrDeviceOwnerSupervisionComponent(UserHandle.of(userId))
== null; // and has no supervisor
if (isCorp) {
- badge = getDrawableForDisplayDensity(
- context, com.android.internal.R.drawable.ic_corp_badge_case);
+ badge = getManagementBadge(context);
}
}
return setBadge(badge);
@@ -192,16 +213,35 @@ public class UserIconDrawable extends Drawable implements Drawable.Callback {
* Sets the managed badge to this user icon if the device has a device owner.
*/
public UserIconDrawable setBadgeIfManagedDevice(Context context) {
+ DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
Drawable badge = null;
- boolean deviceOwnerExists = context.getSystemService(DevicePolicyManager.class)
- .getDeviceOwnerComponentOnAnyUser() != null;
+ boolean deviceOwnerExists = dpm.getDeviceOwnerComponentOnAnyUser() != null;
if (deviceOwnerExists) {
- badge = getDrawableForDisplayDensity(
- context, com.android.internal.R.drawable.ic_corp_badge_case);
+ badge = getManagementBadge(context);
}
return setBadge(badge);
}
+ private static Drawable getManagementBadge(Context context) {
+ if (BuildCompat.isAtLeastT()) {
+ return getUpdatableManagementBadge(context);
+ } else {
+ return getDrawableForDisplayDensity(
+ context, com.android.internal.R.drawable.ic_corp_user_badge);
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ private static Drawable getUpdatableManagementBadge(Context context) {
+ DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
+ return dpm.getDrawableForDensity(
+ WORK_PROFILE_ICON,
+ SOLID_COLORED,
+ context.getResources().getDisplayMetrics().densityDpi,
+ /* default= */ () -> getDrawableForDisplayDensity(
+ context, com.android.internal.R.drawable.ic_corp_badge_case));
+ }
+
public void setBadgeRadius(float radius) {
mBadgeRadius = radius;
onBoundsChange(getBounds());