diff --git a/Habitica/res/values/strings.constants.xml b/Habitica/res/values/strings.constants.xml
index 281e750a3..da5e8ec19 100644
--- a/Habitica/res/values/strings.constants.xml
+++ b/Habitica/res/values/strings.constants.xml
@@ -15,6 +15,8 @@
REJECT_GUILD_INVITE
ACCEPT_QUEST_INVITE
REJECT_QUEST_INVITE
+ GROUP_MESSAGE_REPLY
+ INBOX_MESSAGE_REPLY
habitica
habitrpg-qr-code.jpg
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index d91923cc6..639c9f0a4 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -945,4 +945,6 @@
Share Challenge with
App Theme
You sent a %s
+ New messages in %s
+ You received %d messages from %s
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
index ed95c4f7f..a08f67219 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
@@ -21,7 +21,8 @@ class NotificationOpenHandler {
PushNotificationManager.RECEIVED_PRIVATE_MESSAGE_PUSH_NOTIFICATION_KEY -> openPrivateMessageScreen(intent.getStringExtra("replyTo"))
PushNotificationManager.CHANGE_USERNAME_PUSH_NOTIFICATION_KEY -> openSettingsScreen()
PushNotificationManager.GIFT_ONE_GET_ONE_PUSH_NOTIFICATION_KEY -> openSubscriptionScreen()
- PushNotificationManager.CHAT_MENTION_NOTIFICATION_KEY -> handleChatMention(intent.getStringExtra("type"), intent.getStringExtra("groupID"))
+ PushNotificationManager.CHAT_MENTION_NOTIFICATION_KEY -> handleChatMessage(intent.getStringExtra("type"), intent.getStringExtra("groupID"))
+ PushNotificationManager.GROUP_ACTIVITY_NOTIFICATION_KEY -> handleChatMessage(intent.getStringExtra("type"), intent.getStringExtra("groupID"))
}
}
@@ -60,7 +61,7 @@ class NotificationOpenHandler {
MainNavigationController.navigate(R.id.prefsActivity)
}
- private fun handleChatMention(type: String, groupID: String) {
+ private fun handleChatMessage(type: String, groupID: String) {
when (type) {
"party" -> MainNavigationController.navigate(R.id.partyFragment)
"tavern" -> MainNavigationController.navigate(R.id.tavernFragment)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt
new file mode 100644
index 000000000..a0b1062d8
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt
@@ -0,0 +1,89 @@
+package com.habitrpg.android.habitica.helpers.notifications
+
+import android.app.NotificationManager
+import android.app.PendingIntent
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import androidx.core.app.NotificationCompat
+import androidx.core.app.Person
+import androidx.core.app.RemoteInput
+import androidx.core.os.bundleOf
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver
+import net.pherth.android.emoji_library.EmojiParser
+import java.text.SimpleDateFormat
+import java.util.*
+
+class GroupActivityNotification(context: Context, identifier: String) : HabiticaLocalNotification(context, identifier) {
+
+ override fun getNotificationID(data: MutableMap): Int {
+ return data["groupID"].hashCode()
+ }
+
+ override fun configureNotificationBuilder(data: MutableMap): NotificationCompat.Builder {
+ val user = Person.Builder().setName("You").build()
+ val message = makeMessageFromData(data)
+ var style = NotificationCompat.MessagingStyle(user)
+ .setGroupConversation(true)
+ .setConversationTitle(data["groupName"])
+
+ val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager
+ val existingNotifications = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ notificationManager?.activeNotifications?.filter { it.id == getNotificationID(data) }
+ } else null
+ val oldMessages = existingNotifications?.firstOrNull()?.notification?.extras?.getBundle("messages")?.get("messages") as? ArrayList