diff --git a/Habitica/res/drawable-hdpi/challenge_won_gem_confetti.png b/Habitica/res/drawable-hdpi/challenge_won_gem_confetti.png
new file mode 100644
index 000000000..f3452f064
Binary files /dev/null and b/Habitica/res/drawable-hdpi/challenge_won_gem_confetti.png differ
diff --git a/Habitica/res/drawable-mdpi/challenge_won_gem_confetti.png b/Habitica/res/drawable-mdpi/challenge_won_gem_confetti.png
new file mode 100644
index 000000000..03e3f959b
Binary files /dev/null and b/Habitica/res/drawable-mdpi/challenge_won_gem_confetti.png differ
diff --git a/Habitica/res/drawable-xhdpi/challenge_won_gem_confetti.png b/Habitica/res/drawable-xhdpi/challenge_won_gem_confetti.png
new file mode 100644
index 000000000..860b11f9b
Binary files /dev/null and b/Habitica/res/drawable-xhdpi/challenge_won_gem_confetti.png differ
diff --git a/Habitica/res/drawable-xxhdpi/challenge_won_gem_confetti.png b/Habitica/res/drawable-xxhdpi/challenge_won_gem_confetti.png
new file mode 100644
index 000000000..44b5516fa
Binary files /dev/null and b/Habitica/res/drawable-xxhdpi/challenge_won_gem_confetti.png differ
diff --git a/Habitica/res/drawable-xxxhdpi/challenge_won_gem_confetti.png b/Habitica/res/drawable-xxxhdpi/challenge_won_gem_confetti.png
new file mode 100644
index 000000000..1f8a82a75
Binary files /dev/null and b/Habitica/res/drawable-xxxhdpi/challenge_won_gem_confetti.png differ
diff --git a/Habitica/res/layout/dialog_won_challenge.xml b/Habitica/res/layout/dialog_won_challenge.xml
new file mode 100644
index 000000000..4308e178f
--- /dev/null
+++ b/Habitica/res/layout/dialog_won_challenge.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 3b42f14b9..b3863ff66 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1121,4 +1121,9 @@
Open Website
End Challenge
To end a Challenge, log in to the Habitica website then tap the “End Challenge” button on the right of the Challenge screen.
+ Hurray!
+ You won a Challenge
+ Congratulations!
+ %s selected you as the winner! Your win has been recorded in your Achievements.
+ You were selected as the winner! Your win has been recorded in your Achievements.
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowWonChallengeDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowWonChallengeDialog.kt
new file mode 100644
index 000000000..d06a5847e
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowWonChallengeDialog.kt
@@ -0,0 +1,3 @@
+package com.habitrpg.android.habitica.events
+
+class ShowWonChallengeDialog(val id: String)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt
index ee88b2c4c..702a72b30 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt
@@ -4,10 +4,7 @@ import android.content.Context
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.ApiClient
-import com.habitrpg.android.habitica.events.ShowAchievementDialog
-import com.habitrpg.android.habitica.events.ShowCheckinDialog
-import com.habitrpg.android.habitica.events.ShowFirstDropDialog
-import com.habitrpg.android.habitica.events.ShowSnackbarEvent
+import com.habitrpg.android.habitica.events.*
import com.habitrpg.android.habitica.models.Notification
import com.habitrpg.android.habitica.models.notifications.AchievementData
import com.habitrpg.android.habitica.models.notifications.FirstDropData
@@ -73,6 +70,7 @@ class NotificationsManager (private val context: Context) {
Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> displayAchievementNotification(it)
Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> displayAchievementNotification(it)
Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> displayAchievementNotification(it)
+ Notification.Type.WON_CHALLENGE.type -> displayWonChallengeNotificaiton(it)
Notification.Type.ACHIEVEMENT_GENERIC.type -> displayAchievementNotification(it, notifications.find { notif ->
notif.type == Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type
} != null)
@@ -90,6 +88,11 @@ class NotificationsManager (private val context: Context) {
return true
}
+ private fun displayWonChallengeNotificaiton(notification: Notification): Any {
+ EventBus.getDefault().post(ShowWonChallengeDialog(notification.id))
+ return true
+ }
+
private fun displayFirstDropNotification(notification: Notification): Boolean {
val data = (notification.data as? FirstDropData)
EventBus.getDefault().post(ShowFirstDropDialog(data?.egg ?: "", data?.hatchingPotion ?: "", notification.id))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt
index 95c75dc70..7201242a0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Notification.kt
@@ -13,6 +13,7 @@ class Notification {
GROUP_TASK_APPROVED("GROUP_TASK_APPROVED"),
GROUP_TASK_REQUIRES_APPROVAL("GROUP_TASK_REQUIRES_APPROVAL"),
UNALLOCATED_STATS_POINTS("UNALLOCATED_STATS_POINTS"),
+ WON_CHALLENGE("WON_CHALLENGE"),
//Achievements
ACHIEVEMENT_PARTY_UP("ACHIEVEMENT_PARTY_UP"),
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
index 398580c91..4681a402c 100755
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
@@ -63,10 +63,7 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.ValueBar
-import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog
-import com.habitrpg.android.habitica.ui.views.dialogs.FirstDropDialog
-import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
-import com.habitrpg.android.habitica.ui.views.dialogs.QuestCompletedDialog
+import com.habitrpg.android.habitica.ui.views.dialogs.*
import com.habitrpg.android.habitica.ui.views.yesterdailies.YesterdailyDialog
import com.habitrpg.android.habitica.userpicture.BitmapUtils
import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
@@ -814,6 +811,19 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
}, RxErrorHandler.handleEmptyError()))
}
+ @Subscribe
+ fun showWonAchievementDialog(event: ShowWonChallengeDialog) {
+ compositeSubscription.add(Completable.complete()
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({
+ retrieveUser(true)
+ val dialog = WonChallengeDialog(this)
+ dialog.enqueue()
+ apiClient.readNotification(event.id)
+ .subscribe({ }, RxErrorHandler.handleEmptyError())
+ }, RxErrorHandler.handleEmptyError()))
+ }
+
override fun onEvent(event: ShowConnectionProblemEvent) {
if (event.title != null) {
super.onEvent(event)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt
new file mode 100644
index 000000000..b26b830ce
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt
@@ -0,0 +1,20 @@
+package com.habitrpg.android.habitica.ui.views.dialogs
+
+import android.content.Context
+import android.view.LayoutInflater
+import com.facebook.drawee.view.SimpleDraweeView
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
+
+class WonChallengeDialog(context: Context) : HabiticaAlertDialog(context) {
+ init {
+ val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
+ val view = inflater?.inflate(R.layout.dialog_won_challenge, null)
+ setTitle(R.string.you_won_challenge)
+
+ DataBindingUtils.loadImage(view?.findViewById(R.id.hatchingPotion_view), "achievement-karaoke2x")
+
+ setAdditionalContentView(view)
+ addButton(R.string.hurray, true)
+ }
+}