From 92f3113aa1ff4f043dfb59e721867275cd3fe0c7 Mon Sep 17 00:00:00 2001 From: Brad Hinegardner Date: Mon, 24 Apr 2023 14:42:39 -0400 Subject: [PATCH] Downscale user icon when used for user switcher, bouncer and user chip bar Bug: b/261849183 Test: atest KeyguardSecurityContainerControllerTest Test: manual debugging - verify while debugging that the assets scaled to the dimensions requested Change-Id: If7e5f302631420e798d9be078d1d3d5a1c58f662 --- .../keyguard/KeyguardSecurityContainer.java | 13 +++++++++---- .../user/domain/interactor/UserInteractor.kt | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 78021ad21a77d..b19cc8cd4d357 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -54,6 +54,7 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.graphics.drawable.LayerDrawable; import android.os.UserManager; import android.provider.Settings; @@ -1022,11 +1023,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mUserSwitcherController.removeUserSwitchCallback(mUserSwitchCallback); } - private Drawable findUserIcon(int userId) { + private Drawable findLargeUserIcon(int userId) { Bitmap userIcon = UserManager.get(mView.getContext()).getUserIcon(userId); if (userIcon != null) { - return CircleFramedDrawable.getInstance(mView.getContext(), - userIcon); + int iconSize = + mResources.getDimensionPixelSize(R.dimen.bouncer_user_switcher_icon_size); + return CircleFramedDrawable.getInstance( + mView.getContext(), + Icon.scaleDownIfNecessary(userIcon, iconSize, iconSize) + ); } return UserIcons.getDefaultUserIcon(mResources, userId, false); @@ -1085,7 +1090,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { return; } final String currentUserName = mUserSwitcherController.getCurrentUserName(); - Drawable userIcon = findUserIcon(currentUser.info.id); + Drawable userIcon = findLargeUserIcon(currentUser.info.id); ((ImageView) mView.findViewById(R.id.user_icon)).setImageDrawable(userIcon); mUserSwitcher.setText(currentUserName); diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt index 0ec1a214660cb..c2922c4d6f34b 100644 --- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserInteractor.kt @@ -26,6 +26,7 @@ import android.content.IntentFilter import android.content.pm.UserInfo import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable +import android.graphics.drawable.Icon import android.os.RemoteException import android.os.UserHandle import android.os.UserManager @@ -762,8 +763,18 @@ constructor( } // TODO(b/246631653): cache the bitmaps to avoid the background work to fetch them. - // TODO(b/246631653): downscale the bitmaps to R.dimen.max_avatar_size if requested. - val userIcon = withContext(backgroundDispatcher) { manager.getUserIcon(userId) } + val userIcon = withContext(backgroundDispatcher) { + manager.getUserIcon(userId) + ?.let { bitmap -> + val iconSize = + applicationContext + .resources + .getDimensionPixelSize(R.dimen.bouncer_user_switcher_icon_size) + Icon.scaleDownIfNecessary(bitmap, iconSize, iconSize) + } + } + + if (userIcon != null) { return BitmapDrawable(userIcon) }