@@ -7,7 +7,11 @@ import android.content.Intent
77import android.content.pm.PackageManager
88import android.os.Build
99import android.graphics.Bitmap
10+ import android.graphics.Canvas
1011import android.graphics.ImageDecoder
12+ import android.graphics.Paint
13+ import android.graphics.PorterDuff
14+ import android.graphics.PorterDuffXfermode
1115import android.media.RingtoneManager
1216import androidx.core.app.ActivityCompat
1317import androidx.core.app.NotificationCompat
@@ -152,7 +156,7 @@ class NotificationService : FirebaseMessagingService(),
152156 }
153157
154158 val notificationId = if (isContactChat) {
155- applyContactChatStyle(builder, groupKey, body)
159+ builder. applyContactChatStyle(groupKey, body)
156160 } else {
157161 builder.setContentTitle(title).setContentText(body)
158162 SecureRandom ().nextInt(Int .MAX_VALUE )
@@ -173,8 +177,7 @@ class NotificationService : FirebaseMessagingService(),
173177 }
174178 }
175179
176- private suspend fun applyContactChatStyle (
177- builder : NotificationCompat .Builder ,
180+ private suspend fun NotificationCompat.Builder.applyContactChatStyle (
178181 groupKey : String ,
179182 body : String? ,
180183 ): Int {
@@ -195,7 +198,7 @@ class NotificationService : FirebaseMessagingService(),
195198 .setName(senderName)
196199 .setKey(groupKey)
197200 .apply {
198- if (contactPhoto != null ) setIcon(IconCompat .createWithAdaptiveBitmap (contactPhoto))
201+ if (contactPhoto != null ) setIcon(IconCompat .createWithBitmap (contactPhoto.toCircularBitmap() ))
199202 }
200203 .build()
201204
@@ -209,7 +212,7 @@ class NotificationService : FirebaseMessagingService(),
209212
210213 style.addMessage(body.orEmpty(), System .currentTimeMillis(), senderPerson)
211214
212- builder. setStyle(style)
215+ setStyle(style)
213216 .setGroupAlertBehavior(NotificationCompat .GROUP_ALERT_CHILDREN )
214217
215218 return notificationId
@@ -253,6 +256,24 @@ class NotificationService : FirebaseMessagingService(),
253256 }
254257 }
255258
259+ private fun Bitmap.toCircularBitmap (): Bitmap {
260+ val size = minOf(width, height)
261+ val xOffset = (width - size) / 2
262+ val yOffset = (height - size) / 2
263+
264+ val output = Bitmap .createBitmap(size, size, Bitmap .Config .ARGB_8888 )
265+ val canvas = Canvas (output)
266+
267+ val paint = Paint (Paint .ANTI_ALIAS_FLAG )
268+ val half = size / 2f
269+ canvas.drawCircle(half, half, half, paint)
270+
271+ paint.xfermode = PorterDuffXfermode (PorterDuff .Mode .SRC_IN )
272+ canvas.drawBitmap(this , - xOffset.toFloat(), - yOffset.toFloat(), paint)
273+
274+ return output
275+ }
276+
256277 internal fun Context.buildContentIntent (navigation : NavigationTrigger ? ): PendingIntent {
257278 val target = when (navigation) {
258279 is NavigationTrigger .CurrencyInfo -> Intent (Intent .ACTION_VIEW ).apply {
0 commit comments