From da18a6b77d900db05c375e7f28945a5dca5ece02 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 9 Feb 2018 17:05:50 +0100 Subject: [PATCH] improve world boss display --- Habitica/AndroidManifest.xml | 4 +- Habitica/res/layout/quest_menu_view.xml | 102 +++++++++++------- Habitica/res/values/strings.xml | 1 + .../data/implementation/ApiClientImpl.java | 2 + .../ui/fragments/NavigationDrawerFragment.kt | 9 ++ .../habitica/ui/views/social/QuestMenuView.kt | 38 ++++--- .../ui/views/social/QuestProgressView.kt | 27 +++-- 7 files changed, 126 insertions(+), 57 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index cb4593dd8..2f9055a76 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,8 +2,8 @@ diff --git a/Habitica/res/layout/quest_menu_view.xml b/Habitica/res/layout/quest_menu_view.xml index f7308611f..d1ddf9555 100644 --- a/Habitica/res/layout/quest_menu_view.xml +++ b/Habitica/res/layout/quest_menu_view.xml @@ -1,44 +1,74 @@ - + android:layout_height="wrap_content" + android:clipChildren="true"> + - - - - - \ No newline at end of file + android:layout_alignParentLeft="true" + android:layout_alignParentRight="true" + android:layout_alignParentTop="true"> + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index a570fb684..49e3dcd5e 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -754,4 +754,5 @@ Alex the Merchant Daniel the inn keeper Matt the beast master + Hide Boss Art diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java index ab6db75d9..933fa394f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java @@ -97,6 +97,7 @@ import com.habitrpg.android.habitica.utils.TaskSerializer; import com.habitrpg.android.habitica.utils.TaskTagDeserializer; import com.habitrpg.android.habitica.utils.TutorialStepListDeserializer; import com.habitrpg.android.habitica.utils.UserDeserializer; +import com.habitrpg.android.habitica.utils.WorldStateSerialization; import org.greenrobot.eventbus.EventBus; @@ -275,6 +276,7 @@ public class ApiClientImpl implements Action1, ApiClient { .registerTypeAdapter(questDropItemListType, new QuestDropItemsListSerialization()) .registerTypeAdapter(Quest.class, new QuestDeserializer()) .registerTypeAdapter(Member.class, new MemberSerialization()) + .registerTypeAdapter(WorldState.class, new WorldStateSerialization()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); return GsonConverterFactory.create(gson); 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 8eaf3488c..8ecebc367 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 @@ -107,6 +107,15 @@ class NavigationDrawerFragment : DialogFragment() { adapter.tintColor = questContent.colors?.lightColor ?: 0 adapter.backgroundTintColor = questContent.colors?.darkColor ?: 0 + + /* Reenable this once the boss art can be displayed correctly. + + val preferences = context?.getSharedPreferences("collapsible_sections", 0) + if (preferences?.getBoolean("boss_art_collapsed", false) == true) { + questMenuView.hideBossArt() + } else { + questMenuView.showBossArt() + }*/ questMenuView.hideBossArt() } 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 81373e689..a61738928 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 @@ -1,40 +1,39 @@ package com.habitrpg.android.habitica.ui.views.social import android.content.Context +import android.graphics.drawable.BitmapDrawable import android.support.v4.content.ContextCompat +import android.support.v4.widget.ImageViewCompat +import android.support.v7.widget.AppCompatImageButton import android.util.AttributeSet import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +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.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.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.ValueBar class QuestMenuView : LinearLayout { + private val bossArtView: SimpleDraweeView by bindView(R.id.bossArtView) private val bossNameView: TextView by bindView(R.id.bossNameView) private val typeTextView: TextView by bindView(R.id.typeTextView) 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 var questContent: QuestContent? = null - var collapsed = false - set(value) { - field = value - if (field) { - showBossArt() - } else { - hideBossArt() - } - } - constructor(context: Context) : super(context) { setupView(context) } @@ -49,6 +48,14 @@ class QuestMenuView : LinearLayout { healthBarView.setIcon(HabiticaIconsHelper.imageOfHeartDarkBg()) healthBarView.setLabelVisibility(View.GONE) + + closeButton.setOnClickListener { + hideBossArt() + val preferences = context.getSharedPreferences("collapsible_sections", 0) + val editPreferences = preferences?.edit() + editPreferences?.putBoolean("boss_art_collapsed", true) + editPreferences?.apply() + } } fun configure(quest: Quest) { @@ -59,21 +66,28 @@ class QuestMenuView : LinearLayout { this.questContent = questContent healthBarView.maxValue = questContent.boss.hp.toDouble() healthBarView.setBackgroundColor(questContent.colors?.darkColor ?: 0) - topView.setBackgroundColor(questContent.colors?.mediumColor ?: 0) + bossArtView.setBackgroundColor(questContent.colors?.mediumColor ?: 0) + DataBindingUtils.loadImage(bossArtView, "quest_"+questContent?.key) bossNameView.text = questContent.boss.name } fun hideBossArt() { topView.orientation = LinearLayout.HORIZONTAL + topView.setBackgroundColor(questContent?.colors?.mediumColor ?: 0) bossNameView.gravity = Gravity.LEFT bossNameView.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1F) + bossArtView.visibility = View.GONE typeTextView.setTextColor(questContent?.colors?.extraLightColor ?: 0) + closeButton.visibility = View.GONE } fun showBossArt() { topView.orientation = LinearLayout.VERTICAL + topView.setBackgroundColor(ContextCompat.getColor(context, R.color.transparent)) bossNameView.gravity = Gravity.RIGHT - bossNameView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) + bossNameView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + bossArtView.visibility = View.VISIBLE typeTextView.setTextColor(ContextCompat.getColor(context, R.color.white)) + closeButton.visibility = View.VISIBLE } } \ No newline at end of file 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 0b104b280..f32e77de4 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 @@ -26,6 +26,10 @@ import com.habitrpg.android.habitica.ui.views.* import io.realm.RealmList import android.graphics.drawable.GradientDrawable import com.habitrpg.android.habitica.extensions.backgroundCompat +import com.habitrpg.android.habitica.helpers.RxErrorHandler +import rx.Observable +import rx.android.schedulers.AndroidSchedulers +import rx.functions.Action1 class QuestProgressView : LinearLayout { @@ -87,6 +91,8 @@ class QuestProgressView : LinearLayout { preferences = context.getSharedPreferences("collapsible_sections", 0) if (preferences?.getBoolean("boss_art_collapsed", false) == true) { hideQuestImage() + } else { + showQuestImage() } } @@ -174,12 +180,18 @@ class QuestProgressView : LinearLayout { val iconView = ImageView(context) if (strike.wasHit) { DataBindingUtils.loadImage("rage_strike_${strike.key}", { - val displayDensity = resources.displayMetrics.density - val width = it.width * displayDensity - val height = it.height * displayDensity - val scaledImage = Bitmap.createScaledBitmap(it, width.toInt(), height.toInt(), false) - iconView.setImageBitmap(HabiticaIconsHelper.imageOfRageStrikeActive(context, scaledImage)) - iconView.setOnClickListener { showActiveStrikeAlert(strike.key) } + Observable.just(it) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(Action1 { + val displayDensity = resources.displayMetrics.density + val width = it.width * displayDensity + val height = it.height * displayDensity + val scaledImage = Bitmap.createScaledBitmap(it, width.toInt(), height.toInt(), false) + iconView.setImageBitmap(HabiticaIconsHelper.imageOfRageStrikeActive(context, scaledImage)) + iconView.setOnClickListener { + showActiveStrikeAlert(strike.key) + } + }, RxErrorHandler.handleEmptyError()) }) } else { iconView.setImageBitmap(HabiticaIconsHelper.imageOfRageStrikeInactive()) @@ -281,8 +293,9 @@ class QuestProgressView : LinearLayout { private fun showQuestImage() { questImageCaretView.setImageBitmap(HabiticaIconsHelper.imageOfCaret(ContextCompat.getColor(context, R.color.white), true)) questImageView.visibility = View.VISIBLE + DataBindingUtils.loadImage(questImageView, "quest_"+quest?.key) val editPreferences = preferences?.edit() - editPreferences?.putBoolean("boss_art_collapsed", true) + editPreferences?.putBoolean("boss_art_collapsed", false) editPreferences?.apply() }