diff --git a/app/src/main/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.java b/app/src/main/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.java index 5f20fe6f3..7958ac111 100644 --- a/app/src/main/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.java +++ b/app/src/main/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.java @@ -23,10 +23,13 @@ package com.nextcloud.talk.services.firebase; import android.annotation.SuppressLint; import android.app.Notification; import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.RingtoneManager; +import android.os.Bundle; import android.util.Base64; import android.util.Log; @@ -34,14 +37,17 @@ import com.bluelinelabs.logansquare.LoganSquare; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; import com.nextcloud.talk.R; +import com.nextcloud.talk.activities.CallActivity; import com.nextcloud.talk.api.models.json.push.DecryptedPushMessage; import com.nextcloud.talk.api.models.json.push.PushMessage; import com.nextcloud.talk.models.SignatureVerification; import com.nextcloud.talk.utils.PushUtils; +import com.nextcloud.talk.utils.bundle.BundleBuilder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; +import java.util.Calendar; import java.util.zip.CRC32; import javax.crypto.Cipher; @@ -78,15 +84,32 @@ public class MagicFirebaseMessagingService extends FirebaseMessagingService { if (decryptedPushMessage.getApp().equals("spreed")) { int smallIcon; Bitmap largeIcon; + String category = ""; + int priority = Notification.PRIORITY_DEFAULT; + + Intent intent = new Intent(this, CallActivity.class); + BundleBuilder bundleBuilder = new BundleBuilder(new Bundle()); + bundleBuilder.putString("roomToken", decryptedPushMessage.getId()); + bundleBuilder.putParcelable("userEntity", signatureVerification.getUserEntity()); + intent.putExtras(bundleBuilder.build()); + + PendingIntent pendingIntent = PendingIntent.getActivity(this, + 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + switch (decryptedPushMessage.getType()) { case "call": smallIcon = R.drawable.ic_call_black_24dp; + category = Notification.CATEGORY_CALL; + priority = Notification.PRIORITY_HIGH; break; case "room": smallIcon = R.drawable.ic_notifications_black_24dp; + category = Notification.CATEGORY_CALL; + priority = Notification.PRIORITY_HIGH; break; case "chat": smallIcon = R.drawable.ic_chat_black_24dp; + category = Notification.CATEGORY_MESSAGE; break; default: smallIcon = R.drawable.ic_logo; @@ -98,11 +121,21 @@ public class MagicFirebaseMessagingService extends FirebaseMessagingService { .setSmallIcon(smallIcon) .setLargeIcon(largeIcon) .setColor(getColor(R.color.colorPrimary)) + .setCategory(category) + .setPriority(priority) + .setWhen(Calendar.getInstance().getTimeInMillis()) + .setShowWhen(true) + .setSubText(signatureVerification.getUserEntity().getDisplayName()) .setContentTitle(decryptedPushMessage.getSubject()) - .setContentText(signatureVerification.getUserEntity().getDisplayName()) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setAutoCancel(true); + if (!"call".equals(decryptedPushMessage.getType())) { + notificationBuilder.setContentIntent(pendingIntent); + } else { + notificationBuilder.setFullScreenIntent(pendingIntent, true); + } + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);