Merge "Increase default user icon size."

This commit is contained in:
Oli Lan
2022-02-16 15:50:00 +00:00
committed by Android (Google) Code Review
10 changed files with 78 additions and 29 deletions

View File

@@ -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);

View File

@@ -991,4 +991,7 @@
<dimen name="secondary_rounded_corner_radius_adjustment">0px</dimen>
<dimen name="secondary_rounded_corner_radius_top_adjustment">0px</dimen>
<dimen name="secondary_rounded_corner_radius_bottom_adjustment">0px</dimen>
<!-- Default size for user icons (a.k.a. avatar images) -->
<dimen name="user_icon_size">190dp</dimen>
</resources>

View File

@@ -545,6 +545,7 @@
<java-symbol type="dimen" name="immersive_mode_cling_width" />
<java-symbol type="dimen" name="accessibility_magnification_indicator_width" />
<java-symbol type="dimen" name="circular_display_mask_thickness" />
<java-symbol type="dimen" name="user_icon_size" />
<java-symbol type="string" name="add_account_button_label" />
<java-symbol type="string" name="addToDictionary" />

View File

@@ -22,8 +22,6 @@
<!-- The translation for disappearing security views after having solved them. -->
<dimen name="disappear_y_translation">-32dp</dimen>
<dimen name="circle_avatar_size">190dp</dimen>
<!-- Height of a user icon view -->
<dimen name="user_icon_view_height">24dp</dimen>
<!-- User spinner -->

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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() {

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);
}
}