Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92f3113a authored by Brad Hinegardner's avatar Brad Hinegardner
Browse files

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
parent 750d5d68
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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);

+13 −2
Original line number Diff line number Diff line
@@ -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)
        }