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) + } + } }