show active rage strike alert

This commit is contained in:
Phillip Thelen 2018-02-06 17:57:23 +01:00
parent 49d9b77d15
commit 27d290d963
6 changed files with 83 additions and 15 deletions

View file

@ -38,7 +38,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_large" android:layout_marginTop="@dimen/spacing_large"
android:layout_marginBottom="@dimen/spacing_large" android:paddingBottom="@dimen/spacing_large"
android:paddingLeft="@dimen/spacing_large" android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"/> android:paddingRight="@dimen/spacing_large"/>
<TextView <TextView
@ -50,6 +50,7 @@
android:layout_marginBottom="@dimen/spacing_small" android:layout_marginBottom="@dimen/spacing_small"
android:paddingLeft="@dimen/spacing_large" android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large" android:paddingRight="@dimen/spacing_large"
android:layout_marginTop="@dimen/spacing_large"
android:textColor="@color/white"/> android:textColor="@color/white"/>
<com.habitrpg.android.habitica.ui.views.ValueBar <com.habitrpg.android.habitica.ui.views.ValueBar
android:id="@+id/bossHealthView" android:id="@+id/bossHealthView"

View file

@ -26,5 +26,6 @@
<string name="seasonalShop_owner" translatable="false">Leslie</string> <string name="seasonalShop_owner" translatable="false">Leslie</string>
<string name="timetravelers_owner" translatable="false">Time Travelers</string> <string name="timetravelers_owner" translatable="false">Time Travelers</string>
<string name="tavern_owner" translatable="false">Daniel</string> <string name="tavern_owner" translatable="false">Daniel</string>
<string name="stable_owner" translatable="false">Matt</string>
<string name="empty" translatable="false"> </string> <string name="empty" translatable="false"> </string>
</resources> </resources>

View file

@ -747,4 +747,11 @@
<string name="strike_description_subtitle">There are 3 potential Rage Strikes</string> <string name="strike_description_subtitle">There are 3 potential Rage Strikes</string>
<string name="strike_description_description">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!</string> <string name="strike_description_description">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!</string>
<string name="pending_strike_subtitle">This Strike hasnt happened yet!</string> <string name="pending_strike_subtitle">This Strike hasnt happened yet!</string>
<string name="strike_active_title" formatted="false">The %s was Attacked!</string>
<string name="strike_active_subtitle" formatted="false">%s is Heartbroken!</string>
<string name="strike_active_description" formatted="false">Our beloved %s was devastated when the %s shattered the %s. Quickly, tackle your tasks to defeat the monster and help rebuild!!</string>
<string name="questShop">Quest Shop</string>
<string name="market_owner_long">Alex the Merchant</string>
<string name="tavern_owner_long">Daniel the inn keeper</string>
<string name="stable_owner_long">Matt the beast master</string>
</resources> </resources>

View file

@ -11,6 +11,7 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView import com.habitrpg.android.habitica.extensions.bindView
import com.habitrpg.android.habitica.extensions.notNull
class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) { class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
@ -102,9 +103,8 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
} }
init { init {
val thisContext = this.context context.notNull {
if (thisContext != null) { caretColor = ContextCompat.getColor(it, R.color.black_50_alpha)
caretColor = ContextCompat.getColor(thisContext, R.color.black_50_alpha)
} }
View.inflate(context, R.layout.view_collapsible_section, this) View.inflate(context, R.layout.view_collapsible_section, this)
orientation = LinearLayout.VERTICAL orientation = LinearLayout.VERTICAL

View file

@ -1,34 +1,32 @@
package com.habitrpg.android.habitica.ui.views.social package com.habitrpg.android.habitica.ui.views.social
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.SharedPreferences
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.RectF import android.graphics.RectF
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v4.content.res.ResourcesCompat
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import com.facebook.drawee.view.SimpleDraweeView import com.facebook.drawee.view.SimpleDraweeView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView 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.Quest
import com.habitrpg.android.habitica.models.inventory.QuestContent 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.models.inventory.QuestProgressCollect
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.views.* import com.habitrpg.android.habitica.ui.views.*
import io.realm.RealmList import io.realm.RealmList
import org.greenrobot.eventbus.EventBus import android.graphics.drawable.GradientDrawable
import com.habitrpg.android.habitica.extensions.backgroundCompat
class QuestProgressView : LinearLayout { class QuestProgressView : LinearLayout {
@ -68,6 +66,8 @@ class QuestProgressView : LinearLayout {
setupView(context) setupView(context)
} }
private var preferences: SharedPreferences? = null
private fun setupView(context: Context) { private fun setupView(context: Context) {
setWillNotDraw(false) setWillNotDraw(false)
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@ -83,6 +83,11 @@ class QuestProgressView : LinearLayout {
} }
rageStrikeDescriptionView.setOnClickListener { showStrikeDescriptionAlert() } rageStrikeDescriptionView.setOnClickListener { showStrikeDescriptionAlert() }
preferences = context.getSharedPreferences("collapsible_sections", 0)
if (preferences?.getBoolean("boss_art_collapsed", false) == true) {
hideQuestImage()
}
} }
override fun onDraw(canvas: Canvas?) { override fun onDraw(canvas: Canvas?) {
@ -145,12 +150,18 @@ class QuestProgressView : LinearLayout {
setCollectionViews(collection, quest) setCollectionViews(collection, quest)
} }
} }
questDescriptionView.text = quest.notes questDescriptionView.text = MarkdownParser.parseMarkdown(quest.notes)
DataBindingUtils.loadImage(questImageView, "quest_"+quest.key) DataBindingUtils.loadImage(questImageView, "quest_"+quest.key)
val lightColor = quest.colors?.lightColor val lightColor = quest.colors?.lightColor
if (lightColor != null) { if (lightColor != null) {
questDescriptionSection.separatorColor = lightColor questDescriptionSection.separatorColor = lightColor
questImageSeparator.setBackgroundColor(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) { 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() { 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() { private fun showQuestImage() {
questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), true)) questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), true))
questImageView.visibility = View.VISIBLE questImageView.visibility = View.VISIBLE
val editPreferences = preferences?.edit()
editPreferences?.putBoolean("boss_art_collapsed", true)
editPreferences?.apply()
} }
private fun hideQuestImage() { private fun hideQuestImage() {
questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), false)) questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), false))
questImageView.visibility = View.GONE questImageView.visibility = View.GONE
val editPreferences = preferences?.edit()
editPreferences?.putBoolean("boss_art_collapsed", true)
editPreferences?.apply()
} }
} }

View file

@ -98,8 +98,8 @@ class GroupSerialization : JsonDeserializer<Group>, JsonSerializer<Group> {
group.quest?.participants = newMembers group.quest?.participants = newMembers
} }
if (questObject.has("extra") && questObject.getAsJsonObject("extra").has("worldDmg")) { if (questObject.has("extra")) {
val worldDamageObject = questObject.getAsJsonObject("extra").getAsJsonObject("worldDmg") val worldDamageObject = questObject.getAsJsonObject("extra")
worldDamageObject.entrySet().forEach { (key, value) -> worldDamageObject.entrySet().forEach { (key, value) ->
val rageStrike = QuestRageStrike(key, value.asBoolean) val rageStrike = QuestRageStrike(key, value.asBoolean)
group.quest?.addRageStrike(rageStrike) group.quest?.addRageStrike(rageStrike)