diff --git a/app/src/main/java/com/nextcloud/talk/api/models/json/push/DecryptedPushMessage.java b/app/src/main/java/com/nextcloud/talk/api/models/json/push/DecryptedPushMessage.java
index e7e739ceb..3f6744395 100644
--- a/app/src/main/java/com/nextcloud/talk/api/models/json/push/DecryptedPushMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/api/models/json/push/DecryptedPushMessage.java
@@ -34,6 +34,9 @@ public class DecryptedPushMessage {
@JsonField(name = "app")
String app;
+ @JsonField(name = "type")
+ String type;
+
@JsonField(name = "subject")
String subject;
}
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 29937abb7..5f20fe6f3 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
@@ -21,12 +21,19 @@
package com.nextcloud.talk.services.firebase;
import android.annotation.SuppressLint;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.media.RingtoneManager;
import android.util.Base64;
import android.util.Log;
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.api.models.json.push.DecryptedPushMessage;
import com.nextcloud.talk.api.models.json.push.PushMessage;
import com.nextcloud.talk.models.SignatureVerification;
@@ -35,6 +42,7 @@ import com.nextcloud.talk.utils.PushUtils;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
+import java.util.zip.CRC32;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
@@ -67,17 +75,55 @@ public class MagicFirebaseMessagingService extends FirebaseMessagingService {
DecryptedPushMessage decryptedPushMessage = LoganSquare.parse(new String(decryptedSubject),
DecryptedPushMessage.class);
- if (decryptedPushMessage.getApp().equals("spreed") || decryptedPushMessage.getApp().equals
- ("talk")) {
- // process message
+ if (decryptedPushMessage.getApp().equals("spreed")) {
+ int smallIcon;
+ Bitmap largeIcon;
+ switch (decryptedPushMessage.getType()) {
+ case "call":
+ smallIcon = R.drawable.ic_call_black_24dp;
+ break;
+ case "room":
+ smallIcon = R.drawable.ic_notifications_black_24dp;
+ break;
+ case "chat":
+ smallIcon = R.drawable.ic_chat_black_24dp;
+ break;
+ default:
+ smallIcon = R.drawable.ic_logo;
+ }
+
+ largeIcon = BitmapFactory.decodeResource(getResources(), smallIcon);
+
+ Notification.Builder notificationBuilder = new Notification.Builder(this)
+ .setSmallIcon(smallIcon)
+ .setLargeIcon(largeIcon)
+ .setColor(getColor(R.color.colorPrimary))
+ .setContentTitle(decryptedPushMessage.getSubject())
+ .setContentText(signatureVerification.getUserEntity().getDisplayName())
+ .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
+ .setAutoCancel(true);
+
+ NotificationManager notificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ if (notificationManager != null) {
+ String stringForCrc = decryptedPushMessage.getSubject() + " " + signatureVerification
+ .getUserEntity().getDisplayName() + " " + signatureVerification.getUserEntity
+ ().getBaseUrl();
+
+ CRC32 crc32 = new CRC32();
+ crc32.update(stringForCrc.getBytes());
+
+ notificationManager.notify((int) crc32.getValue(), notificationBuilder.build());
+ }
}
}
} catch (NoSuchAlgorithmException e1) {
- Log.d(TAG, "No proper algorithm to decrypt the message");
+ Log.d(TAG, "No proper algorithm to decrypt the message " + e1.getLocalizedMessage());
} catch (NoSuchPaddingException e1) {
- Log.d(TAG, "No proper padding to decrypt the message");
+ Log.d(TAG, "No proper padding to decrypt the message " + e1.getLocalizedMessage());
} catch (InvalidKeyException e1) {
- Log.d(TAG, "Invalid private key");
+ Log.d(TAG, "Invalid private key " + e1.getLocalizedMessage());
}
} catch (Exception exception) {
Log.d(TAG, "Something went very wrong" + exception.getLocalizedMessage());
diff --git a/app/src/main/res/drawable/ic_chat_black_24dp.xml b/app/src/main/res/drawable/ic_chat_black_24dp.xml
new file mode 100644
index 000000000..65698dfb3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_chat_black_24dp.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml
new file mode 100644
index 000000000..40297fbc4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notifications_black_24dp.xml
@@ -0,0 +1,25 @@
+
+
+
+
+