diff --git a/jami-android/app/src/main/java/cx/ring/views/AvatarDrawable.kt b/jami-android/app/src/main/java/cx/ring/views/AvatarDrawable.kt
index cabb6d95f141ada0dbff2c445e30d8026c36eef3..2f98065c63a1224dac525818d76812a7465c7b47 100644
--- a/jami-android/app/src/main/java/cx/ring/views/AvatarDrawable.kt
+++ b/jami-android/app/src/main/java/cx/ring/views/AvatarDrawable.kt
@@ -16,6 +16,7 @@
  */
 package cx.ring.views
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.graphics.*
 import android.graphics.drawable.Drawable
@@ -35,6 +36,7 @@ import net.jami.utils.HashUtils
 import net.jami.utils.toHex
 import java.util.*
 import kotlin.math.min
+import androidx.core.graphics.createBitmap
 
 class AvatarDrawable : Drawable {
     private class PresenceIndicatorInfo {
@@ -149,9 +151,9 @@ class AvatarDrawable : Drawable {
             val h: Int
             if (outfit == a < b) {
                 w = iw
-                h = iw * bh / bw
+                h = b / bw
             } else {
-                w = ih * bw / bh
+                w = a / bh
                 h = ih
             }
             val x = (iw - w) / 2
@@ -331,6 +333,7 @@ class AvatarDrawable : Drawable {
     /** Should only be used in tests */
     fun getBitmap(): MutableList<Bitmap>? = bitmaps
 
+    @SuppressLint("UseCompatLoadingForDrawables")
     private constructor(
         context: Context,
         photos: MutableList<Bitmap>?,
@@ -347,7 +350,7 @@ class AvatarDrawable : Drawable {
         /*if (cropCircle) {
             inSize = minSize
         }*/
-        if (photos != null && photos.size > 0) {
+        if (photos != null && photos.isNotEmpty()) {
             avatarText = null
             bitmaps = photos
             if (photos.size == 1) {
@@ -375,8 +378,10 @@ class AvatarDrawable : Drawable {
             color = ContextCompat.getColor(context, getAvatarColor(id))
             clipPaint = if (cropCircle) arrayOf(Paint()) else null
             if (avatarText == null) {
-                placeholder =
-                    context.getDrawable(if (isGroup) R.drawable.baseline_group_24 else R.drawable.baseline_account_crop_24) as VectorDrawable?
+                placeholder = context.getDrawable(
+                    if (isGroup) R.drawable.baseline_group_24
+                    else R.drawable.baseline_account_crop_24
+                )?.mutate() as VectorDrawable?
             } else {
                 textPaint.color = Color.WHITE
                 textPaint.typeface = Typeface.SANS_SERIF
@@ -518,9 +523,11 @@ class AvatarDrawable : Drawable {
             canvas.drawColor(color)
             if (avatarText != null) {
                 canvas.drawText(avatarText!!, textStartXPoint, textStartYPoint, textPaint)
-            } else if (placeholder != null) {
-                placeholder!!.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN)
-                placeholder!!.draw(canvas)
+            } else {
+                placeholder?.let {
+                    it.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN)
+                    it.draw(canvas)
+                }
             }
         }
     }
@@ -591,13 +598,12 @@ class AvatarDrawable : Drawable {
         }
         if (cropCircle) {
             for (i in workspace.indices) {
-                val workspacei = Bitmap.createBitmap(iw, ih, Bitmap.Config.ARGB_8888)
+                val workspacei = createBitmap(iw, ih)
                 workspace[i] = workspacei
                 clipPaint!![i].shader = BitmapShader(workspacei, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)
             }
         } else {
-            workspace[0] =
-                Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.ARGB_8888)
+            workspace[0] = createBitmap(bounds.width(), bounds.height())
         }
         if (bitmaps != null) {
             if (bitmaps.size == 1 || (cropCircle && groupCircle)) {