diff --git a/Habitica/res/drawable/layout_rounded_bg_gray_50.xml b/Habitica/res/drawable/layout_rounded_bg_gray_50.xml
new file mode 100644
index 000000000..5956941ef
--- /dev/null
+++ b/Habitica/res/drawable/layout_rounded_bg_gray_50.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/drawable/rounded_border.xml b/Habitica/res/drawable/rounded_border.xml
new file mode 100644
index 000000000..e1d15e52f
--- /dev/null
+++ b/Habitica/res/drawable/rounded_border.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/Habitica/res/layout/dialog_habitica_base.xml b/Habitica/res/layout/dialog_habitica_base.xml
index 47f88b81f..d07f8a7be 100644
--- a/Habitica/res/layout/dialog_habitica_base.xml
+++ b/Habitica/res/layout/dialog_habitica_base.xml
@@ -44,4 +44,10 @@
android:paddingRight="@dimen/spacing_large"
tools:text="This is an example message"
tools:visibility="visible"/>
+
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_tavern_detail.xml b/Habitica/res/layout/fragment_tavern_detail.xml
index ca1770b9d..22dab90ef 100644
--- a/Habitica/res/layout/fragment_tavern_detail.xml
+++ b/Habitica/res/layout/fragment_tavern_detail.xml
@@ -38,6 +38,7 @@
android:layout_height="wrap_content"
app:title="@string/world_boss"
app:identifier="tavernWorldBoss"
+ app:hasAdditionalInfo="true"
android:visibility="gone">
-
+ android:paddingRight="@dimen/spacing_large">
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/quest_progress.xml b/Habitica/res/layout/quest_progress.xml
index a0f8c98ba..63205a933 100644
--- a/Habitica/res/layout/quest_progress.xml
+++ b/Habitica/res/layout/quest_progress.xml
@@ -16,7 +16,7 @@
android:paddingTop="@dimen/spacing_large"
android:paddingBottom="@dimen/spacing_large"
android:paddingLeft="@dimen/spacing_large"
- android:paddingRight="@dimen/spacing_large">
+ android:paddingRight="12dp">
+ android:layout_height="wrap_content">
+ android:paddingRight="@dimen/spacing_large"
+ android:gravity="center_vertical">
-
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/world_boss_description_view.xml b/Habitica/res/layout/world_boss_description_view.xml
new file mode 100644
index 000000000..cfe135dea
--- /dev/null
+++ b/Habitica/res/layout/world_boss_description_view.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/attrs.xml b/Habitica/res/values/attrs.xml
index 0d3ff6a18..6197ba0bc 100644
--- a/Habitica/res/values/attrs.xml
+++ b/Habitica/res/values/attrs.xml
@@ -73,5 +73,6 @@
+
diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml
index 21f86d33a..9c1bfe17b 100644
--- a/Habitica/res/values/dimens.xml
+++ b/Habitica/res/values/dimens.xml
@@ -123,5 +123,6 @@
240dp
16dp
46dp
+ 6dp
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 6e98e516f..f1f3d3e49 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -765,4 +765,13 @@
You have bought all the Gems you can this month. More become available within the first three days of each month. Thanks for subscribing!
Monthly Gem Cap Reached
Chat Message
+ The DysHeartener attacks!
+ A World Boss is a special event where the whole community works together to take down a powerful monster with their tasks!\nComplete tasks to damage the Boss\nThe Boss won’t damage you for missed tasks, but its Rage meter will go up. If the bar fills up, the Boss will attack one of the shopkeepers!\nYou can continue with normal Quest Bosses, damage will apply to both\nCheck the Tavern to see Boss progress and Rage attacks
+ A World Boss is a special event where the whole community works together to take down a powerful monster with their tasks!
+ Complete tasks to damage the Boss
+ The Boss won’t damage you for missed tasks, but its Rage meter will go up. If the bar fills up, the Boss will attack one of the shopkeepers!
+ You can continue with normal Quest Bosses, damage will apply to both
+ Check the Tavern to see Boss progress and Rage attacks
+ Defeat the Boss to earn special rewards and save Habitica from %s’s Terror!
+ %s attacks!
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
index b222512db..c18b86e10 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
@@ -177,6 +177,7 @@ class NavigationDrawerFragment : DialogFragment() {
subscriptions?.add(userRepository.getUser().subscribe(Action1 {
setUsername(it.profile.name)
avatarView.setAvatar(it)
+ questMenuView.configure(it)
}, RxErrorHandler.handleEmptyError()))
messagesButton.setOnClickListener { setSelection(SIDEBAR_INBOX) }
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt
index b266ddcfa..299ad0728 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt
@@ -1,13 +1,16 @@
package com.habitrpg.android.habitica.ui.fragments.social
+import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
+import android.graphics.PorterDuff
import android.graphics.Shader
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.support.v4.content.ContextCompat
+import android.support.v7.app.AlertDialog
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
@@ -15,6 +18,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
+import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
@@ -38,16 +42,19 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand
import com.habitrpg.android.habitica.extensions.backgroundCompat
+import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.extensions.notNull
import com.habitrpg.android.habitica.helpers.RemoteConfigManager
import com.habitrpg.android.habitica.models.members.PlayerTier
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
+import com.habitrpg.android.habitica.ui.views.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.social.UsernameLabel
import kotlinx.android.synthetic.main.shop_header.*
import kotlinx.android.synthetic.main.fragment_tavern_detail.*
import org.greenrobot.eventbus.EventBus
+import org.w3c.dom.Text
import rx.Observable
import rx.android.schedulers.AndroidSchedulers
import rx.functions.Action1
@@ -155,6 +162,33 @@ class TavernDetailFragment : BaseFragment() {
reportButton.setOnClickListener {
EventBus.getDefault().post(OpenMenuItemCommand(NavigationDrawerFragment.SIDEBAR_ABOUT))
}
+
+ worldBossSection.infoIconView.setOnClickListener {
+ showWorldBossInfoDialog()
+ }
+ }
+
+ private fun showWorldBossInfoDialog() {
+ context.notNull { val alert = HabiticaAlertDialog(it)
+ val quest = questProgressView.quest
+ val bossName = quest?.boss?.name ?: ""
+ alert.setTitle(R.string.world_boss_description_title)
+ alert.setTitleBackgroundColor(quest?.colors?.mediumColor ?: 0)
+ alert.setSubtitle(it.getString(R.string.world_boss_description_subtitle, bossName))
+ alert.setAdditionalContentView(R.layout.world_boss_description_view)
+
+ val descriptionView = alert.getContentView()
+ val promptView: TextView? = descriptionView?.findViewById(R.id.worldBossActionPromptView)
+ promptView?.text = it.getString(R.string.world_boss_action_prompt, bossName)
+ promptView?.setTextColor(quest?.colors?.mediumColor ?: 0)
+ val background = ContextCompat.getDrawable(it, R.drawable.rounded_border)
+ background?.setColorFilter(quest?.colors?.extraLightColor ?: 0, PorterDuff.Mode.MULTIPLY)
+ promptView?.backgroundCompat = background
+
+ alert.setButton(AlertDialog.BUTTON_POSITIVE, it.getString(R.string.close), { dialog, _ ->
+ dialog.dismiss()
+ })
+ alert.show() }
}
private fun updatePausedState() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt
index 271facd7d..4f7e4eab1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt
@@ -19,6 +19,7 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
private val titleView: LinearLayout by bindView(R.id.title_view)
private val titleLabel: TextView by bindView(R.id.titleTextView)
private val caretView: ImageView by bindView(R.id.caretView)
+ public val infoIconView: ImageView by bindView(R.id.infoIconView)
private var preferences: SharedPreferences? = null
private val padding = context?.resources?.getDimension(R.dimen.spacing_large)?.toInt() ?: 0
@@ -49,9 +50,7 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
return (separatorView.background as? ColorDrawable)?.color ?: 0
}
set(value) {
- if (value != null) {
- separatorView.setBackgroundColor(value)
- }
+ separatorView.setBackgroundColor(value)
}
private fun showViews() {
@@ -123,6 +122,12 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
caretColor = color
titleLabel.setTextColor(color)
}
+
+ if (attributes?.getBoolean(R.styleable.CollapsibleSectionView_hasAdditionalInfo, false) == true) {
+ infoIconView.setImageBitmap(HabiticaIconsHelper.imageOfInfoIcon())
+ } else {
+ infoIconView.visibility = View.GONE
+ }
}
override fun onAttachedToWindow() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaAlertDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaAlertDialog.kt
index 8cfe6e2fa..d8637a172 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaAlertDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaAlertDialog.kt
@@ -1,19 +1,16 @@
package com.habitrpg.android.habitica.ui.views
import android.content.Context
-import android.os.Bundle
import android.support.v4.content.ContextCompat
import android.support.v7.app.AlertDialog
import android.view.LayoutInflater
import android.view.View
+import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
-
-/**
- * Created by phillip on 01.02.18.
- */
+import com.habitrpg.android.habitica.extensions.layoutInflater
open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
@@ -21,6 +18,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
private val titleTextView: TextView by bindView(view, R.id.titleTextView)
private val subtitleTextView: TextView by bindView(view, R.id.subtitleTextView)
private val messageTextView: TextView by bindView(view, R.id.messageTextView)
+ private val contentViewContainer: ViewGroup by bindView(view, R.id.contentViewContainer)
init {
setView(view)
@@ -38,6 +36,10 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
titleTextView.setBackgroundColor(ContextCompat.getColor(context, colorId))
}
+ fun setTitleBackgroundColor(color: Int) {
+ titleTextView.setBackgroundColor(color)
+ }
+
fun setSubtitle(subtitle: CharSequence?) {
if (subtitle != null) {
subtitleTextView.visibility = View.VISIBLE
@@ -63,4 +65,27 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context) {
fun setMessage(messageId: Int) {
setMessage(context.getString(messageId))
}
+
+ fun setAdditionalContentView(layoutResID: Int) {
+ val inflater = context.layoutInflater
+ setAdditionalContentView(inflater.inflate(layoutResID, contentViewContainer, false))
+ }
+
+ fun setAdditionalContentView(view: View?) {
+ contentViewContainer.removeAllViewsInLayout()
+ if (view != null) {
+ contentViewContainer.visibility = View.VISIBLE
+ } else {
+ contentViewContainer.visibility = View.GONE
+ }
+ contentViewContainer.addView(view)
+ }
+
+ fun getContentView(): View? {
+ return if (contentViewContainer.childCount > 0) {
+ contentViewContainer.getChildAt(0)
+ } else {
+ null
+ }
+ }
}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt
index a61738928..5535c532f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt
@@ -19,6 +19,7 @@ import com.habitrpg.android.habitica.extensions.backgroundCompat
import com.habitrpg.android.habitica.extensions.bindView
import com.habitrpg.android.habitica.models.inventory.Quest
import com.habitrpg.android.habitica.models.inventory.QuestContent
+import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.ValueBar
@@ -31,6 +32,9 @@ class QuestMenuView : LinearLayout {
private val healthBarView: ValueBar by bindView(R.id.healthBarView)
private val topView: LinearLayout by bindView(R.id.topView)
private val closeButton: AppCompatImageButton by bindView(R.id.closeButton)
+ private val bottomView: ViewGroup by bindView(R.id.bottomView)
+ private val pendingDamageIconView: ImageView by bindView(R.id.pendingDamageIconView)
+ private val pendingDamageTextView: TextView by bindView(R.id.pendingDamageTextView)
private var questContent: QuestContent? = null
@@ -49,6 +53,8 @@ class QuestMenuView : LinearLayout {
healthBarView.setIcon(HabiticaIconsHelper.imageOfHeartDarkBg())
healthBarView.setLabelVisibility(View.GONE)
+ pendingDamageIconView.setImageBitmap(HabiticaIconsHelper.imageOfDamage())
+
closeButton.setOnClickListener {
hideBossArt()
val preferences = context.getSharedPreferences("collapsible_sections", 0)
@@ -65,12 +71,19 @@ class QuestMenuView : LinearLayout {
fun configure(questContent: QuestContent) {
this.questContent = questContent
healthBarView.maxValue = questContent.boss.hp.toDouble()
- healthBarView.setBackgroundColor(questContent.colors?.darkColor ?: 0)
+ bottomView.setBackgroundColor(questContent.colors?.darkColor ?: 0)
bossArtView.setBackgroundColor(questContent.colors?.mediumColor ?: 0)
- DataBindingUtils.loadImage(bossArtView, "quest_"+questContent?.key)
+ DataBindingUtils.loadImage(bossArtView, "quest_"+questContent.key)
bossNameView.text = questContent.boss.name
}
+ fun configure(user: User) {
+ val party = user.party
+ val quest = party.quest
+ val progress = quest.progress
+ pendingDamageTextView.text = String.format("%.01f", (user.party?.quest?.progress?.up ?: 0))
+ }
+
fun hideBossArt() {
topView.orientation = LinearLayout.HORIZONTAL
topView.setBackgroundColor(questContent?.colors?.mediumColor ?: 0)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.java
deleted file mode 100644
index 434e2e207..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.habitrpg.android.habitica.utils;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.habitrpg.android.habitica.models.inventory.Quest;
-import com.habitrpg.android.habitica.models.inventory.QuestMember;
-import com.habitrpg.android.habitica.models.inventory.QuestProgress;
-import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect;
-
-import java.lang.reflect.Type;
-import java.util.Map;
-
-import io.realm.RealmList;
-
-public class QuestDeserializer implements JsonDeserializer {
- @Override
- public Quest deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- JsonObject obj = json.getAsJsonObject();
- Quest quest = new Quest();
-
- if (obj.has("key") && !obj.get("key").isJsonNull()) {
- quest.setKey(obj.get("key").getAsString());
- } else {
- return quest;
- }
- if (obj.has("active")) {
- quest.setActive(obj.get("active").getAsBoolean());
- }
- if (obj.has("leader")) {
- quest.setLeader(obj.get("leader").getAsString());
- }
- if (obj.has("RSVPNeeded")) {
- quest.setRSVPNeeded(obj.get("RSVPNeeded").getAsBoolean());
- }
- if (obj.has("progress")) {
- QuestProgress progress = new QuestProgress();
- progress.setKey(quest.getKey());
- JsonObject progressObj = obj.get("progress").getAsJsonObject();
- if (progressObj.has("hp")) {
- progress.setHp(progressObj.get("hp").getAsInt());
- }
- if (progressObj.has("rage")) {
- progress.setRage(progressObj.get("rage").getAsInt());
- }
- if (progressObj.has("up")) {
- progress.setUp(progressObj.get("up").getAsInt());
- }
- if (progressObj.has("down")) {
- progress.setDown(progressObj.get("down").getAsInt());
- }
- if (progressObj.has("collect")) {
- progress.setCollect(new RealmList<>());
- for (Map.Entry entry : progressObj.get("collect").getAsJsonObject().entrySet()) {
- QuestProgressCollect collect = new QuestProgressCollect();
- collect.key = entry.getKey();
- collect.count = entry.getValue().getAsInt();
- progress.getCollect().add(collect);
- }
- }
- quest.setProgress(progress);
- }
-
- if (obj.has("members")) {
- RealmList members = new RealmList<>();
- for (Map.Entry entry : obj.get("members").getAsJsonObject().entrySet()) {
- QuestMember member = new QuestMember();
- member.key = entry.getKey();
- if (entry.getValue().isJsonNull()) {
- member.isParticipating = null;
- } else {
- member.isParticipating = entry.getValue().getAsBoolean();
- }
- members.add(member);
- }
- quest.setMembers(members);
- }
- return quest;
- }
-}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt
new file mode 100644
index 000000000..d13565ed1
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt
@@ -0,0 +1,82 @@
+package com.habitrpg.android.habitica.utils
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import com.google.gson.JsonObject
+import com.google.gson.JsonParseException
+import com.habitrpg.android.habitica.models.inventory.Quest
+import com.habitrpg.android.habitica.models.inventory.QuestMember
+import com.habitrpg.android.habitica.models.inventory.QuestProgress
+import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect
+
+import java.lang.reflect.Type
+
+import io.realm.RealmList
+
+class QuestDeserializer : JsonDeserializer {
+ @Throws(JsonParseException::class)
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Quest {
+ val obj = json.asJsonObject
+ val quest = Quest()
+
+ if (obj.has("progress")) {
+ val progress = QuestProgress()
+ progress.key = quest.key
+ val progressObj = obj.getAsJsonObject("progress")
+ if (progressObj.has("hp")) {
+ progress.hp = progressObj.get("hp").asDouble
+ }
+ if (progressObj.has("rage")) {
+ progress.rage = progressObj.get("rage").asDouble
+ }
+ if (progressObj.has("up")) {
+ progress.up = progressObj.get("up").asFloat
+ }
+ if (progressObj.has("down")) {
+ progress.down = progressObj.get("down").asFloat
+ }
+ if (progressObj.has("collect")) {
+ progress.collect = RealmList()
+ for ((key, value) in progressObj.getAsJsonObject("collect").entrySet()) {
+ val collect = QuestProgressCollect()
+ collect.key = key
+ collect.count = value.asInt
+ progress.collect?.add(collect)
+ }
+ }
+ quest.progress = progress
+ }
+
+ if (obj.has("key") && !obj.get("key").isJsonNull) {
+ quest.key = obj.get("key").asString
+ } else {
+ return quest
+ }
+ if (obj.has("active")) {
+ quest.active = obj.get("active").asBoolean
+ }
+ if (obj.has("leader")) {
+ quest.leader = obj.get("leader").asString
+ }
+ if (obj.has("RSVPNeeded")) {
+ quest.RSVPNeeded = obj.get("RSVPNeeded").asBoolean
+ }
+
+ if (obj.has("members")) {
+ val members = RealmList()
+ for ((key, value) in obj.getAsJsonObject("members").entrySet()) {
+ val member = QuestMember()
+ member.key = key
+ if (value.isJsonNull) {
+ member.isParticipating = null
+ } else {
+ member.isParticipating = value.asBoolean
+ }
+ members.add(member)
+ }
+ quest.members = members
+ }
+ return quest
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/UserDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/UserDeserializer.kt
index ea2636904..12ec98735 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/UserDeserializer.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/UserDeserializer.kt
@@ -50,7 +50,7 @@ class UserDeserializer : JsonDeserializer {
user.party = context.deserialize(obj.get("party"), UserParty::class.java)
if (user.party != null && user.party.quest != null) {
user.party.quest.id = user.id
- if (!obj.get("party").asJsonObject.get("quest").asJsonObject.has("RSVPNeeded")) {
+ if (!obj.getAsJsonObject("party").getAsJsonObject("quest").has("RSVPNeeded")) {
val realm = Realm.getDefaultInstance()
val quest = realm.where(Quest::class.java).equalTo("id", user.id).findFirst()
if (quest != null && quest.isValid) {
@@ -91,9 +91,9 @@ class UserDeserializer : JsonDeserializer {
}
if (obj.has("purchased")) {
user.purchased = context.deserialize(obj.get("purchased"), Purchases::class.java)
- if (obj.get("purchased").asJsonObject.has("plan")) {
- if (obj.get("purchased").asJsonObject.get("plan").asJsonObject.has("mysteryItems")) {
- user.purchased.plan.mysteryItemCount = obj.get("purchased").asJsonObject.get("plan").asJsonObject.get("mysteryItems").asJsonArray.size()
+ if (obj.getAsJsonObject("purchased").has("plan")) {
+ if (obj.getAsJsonObject("purchased").getAsJsonObject("plan").has("mysteryItems")) {
+ user.purchased.plan.mysteryItemCount = obj.getAsJsonObject("purchased").getAsJsonObject("plan").getAsJsonArray("mysteryItems").size()
}
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt
index 808645c3d..175f1a25e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/WorldStateSerialization.kt
@@ -27,6 +27,7 @@ class WorldStateSerialization: JsonDeserializer {
if (progressObj.has("rage")) {
progress.rage = progressObj["rage"].asDouble
}
+ state.progress = progress
}
if (worldBossObject.has("extra")) {
val extra = worldBossObject["extra"].asJsonObject