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