@@ -9,20 +9,32 @@ import android.app.PendingIntent
99import android.content.Context
1010import android.content.Intent
1111import android.content.pm.PackageManager
12+ import android.graphics.Bitmap
13+ import android.graphics.BitmapShader
14+ import android.graphics.Canvas
15+ import android.graphics.Paint
16+ import android.graphics.RectF
17+ import android.graphics.Shader
18+ import android.graphics.drawable.BitmapDrawable
19+ import android.os.Bundle
1220import android.util.Log
1321import androidx.core.app.ActivityCompat
1422import androidx.core.app.NotificationCompat
1523import androidx.core.app.NotificationManagerCompat
1624import androidx.core.app.Person
1725import androidx.core.app.RemoteInput
26+ import androidx.core.graphics.drawable.IconCompat
1827import androidx.work.OneTimeWorkRequest
1928import androidx.work.WorkManager
2029import androidx.work.Worker
2130import androidx.work.WorkerParameters
31+ import coil.request.ImageRequest
32+ import coil.size.Size
2233import com.google.firebase.messaging.FirebaseMessagingService
2334import com.google.firebase.messaging.RemoteMessage
2435import com.troplo.privateuploader.api.TpuApi
2536import com.troplo.privateuploader.api.TpuFunctions
37+ import com.troplo.privateuploader.api.imageLoader
2638import com.troplo.privateuploader.data.model.FCMTokenRequest
2739import com.troplo.privateuploader.data.model.MessageEventFirebase
2840import kotlinx.coroutines.CoroutineScope
@@ -108,6 +120,7 @@ class FirebaseChatService : FirebaseMessagingService() {
108120 }
109121
110122 private fun sendNotification (message : MessageEventFirebase ) {
123+ Log .d(" Message" , message.toString())
111124 Log .d(" TPU.Untagged" , " [ChatService] Sending notification" )
112125
113126 // Add any additional configuration to the notification builder as needed
@@ -159,9 +172,10 @@ class FirebaseChatService : FirebaseMessagingService() {
159172 style.addMessage(msg)
160173 }
161174
162- val replyIntent = Intent (this , InlineNotificationActivity ::class .java)
163- replyIntent.putExtra(" chatId" , 69 )
164- val replyPendingIntent = PendingIntent .getBroadcast(this , 0 , replyIntent, PendingIntent .FLAG_MUTABLE )
175+ val rep = Intent (this , InlineNotificationActivity ::class .java)
176+ rep.replaceExtras(Bundle ())
177+ rep.putExtra(" chatId" , message.associationId)
178+ val replyPendingIntent = PendingIntent .getBroadcast(this , message.associationId, rep, PendingIntent .FLAG_MUTABLE )
165179
166180 val remoteInput = RemoteInput .Builder (" content" )
167181 .setLabel(" Reply" )
@@ -184,6 +198,16 @@ class FirebaseChatService : FirebaseMessagingService() {
184198 .setSmallIcon(R .drawable.tpu_logo)
185199 .setWhen(TpuFunctions .getDate(message.createdAt)?.time ? : 0 )
186200 .addAction(replyAction)
201+ .setContentIntent(
202+ PendingIntent .getActivity(
203+ this ,
204+ message.associationId,
205+ Intent (this , MainActivity ::class .java).apply {
206+ putExtra(" chatId" , message.associationId)
207+ },
208+ PendingIntent .FLAG_MUTABLE
209+ )
210+ )
187211 val res = notificationManager.notify(message.associationId, builder.build())
188212 Log .d(" TPU.Untagged" , " [ChatService] Notification sent, $res " )
189213 } catch (e: Exception ) {
@@ -202,4 +226,50 @@ class FirebaseChatService : FirebaseMessagingService() {
202226 return Result .success()
203227 }
204228 }
229+ }
230+
231+ fun asyncLoadIcon (avatar : String? , context : Context , setIcon : (IconCompat ? ) -> Unit ) {
232+ if (avatar.isNullOrEmpty())
233+ setIcon(null )
234+ else {
235+ val request = ImageRequest .Builder (context)
236+ .dispatcher(Dispatchers .IO )
237+ .data(data = TpuFunctions .image(avatar, null ))
238+ .apply {
239+ size(Size .ORIGINAL )
240+ }
241+ .target { drawable ->
242+ try {
243+ val bitmap = (drawable as BitmapDrawable ).bitmap
244+ val roundedBitmap = createRoundedBitmap(bitmap)
245+
246+ val roundedIcon = IconCompat .createWithBitmap(roundedBitmap)
247+
248+ setIcon(roundedIcon)
249+ } catch (e: Exception ) {
250+ Log .d(" TPU.Untagged" , e.toString())
251+ setIcon(null )
252+ }
253+ }
254+ .build()
255+ imageLoader(context).enqueue(request)
256+ }
257+ }
258+
259+ private fun createRoundedBitmap (bitmap : Bitmap ): Bitmap {
260+ return try {
261+ val output = Bitmap .createBitmap(bitmap.width, bitmap.height, Bitmap .Config .ARGB_8888 )
262+ val canvas = Canvas (output)
263+
264+ val paint = Paint ()
265+ paint.isAntiAlias = true
266+ paint.shader = BitmapShader (bitmap, Shader .TileMode .CLAMP , Shader .TileMode .CLAMP )
267+
268+ val rect = RectF (0f , 0f , bitmap.width.toFloat(), bitmap.height.toFloat())
269+ canvas.drawRoundRect(rect, bitmap.width.toFloat(), bitmap.height.toFloat(), paint)
270+
271+ output
272+ } catch (e: Exception ) {
273+ bitmap
274+ }
205275}
0 commit comments