diff --git a/core/java/com/android/internal/util/UserIcons.java b/core/java/com/android/internal/util/UserIcons.java
index 17b84ffc2f3fa..d9c1e571292be 100644
--- a/core/java/com/android/internal/util/UserIcons.java
+++ b/core/java/com/android/internal/util/UserIcons.java
@@ -46,11 +46,21 @@ public class UserIcons {
* Converts a given drawable to a bitmap.
*/
public static Bitmap convertToBitmap(Drawable icon) {
+ return convertToBitmapAtSize(icon, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
+ }
+
+ /**
+ * Converts a given drawable to a bitmap, with width and height equal to the default icon size.
+ */
+ public static Bitmap convertToBitmapAtUserIconSize(Resources res, Drawable icon) {
+ int size = res.getDimensionPixelSize(R.dimen.user_icon_size);
+ return convertToBitmapAtSize(icon, size, size);
+ }
+
+ private static Bitmap convertToBitmapAtSize(Drawable icon, int width, int height) {
if (icon == null) {
return null;
}
- final int width = icon.getIntrinsicWidth();
- final int height = icon.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
icon.setBounds(0, 0, width, height);
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 4874e6529620f..39b41b587a336 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -991,4 +991,7 @@
0px
0px
0px
+
+
+ 190dp
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index d731180bd56a1..27bee3157b2c4 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -541,6 +541,7 @@
+
diff --git a/packages/SettingsLib/res/values/dimens.xml b/packages/SettingsLib/res/values/dimens.xml
index 25d6c5556f5e1..d893d09a9e3ca 100644
--- a/packages/SettingsLib/res/values/dimens.xml
+++ b/packages/SettingsLib/res/values/dimens.xml
@@ -22,8 +22,6 @@
-32dp
- 190dp
-
24dp
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index 883e0806f5f56..f6e3557b5a499 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -144,7 +144,7 @@ public class Utils {
* Returns a circular icon for a user.
*/
public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
- final int iconSize = UserIconDrawable.getSizeForList(context);
+ final int iconSize = UserIconDrawable.getDefaultSize(context);
if (user.isManagedProfile()) {
Drawable drawable = UserIconDrawable.getManagedUserDrawable(context);
drawable.setBounds(0, 0, iconSize, iconSize);
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawable/CircleFramedDrawable.java b/packages/SettingsLib/src/com/android/settingslib/drawable/CircleFramedDrawable.java
index e5ea4467517ba..7db00f34b2a24 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawable/CircleFramedDrawable.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawable/CircleFramedDrawable.java
@@ -31,8 +31,6 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
-import com.android.settingslib.R;
-
/**
* Converts the user avatar icon to a circularly clipped one.
* TODO: Move this to an internal framework class and share with the one in Keyguard.
@@ -49,9 +47,9 @@ public class CircleFramedDrawable extends Drawable {
public static CircleFramedDrawable getInstance(Context context, Bitmap icon) {
Resources res = context.getResources();
- float iconSize = res.getDimension(R.dimen.circle_avatar_size);
+ int iconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.user_icon_size);
- CircleFramedDrawable instance = new CircleFramedDrawable(icon, (int) iconSize);
+ CircleFramedDrawable instance = new CircleFramedDrawable(icon, iconSize);
return instance;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
index 035fafd5bb580..d01f2b42f3382 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
@@ -49,8 +49,6 @@ import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
import androidx.core.os.BuildCompat;
-import com.android.settingslib.R;
-
/**
* Converts the user avatar icon to a circularly clipped one with an optional badge and frame
*/
@@ -120,8 +118,9 @@ public class UserIconDrawable extends Drawable implements Drawable.Callback {
* @param context
* @return size in pixels
*/
- public static int getSizeForList(Context context) {
- return (int) context.getResources().getDimension(R.dimen.circle_avatar_size);
+ public static int getDefaultSize(Context context) {
+ return context.getResources()
+ .getDimensionPixelSize(com.android.internal.R.dimen.user_icon_size);
}
public UserIconDrawable() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java b/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
index f8bb38b5978ec..5862f60950188 100644
--- a/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
@@ -16,19 +16,17 @@
package com.android.settingslib.users;
-import android.annotation.NonNull;
import android.app.Activity;
import android.content.Intent;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.Log;
import android.widget.ImageView;
import com.android.internal.util.UserIcons;
-import com.android.settingslib.R;
import com.android.settingslib.drawable.CircleFramedDrawable;
import com.android.settingslib.utils.ThreadUtils;
@@ -114,10 +112,10 @@ public class EditUserPhotoController {
private void onDefaultIconSelected(int tintColor) {
try {
ThreadUtils.postOnBackgroundThread(() -> {
+ Resources res = mActivity.getResources();
Drawable drawable =
- UserIcons.getDefaultUserIconInColor(mActivity.getResources(), tintColor);
- Bitmap bitmap = convertToBitmap(drawable,
- (int) mActivity.getResources().getDimension(R.dimen.circle_avatar_size));
+ UserIcons.getDefaultUserIconInColor(res, tintColor);
+ Bitmap bitmap = UserIcons.convertToBitmapAtUserIconSize(res, drawable);
ThreadUtils.postOnMainThread(() -> onPhotoProcessed(bitmap));
}).get();
@@ -126,14 +124,6 @@ public class EditUserPhotoController {
}
}
- private static Bitmap convertToBitmap(@NonNull Drawable icon, int size) {
- Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- icon.setBounds(0, 0, size, size);
- icon.draw(canvas);
- return bitmap;
- }
-
private void onPhotoCropped(final Uri data) {
ThreadUtils.postOnBackgroundThread(() -> {
InputStream imageStream = null;
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserCreator.java b/packages/SystemUI/src/com/android/systemui/user/UserCreator.java
index 3a270bb77e461..0686071c17180 100644
--- a/packages/SystemUI/src/com/android/systemui/user/UserCreator.java
+++ b/packages/SystemUI/src/com/android/systemui/user/UserCreator.java
@@ -19,6 +19,7 @@ package com.android.systemui.user;
import android.app.Dialog;
import android.content.Context;
import android.content.pm.UserInfo;
+import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.UserManager;
@@ -70,10 +71,12 @@ public class UserCreator {
}
Drawable newUserIcon = userIcon;
+ Resources res = mContext.getResources();
if (newUserIcon == null) {
- newUserIcon = UserIcons.getDefaultUserIcon(mContext.getResources(), user.id, false);
+ newUserIcon = UserIcons.getDefaultUserIcon(res, user.id, false);
}
- mUserManager.setUserIcon(user.id, UserIcons.convertToBitmap(newUserIcon));
+ mUserManager.setUserIcon(
+ user.id, UserIcons.convertToBitmapAtUserIconSize(res, newUserIcon));
userCreationProgressDialog.dismiss();
successCallback.accept(user);
diff --git a/tests/Internal/src/com/android/internal/util/UserIconsTest.java b/tests/Internal/src/com/android/internal/util/UserIconsTest.java
new file mode 100644
index 0000000000000..cc7b20b28a973
--- /dev/null
+++ b/tests/Internal/src/com/android/internal/util/UserIconsTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.R;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class UserIconsTest {
+
+ @Test
+ public void convertToBitmapAtUserIconSize_sizeIsCorrect() {
+ Resources res = InstrumentationRegistry.getTargetContext().getResources();
+ Drawable icon = UserIcons.getDefaultUserIcon(res, 0, true);
+ Bitmap bitmap = UserIcons.convertToBitmapAtUserIconSize(res, icon);
+ int expectedSize = res.getDimensionPixelSize(R.dimen.user_icon_size);
+
+ assertThat(bitmap.getWidth()).isEqualTo(expectedSize);
+ assertThat(bitmap.getHeight()).isEqualTo(expectedSize);
+ }
+
+}