From 27d290d963bbded81f781fa7756ebd2d50d0fce1 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 6 Feb 2018 17:57:23 +0100 Subject: [PATCH] show active rage strike alert --- Habitica/res/layout/quest_progress.xml | 3 +- Habitica/res/values/strings.constants.xml | 1 + Habitica/res/values/strings.xml | 7 ++ .../ui/views/CollapsibleSectionView.kt | 6 +- .../ui/views/social/QuestProgressView.kt | 77 ++++++++++++++++--- .../habitica/utils/GroupSerialization.kt | 4 +- 6 files changed, 83 insertions(+), 15 deletions(-) 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)