diff --git a/Habitica/res/layout/quest_progress.xml b/Habitica/res/layout/quest_progress.xml
index af48f11a0..a0f8c98ba 100644
--- a/Habitica/res/layout/quest_progress.xml
+++ b/Habitica/res/layout/quest_progress.xml
@@ -38,7 +38,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_large"
- android:layout_marginBottom="@dimen/spacing_large"
+ android:paddingBottom="@dimen/spacing_large"
android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"/>
Leslie
Time Travelers
Daniel
+ Matt
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 8ede54478..a570fb684 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -747,4 +747,11 @@
There are 3 potential Rage Strikes
This gauge fills when Habiticans miss their Dailies. If it fills up, the DysHeartener will unleash its Shattering Heartbreak attack on one of Habitica\'s shopkeepers, so be sure to do your tasks!
This Strike hasn’t happened yet!
+ The %s was Attacked!
+ %s is Heartbroken!
+ Our beloved %s was devastated when the %s shattered the %s. Quickly, tackle your tasks to defeat the monster and help rebuild!!
+ Quest Shop
+ Alex the Merchant
+ Daniel the inn keeper
+ Matt the beast master
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 fe07f8283..271facd7d 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
@@ -11,6 +11,7 @@ import android.widget.LinearLayout
import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
+import com.habitrpg.android.habitica.extensions.notNull
class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
@@ -102,9 +103,8 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
}
init {
- val thisContext = this.context
- if (thisContext != null) {
- caretColor = ContextCompat.getColor(thisContext, R.color.black_50_alpha)
+ context.notNull {
+ caretColor = ContextCompat.getColor(it, R.color.black_50_alpha)
}
View.inflate(context, R.layout.view_collapsible_section, this)
orientation = LinearLayout.VERTICAL
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt
index 4b56bc2b8..0b104b280 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt
@@ -1,34 +1,32 @@
package com.habitrpg.android.habitica.ui.views.social
import android.content.Context
-import android.content.DialogInterface
+import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.RectF
import android.support.v4.content.ContextCompat
-import android.support.v4.content.res.ResourcesCompat
import android.support.v7.app.AlertDialog
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.facebook.drawee.view.SimpleDraweeView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
-import com.habitrpg.android.habitica.helpers.RxErrorHandler
-import com.habitrpg.android.habitica.interactors.CheckClassSelectionUseCase
import com.habitrpg.android.habitica.models.inventory.Quest
import com.habitrpg.android.habitica.models.inventory.QuestContent
-import com.habitrpg.android.habitica.models.inventory.QuestProgress
import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
+import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.views.*
import io.realm.RealmList
-import org.greenrobot.eventbus.EventBus
+import android.graphics.drawable.GradientDrawable
+import com.habitrpg.android.habitica.extensions.backgroundCompat
+
class QuestProgressView : LinearLayout {
@@ -68,6 +66,8 @@ class QuestProgressView : LinearLayout {
setupView(context)
}
+ private var preferences: SharedPreferences? = null
+
private fun setupView(context: Context) {
setWillNotDraw(false)
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@@ -83,6 +83,11 @@ class QuestProgressView : LinearLayout {
}
rageStrikeDescriptionView.setOnClickListener { showStrikeDescriptionAlert() }
+
+ preferences = context.getSharedPreferences("collapsible_sections", 0)
+ if (preferences?.getBoolean("boss_art_collapsed", false) == true) {
+ hideQuestImage()
+ }
}
override fun onDraw(canvas: Canvas?) {
@@ -145,12 +150,18 @@ class QuestProgressView : LinearLayout {
setCollectionViews(collection, quest)
}
}
- questDescriptionView.text = quest.notes
+ questDescriptionView.text = MarkdownParser.parseMarkdown(quest.notes)
DataBindingUtils.loadImage(questImageView, "quest_"+quest.key)
val lightColor = quest.colors?.lightColor
if (lightColor != null) {
questDescriptionSection.separatorColor = lightColor
questImageSeparator.setBackgroundColor(lightColor)
+
+ val gradientDrawable = GradientDrawable(
+ GradientDrawable.Orientation.TOP_BOTTOM,
+ intArrayOf(ContextCompat.getColor(context, R.color.transparent), lightColor))
+ gradientDrawable.cornerRadius = 0f
+ questImageView.backgroundCompat = gradientDrawable
}
}
@@ -182,7 +193,15 @@ class QuestProgressView : LinearLayout {
}
private fun showActiveStrikeAlert(key: String) {
-
+ val alert = HabiticaAlertDialog(context)
+ alert.setTitle(context.getString(R.string.strike_active_title, getLocationName(key)))
+ alert.setTitleBackground(R.color.orange_10)
+ alert.setSubtitle(context.getString(R.string.strike_active_subtitle, getNpcName(key)))
+ alert.setMessage(context.getString(R.string.strike_active_description, getLongNPCName(key), quest?.boss?.name ?: "", getLocationName(key)))
+ alert.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.close), { dialog, _ ->
+ dialog.dismiss()
+ })
+ alert.show()
}
private fun showPendingStrikeAlert() {
@@ -225,13 +244,53 @@ class QuestProgressView : LinearLayout {
}
}
+ private fun getNpcName(key: String): String {
+ return when (key) {
+ "market" -> context.getString(R.string.market_owner)
+ "tavern" -> context.getString(R.string.tavern_owner)
+ "questShop" -> context.getString(R.string.questShop_owner)
+ "seasonalShop" -> context.getString(R.string.seasonalShop_owner)
+ "stable" -> context.getString(R.string.stable_owner)
+ else -> ""
+ }
+ }
+
+ private fun getLocationName(key: String): String {
+ return when (key) {
+ "market" -> context.getString(R.string.market)
+ "tavern" -> context.getString(R.string.sidebar_tavern)
+ "questShop" -> context.getString(R.string.questShop)
+ "seasonalShop" -> context.getString(R.string.seasonalShop)
+ "stable" -> context.getString(R.string.sidebar_stable)
+ else -> ""
+ }
+ }
+
+ private fun getLongNPCName(key: String): String {
+ return when (key) {
+ "market" -> context.getString(R.string.market_owner_long)
+ "tavern" -> context.getString(R.string.tavern_owner_long)
+ "questShop" -> context.getString(R.string.questShop_owner)
+ "seasonalShop" -> context.getString(R.string.seasonalShop_owner)
+ "stable" -> context.getString(R.string.stable_owner_long)
+ else -> ""
+ }
+ }
+
+
private fun showQuestImage() {
questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), true))
questImageView.visibility = View.VISIBLE
+ val editPreferences = preferences?.edit()
+ editPreferences?.putBoolean("boss_art_collapsed", true)
+ editPreferences?.apply()
}
private fun hideQuestImage() {
questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), false))
questImageView.visibility = View.GONE
+ val editPreferences = preferences?.edit()
+ editPreferences?.putBoolean("boss_art_collapsed", true)
+ editPreferences?.apply()
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/GroupSerialization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/GroupSerialization.kt
index 16b774904..c767c98e4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/GroupSerialization.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/GroupSerialization.kt
@@ -98,8 +98,8 @@ class GroupSerialization : JsonDeserializer, JsonSerializer {
group.quest?.participants = newMembers
}
- if (questObject.has("extra") && questObject.getAsJsonObject("extra").has("worldDmg")) {
- val worldDamageObject = questObject.getAsJsonObject("extra").getAsJsonObject("worldDmg")
+ if (questObject.has("extra")) {
+ val worldDamageObject = questObject.getAsJsonObject("extra")
worldDamageObject.entrySet().forEach { (key, value) ->
val rageStrike = QuestRageStrike(key, value.asBoolean)
group.quest?.addRageStrike(rageStrike)