implement basic modal for winning challenge

This commit is contained in:
Phillip Thelen 2020-11-03 12:54:03 +01:00
parent 6d4af9f934
commit 0f91410987
12 changed files with 86 additions and 8 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/challenge_won_gem_confetti"
android:layout_gravity="center"/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/achievement_view"
android:layout_width="48dp"
android:layout_height="52dp"
android:layout_gravity="center"/>
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/congratulations"
android:textColor="@color/text_primary"
android:textSize="17sp"
android:layout_marginTop="16dp"
android:layout_marginBottom="2dp"/>
<TextView
android:id="@+id/description_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/won_achievement_description_noname"
android:textColor="@color/text_ternary"
android:textSize="15sp"
android:gravity="center_horizontal"/>
</LinearLayout>

View file

@ -1121,4 +1121,9 @@
<string name="open_website">Open Website</string>
<string name="action_end_challenge">End Challenge</string>
<string name="end_challenge_description">To end a Challenge, log in to the Habitica website then tap the “End Challenge” button on the right of the Challenge screen.</string>
<string name="hurray">Hurray!</string>
<string name="you_won_challenge">You won a Challenge</string>
<string name="congratulations">Congratulations!</string>
<string name="won_achievement_description">%s selected you as the winner! Your win has been recorded in your Achievements.</string>
<string name="won_achievement_description_noname">You were selected as the winner! Your win has been recorded in your Achievements.</string>
</resources>

View file

@ -0,0 +1,3 @@
package com.habitrpg.android.habitica.events
class ShowWonChallengeDialog(val id: String)

View file

@ -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))

View file

@ -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"),

View file

@ -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)

View file

@ -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<SimpleDraweeView>(R.id.hatchingPotion_view), "achievement-karaoke2x")
setAdditionalContentView(view)
addButton(R.string.hurray, true)
}
}