diff --git a/Habitica/res/drawable-hdpi/notification_close.webp b/Habitica/res/drawable-hdpi/notification_close.webp
new file mode 100644
index 000000000..e5cc8a9aa
Binary files /dev/null and b/Habitica/res/drawable-hdpi/notification_close.webp differ
diff --git a/Habitica/res/drawable-hdpi/notification_stat_sparkles.webp b/Habitica/res/drawable-hdpi/notification_stat_sparkles.webp
new file mode 100644
index 000000000..229a225ae
Binary files /dev/null and b/Habitica/res/drawable-hdpi/notification_stat_sparkles.webp differ
diff --git a/Habitica/res/drawable-hdpi/notifications_bailey.webp b/Habitica/res/drawable-hdpi/notifications_bailey.webp
new file mode 100644
index 000000000..db804e26e
Binary files /dev/null and b/Habitica/res/drawable-hdpi/notifications_bailey.webp differ
diff --git a/Habitica/res/drawable-mdpi/notification_close.webp b/Habitica/res/drawable-mdpi/notification_close.webp
new file mode 100644
index 000000000..f6626764c
Binary files /dev/null and b/Habitica/res/drawable-mdpi/notification_close.webp differ
diff --git a/Habitica/res/drawable-mdpi/notification_stat_sparkles.webp b/Habitica/res/drawable-mdpi/notification_stat_sparkles.webp
new file mode 100644
index 000000000..833675744
Binary files /dev/null and b/Habitica/res/drawable-mdpi/notification_stat_sparkles.webp differ
diff --git a/Habitica/res/drawable-mdpi/notifications_bailey.webp b/Habitica/res/drawable-mdpi/notifications_bailey.webp
new file mode 100644
index 000000000..819d7c02e
Binary files /dev/null and b/Habitica/res/drawable-mdpi/notifications_bailey.webp differ
diff --git a/Habitica/res/drawable-xhdpi/notification_close.webp b/Habitica/res/drawable-xhdpi/notification_close.webp
new file mode 100644
index 000000000..13f76d440
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/notification_close.webp differ
diff --git a/Habitica/res/drawable-xhdpi/notification_stat_sparkles.webp b/Habitica/res/drawable-xhdpi/notification_stat_sparkles.webp
new file mode 100644
index 000000000..848b9e2a3
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/notification_stat_sparkles.webp differ
diff --git a/Habitica/res/drawable-xhdpi/notifications_bailey.webp b/Habitica/res/drawable-xhdpi/notifications_bailey.webp
new file mode 100644
index 000000000..cdd676c5f
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/notifications_bailey.webp differ
diff --git a/Habitica/res/drawable-xxhdpi/notification_close.webp b/Habitica/res/drawable-xxhdpi/notification_close.webp
new file mode 100644
index 000000000..11b44d76a
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/notification_close.webp differ
diff --git a/Habitica/res/drawable-xxhdpi/notification_stat_sparkles.webp b/Habitica/res/drawable-xxhdpi/notification_stat_sparkles.webp
new file mode 100644
index 000000000..34b49b023
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/notification_stat_sparkles.webp differ
diff --git a/Habitica/res/drawable-xxhdpi/notifications_bailey.webp b/Habitica/res/drawable-xxhdpi/notifications_bailey.webp
new file mode 100644
index 000000000..71f224020
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/notifications_bailey.webp differ
diff --git a/Habitica/res/layout/notification_item.xml b/Habitica/res/layout/notification_item.xml
new file mode 100644
index 000000000..3eed1db07
--- /dev/null
+++ b/Habitica/res/layout/notification_item.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 0f12a9006..16b8f1061 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -863,6 +863,9 @@
You’re all caught up!
The notification fairies give you a raucous round of applause! Well done!
Dismiss All
+ New Bailey Update!
+ %1$s has new posts]]>
+ %1$s unallocated Stat Points]]>
Create
Only leader can create Challenges
Create Party
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
index 6ccc55d48..00b5c789a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
@@ -2,15 +2,17 @@ package com.habitrpg.android.habitica.ui.activities
import android.content.Context
import android.os.Bundle
+import android.text.Html
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
+import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.ViewModelProviders
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.helpers.RxErrorHandler
-import com.habitrpg.android.habitica.models.notifications.GlobalNotification
+import com.habitrpg.android.habitica.models.notifications.*
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
import io.reactivex.functions.Consumer
import kotlinx.android.synthetic.main.activity_notifications.*
@@ -87,7 +89,10 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
notifications.map {
val item: View? = when (it.type) {
- //TODO("not implemented")
+ NotificationType.NEW_CHAT_MESSAGE.type -> createNewChatMessageNotification(it)
+ NotificationType.NEW_STUFF.type -> createNewStuffNotification(it)
+ NotificationType.UNALLOCATED_STATS_POINTS.type -> createUnallocatedStatsNotification(it)
+ //TODO rest of the notification types
else -> null
}
@@ -106,4 +111,61 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
return header
}
+
+ private fun createNewChatMessageNotification(notification: GlobalNotification): View? {
+ val data = notification.getData() as? NewChatMessageData
+
+ return createNotificationItem(
+ notification,
+ fromHtml(getString(R.string.new_msg_guild, data?.group?.name))
+ )
+ }
+
+ private fun createNewStuffNotification(notification: GlobalNotification): View? {
+ val data = notification.getData() as? NewStuffData
+ val text = fromHtml("" + getString(R.string.new_bailey_update) + "
" + data?.title)
+
+ return createNotificationItem(
+ notification,
+ text,
+ R.drawable.notifications_bailey
+ )
+ }
+
+ private fun createUnallocatedStatsNotification(notification: GlobalNotification): View? {
+ val data = notification.getData() as? UnallocatedPointsData
+
+ return createNotificationItem(
+ notification,
+ fromHtml(getString(R.string.unallocated_stats_points, data?.points.toString())),
+ R.drawable.notification_stat_sparkles
+ )
+ }
+
+ private fun createNotificationItem(notification: GlobalNotification, messageText: CharSequence, imageResourceId: Int? = null): View? {
+ val item = inflater.inflate(R.layout.notification_item, notification_items, false)
+
+ val dismissButton = item?.findViewById(R.id.dismiss_button) as? ImageView
+ dismissButton?.setOnClickListener({ viewModel.dismissNotification(notification) })
+
+ val messageTextView = item?.findViewById(R.id.message_text) as? TextView
+ messageTextView?.text = messageText
+
+ if (imageResourceId != null) {
+ val notificationImage = item?.findViewById(R.id.notification_image) as? ImageView
+ notificationImage?.setImageResource(imageResourceId)
+ notificationImage?.visibility = View.VISIBLE
+ }
+
+ return item
+ }
+
+ private fun fromHtml(text: String): CharSequence {
+ return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
+ Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY)
+ } else {
+ @Suppress("DEPRECATION")
+ Html.fromHtml(text)
+ }
+ }
}