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_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"/>
<TextView
@ -50,6 +50,7 @@
android:layout_marginBottom="@dimen/spacing_small"
android:paddingLeft="@dimen/spacing_large"
android:paddingRight="@dimen/spacing_large"
android:layout_marginTop="@dimen/spacing_large"
android:textColor="@color/white"/>
<com.habitrpg.android.habitica.ui.views.ValueBar
android:id="@+id/bossHealthView"

View file

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

View file

@ -747,4 +747,11 @@
<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="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>

View file

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

View file

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

View file

@ -98,8 +98,8 @@ class GroupSerialization : JsonDeserializer<Group>, JsonSerializer<Group> {
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)