show number of remaining subscriber gems. Fixes #880

This commit is contained in:
Phillip Thelen 2017-11-14 17:34:05 +01:00
parent 264b64e2dd
commit 6272ab5d89
13 changed files with 274 additions and 373 deletions

View file

@ -60,7 +60,7 @@ class PurchaseDialog(context: Context, component: AppComponent, val item: ShopIt
private val contentContainer: ViewGroup by bindView(customView, R.id.content_container)
private val scrollView: ScrollView by bindView(customView, R.id.scrollView)
var shopItem: ShopItem = item
private var shopItem: ShopItem = item
set(value) {
field = value
@ -106,7 +106,11 @@ class PurchaseDialog(context: Context, component: AppComponent, val item: ShopIt
private fun checkGearClass() {
val user = user ?: return
if (shopItem.habitClass != null && user.stats.habitClass != shopItem.habitClass) {
if (shopItem.purchaseType == "gems") {
return
}
if (shopItem.habitClass != null && shopItem.habitClass != "special" && user.stats.habitClass != shopItem.habitClass) {
limitedTextView.text = context.getString(R.string.class_equipment_shop_dialog)
limitedTextView.visibility = View.VISIBLE
limitedTextView.setBackgroundColor(ContextCompat.getColor(context, R.color.gray_100))

View file

@ -1,24 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import com.habitrpg.android.habitica.R;
public class PurchaseDialogBaseContent extends PurchaseDialogContent {
public PurchaseDialogBaseContent(Context context) {
super(context);
}
public PurchaseDialogBaseContent(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int getViewId() {
return R.layout.dialog_purchase_content_item;
}
}

View file

@ -0,0 +1,14 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.util.AttributeSet
import com.habitrpg.android.habitica.R
class PurchaseDialogBaseContent : PurchaseDialogContent {
override val viewId: Int
get() = R.layout.dialog_purchase_content_item
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
}

View file

@ -1,50 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.Gravity;
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.models.shops.ShopItem;
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class PurchaseDialogContent extends LinearLayout {
@BindView(R.id.imageView)
SimpleDraweeView imageView;
@BindView(R.id.titleTextView)
TextView titleTextView;
public PurchaseDialogContent(Context context) {
super(context);
setupView();
}
public PurchaseDialogContent(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setupView();
}
private void setupView() {
setOrientation(LinearLayout.VERTICAL);
setGravity(Gravity.CENTER_HORIZONTAL);
inflate(getContext(), getViewId(), this);
ButterKnife.bind(this, this);
}
protected abstract int getViewId();
public void setItem(ShopItem item) {
DataBindingUtils.INSTANCE.loadImage(imageView, item.getImageName());
titleTextView.setText(item.getText());
}
}

View file

@ -0,0 +1,41 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
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.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
abstract class PurchaseDialogContent : LinearLayout {
private val imageView: SimpleDraweeView by bindView(R.id.imageView)
private val titleTextView: TextView by bindView(R.id.titleTextView)
protected abstract val viewId: Int
constructor(context: Context) : super(context) {
setupView()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
setupView()
}
private fun setupView() {
orientation = LinearLayout.VERTICAL
gravity = Gravity.CENTER_HORIZONTAL
inflate(context, viewId, this)
}
open fun setItem(item: ShopItem) {
DataBindingUtils.loadImage(imageView, item.imageName)
titleTextView.text = item.text
}
}

View file

@ -1,72 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.models.inventory.Equipment;
import com.habitrpg.android.habitica.models.shops.ShopItem;
import butterknife.BindView;
class PurchaseDialogGearContent extends PurchaseDialogContent {
@BindView(R.id.notesTextView)
TextView notesTextView;
@BindView(R.id.str_label)
TextView strLabel;
@BindView(R.id.str_value)
TextView strValueTextView;
@BindView(R.id.per_label)
TextView perLabel;
@BindView(R.id.per_value)
TextView perValueTextView;
@BindView(R.id.con_label)
TextView conLabel;
@BindView(R.id.con_value)
TextView conValueTextView;
@BindView(R.id.int_label)
TextView intLabel;
@BindView(R.id.int_value)
TextView intValueTextView;
public PurchaseDialogGearContent(Context context) {
super(context);
}
public PurchaseDialogGearContent(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int getViewId() {
return R.layout.dialog_purchase_content_gear;
}
@Override
public void setItem(ShopItem item) {
super.setItem(item);
notesTextView.setText(item.getNotes());
}
public void setEquipment(Equipment equipment) {
if (equipment.isManaged()) {
configureFieldsForValue(strLabel, strValueTextView, equipment.getStr());
configureFieldsForValue(perLabel, perValueTextView, equipment.getPer());
configureFieldsForValue(conLabel, conValueTextView, equipment.getCon());
configureFieldsForValue(intLabel, intValueTextView, equipment.get_int());
}
}
private void configureFieldsForValue(TextView labelView, TextView valueTextView, int value) {
valueTextView.setText("+"+value);
if (value == 0) {
labelView.setTextColor(ContextCompat.getColor(getContext(), R.color.gray_400));
valueTextView.setTextColor(ContextCompat.getColor(getContext(), R.color.gray_400));
}
}
}

View file

@ -0,0 +1,52 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.support.v4.content.ContextCompat
import android.util.AttributeSet
import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.models.shops.ShopItem
internal class PurchaseDialogGearContent : PurchaseDialogContent {
private val notesTextView: TextView by bindView(R.id.notesTextView)
private val strLabel: TextView by bindView(R.id.str_label)
private val strValueTextView: TextView by bindView(R.id.str_value)
private val perLabel: TextView by bindView(R.id.per_label)
private val perValueTextView: TextView by bindView(R.id.per_value)
private val conLabel: TextView by bindView(R.id.con_label)
private val conValueTextView: TextView by bindView(R.id.con_value)
private val intLabel: TextView by bindView(R.id.int_label)
private val intValueTextView: TextView by bindView(R.id.int_value)
override val viewId: Int
get() = R.layout.dialog_purchase_content_gear
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}
override fun setItem(item: ShopItem) {
super.setItem(item)
notesTextView.text = item.notes
}
fun setEquipment(equipment: Equipment) {
if (equipment.isManaged) {
configureFieldsForValue(strLabel, strValueTextView, equipment.str)
configureFieldsForValue(perLabel, perValueTextView, equipment.per)
configureFieldsForValue(conLabel, conValueTextView, equipment.con)
configureFieldsForValue(intLabel, intValueTextView, equipment._int)
}
}
private fun configureFieldsForValue(labelView: TextView?, valueTextView: TextView?, value: Int) {
valueTextView!!.text = "+" + value
if (value == 0) {
labelView!!.setTextColor(ContextCompat.getColor(context, R.color.gray_400))
valueTextView.setTextColor(ContextCompat.getColor(context, R.color.gray_400))
}
}
}

View file

@ -1,36 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.models.shops.ShopItem;
import butterknife.BindView;
/**
* Created by phillip on 25.07.17.
*/
class PurchaseDialogGemsContent extends PurchaseDialogContent {
@BindView(R.id.notesTextView)
TextView notesTextView;
public PurchaseDialogGemsContent(Context context) {
super(context);
}
@Override
protected int getViewId() {
return R.layout.dialog_purchase_content_item;
}
@Override
public void setItem(ShopItem item) {
super.setItem(item);
notesTextView.setText(item.getNotes());
}
}

View file

@ -0,0 +1,22 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
import com.habitrpg.android.habitica.models.shops.ShopItem
internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) {
val notesTextView: TextView by bindView(R.id.notesTextView)
override val viewId: Int
get() = R.layout.dialog_purchase_content_item
override fun setItem(item: ShopItem) {
super.setItem(item)
notesTextView.text = item.notes
}
}

View file

@ -1,37 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.models.shops.ShopItem;
import butterknife.BindView;
public class PurchaseDialogItemContent extends PurchaseDialogContent {
@BindView(R.id.notesTextView)
TextView notesTextView;
public PurchaseDialogItemContent(Context context) {
super(context);
}
public PurchaseDialogItemContent(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int getViewId() {
return R.layout.dialog_purchase_content_item;
}
@Override
public void setItem(ShopItem item) {
super.setItem(item);
notesTextView.setText(item.getNotes());
}
}

View file

@ -0,0 +1,25 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.util.AttributeSet
import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.bindView
import com.habitrpg.android.habitica.models.shops.ShopItem
class PurchaseDialogItemContent : PurchaseDialogContent {
internal val notesTextView: TextView by bindView(R.id.notesTextView)
override val viewId: Int
get() = R.layout.dialog_purchase_content_item
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
override fun setItem(item: ShopItem) {
super.setItem(item)
notesTextView.text = item.notes
}
}

View file

@ -1,152 +0,0 @@
package com.habitrpg.android.habitica.ui.views.shops;
import android.content.Context;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RatingBar;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.models.inventory.QuestCollect;
import com.habitrpg.android.habitica.models.inventory.QuestContent;
import com.habitrpg.android.habitica.models.inventory.QuestDropItem;
import com.habitrpg.android.habitica.models.shops.ShopItem;
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils;
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
/**
* Created by phillip on 24.07.17.
*/
public class PurchaseDialogQuestContent extends PurchaseDialogContent {
@BindView(R.id.questDetailView)
View questDetailView;
@BindView(R.id.questTypeTextView)
TextView questTypeTextView;
@BindView(R.id.boss_health_view)
View bossHealthView;
@BindView(R.id.boss_health_text)
TextView bossHealthTextView;
@BindView(R.id.quest_collect_view)
View questCollectView;
@BindView(R.id.quest_collect_text)
TextView questCollectTextView;
@BindView(R.id.quest_difficulty_view)
RatingBar questDifficultyView;
@BindView(R.id.rage_meter_view)
View rageMeterView;
@BindView(R.id.rewardsList)
ViewGroup rewardsList;
@BindView(R.id.ownerRewardsTitle)
View ownerRewardsTitle;
@BindView(R.id.ownerRewardsList)
ViewGroup ownerRewardsList;
public PurchaseDialogQuestContent(Context context) {
super(context);
}
public PurchaseDialogQuestContent(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int getViewId() {
return R.layout.dialog_purchase_content_quest;
}
@Override
public void setItem(ShopItem item) {
super.setItem(item);
}
public void setQuestContent(QuestContent questContent) {
if (questContent.isBossQuest()) {
questTypeTextView.setText(R.string.boss_quest);
questCollectView.setVisibility(View.GONE);
bossHealthTextView.setText(String.valueOf(questContent.getBoss().hp));
if (questContent.getBoss().hasRage()) {
rageMeterView.setVisibility(View.VISIBLE);
}
questDifficultyView.setRating(questContent.getBoss().str);
} else{
questTypeTextView.setText(R.string.collection_quest);
List<String> collectionList = new ArrayList<>();
for (QuestCollect collect : questContent.getCollect()) {
collectionList.add(collect.count + " " + collect.text);
}
questCollectTextView.setText(TextUtils.join(", ", collectionList));
bossHealthView.setVisibility(View.GONE);
questDifficultyView.setRating(1);
}
questDetailView.setVisibility(View.VISIBLE);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (questContent.getDrop() != null && questContent.getDrop().getItems() != null) {
for (QuestDropItem item : questContent.getDrop().getItems()) {
if (!item.isOnlyOwner()) {
addRewardsRow(inflater, item, rewardsList);
}
}
boolean hasOwnerRewards = false;
for (QuestDropItem item : questContent.getDrop().getItems()) {
if (item.isOnlyOwner()) {
addRewardsRow(inflater, item, ownerRewardsList);
hasOwnerRewards = true;
}
}
if (!hasOwnerRewards) {
ownerRewardsTitle.setVisibility(View.GONE);
ownerRewardsList.setVisibility(View.GONE);
}
if (questContent.getDrop().exp > 0) {
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.row_quest_reward, rewardsList, false);
SimpleDraweeView imageView = view.findViewById(R.id.imageView);
imageView.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward());
TextView titleTextView = view.findViewById(R.id.titleTextView);
titleTextView.setText(getContext().getString(R.string.experience_reward, questContent.getDrop().exp));
rewardsList.addView(view);
}
if (questContent.getDrop().gp > 0) {
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.row_quest_reward, rewardsList, false);
SimpleDraweeView imageView = view.findViewById(R.id.imageView);
imageView.setImageBitmap(HabiticaIconsHelper.imageOfExperienceReward());
TextView titleTextView = view.findViewById(R.id.titleTextView);
titleTextView.setText(getContext().getString(R.string.gold_reward, questContent.getDrop().gp));
rewardsList.addView(view);
}
}
}
private void addRewardsRow(LayoutInflater inflater, QuestDropItem item, ViewGroup containerView) {
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.row_quest_reward, containerView, false);
SimpleDraweeView imageView = (SimpleDraweeView) view.findViewById(R.id.imageView);
TextView titleTextView = (TextView) view.findViewById(R.id.titleTextView);
DataBindingUtils.INSTANCE.loadImage(imageView, item.getImageName());
if (item.getCount() > 1) {
titleTextView.setText(getContext().getString(R.string.quest_reward_count, item.getText(), item.getCount()));
} else {
titleTextView.setText(item.getText());
}
containerView.addView(view);
}
}

View file

@ -0,0 +1,114 @@
package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.text.TextUtils
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.RatingBar
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.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestDropItem
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class PurchaseDialogQuestContent : PurchaseDialogContent {
private val questDetailView: View by bindView(R.id.questDetailView)
private val questTypeTextView: TextView by bindView(R.id.questTypeTextView)
private val bossHealthView: View by bindView(R.id.boss_health_view)
private val bossHealthTextView: TextView by bindView(R.id.boss_health_text)
private val questCollectView: View by bindView(R.id.quest_collect_view)
private val questCollectTextView: TextView by bindView(R.id.quest_collect_text)
private val questDifficultyView: RatingBar by bindView(R.id.quest_difficulty_view)
private val rageMeterView: View by bindView(R.id.rage_meter_view)
private val rewardsList: ViewGroup by bindView(R.id.rewardsList)
private val ownerRewardsTitle: View by bindView(R.id.ownerRewardsTitle)
private val ownerRewardsList: ViewGroup by bindView(R.id.ownerRewardsList)
override val viewId: Int
get() = R.layout.dialog_purchase_content_quest
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
fun setQuestContent(questContent: QuestContent) {
if (questContent.isBossQuest) {
questTypeTextView.setText(R.string.boss_quest)
questCollectView.visibility = View.GONE
bossHealthTextView.text = questContent.boss.hp.toString()
if (questContent.boss.hasRage()) {
rageMeterView.visibility = View.VISIBLE
}
questDifficultyView.rating = questContent.boss.str
} else {
questTypeTextView.setText(R.string.collection_quest)
val collectionList = questContent.collect.map { it.count.toString() + " " + it.text }
questCollectTextView.text = TextUtils.join(", ", collectionList)
bossHealthView.visibility = View.GONE
questDifficultyView.rating = 1f
}
questDetailView.visibility = View.VISIBLE
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
if (questContent.drop != null && questContent.drop.items != null) {
for (item in questContent.drop.items) {
if (!item.isOnlyOwner) {
addRewardsRow(inflater, item, rewardsList)
}
}
var hasOwnerRewards = false
for (item in questContent.drop.items) {
if (item.isOnlyOwner) {
addRewardsRow(inflater, item, ownerRewardsList)
hasOwnerRewards = true
}
}
if (!hasOwnerRewards) {
ownerRewardsTitle.visibility = View.GONE
ownerRewardsList.visibility = View.GONE
}
if (questContent.drop.exp > 0) {
val view = inflater.inflate(R.layout.row_quest_reward, rewardsList, false) as ViewGroup
val imageView = view.findViewById<SimpleDraweeView>(R.id.imageView)
imageView.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward())
val titleTextView = view.findViewById<TextView>(R.id.titleTextView)
titleTextView.text = context.getString(R.string.experience_reward, questContent.drop.exp)
rewardsList.addView(view)
}
if (questContent.drop.gp > 0) {
val view = inflater.inflate(R.layout.row_quest_reward, rewardsList, false) as ViewGroup
val imageView = view.findViewById<SimpleDraweeView>(R.id.imageView)
imageView.setImageBitmap(HabiticaIconsHelper.imageOfExperienceReward())
val titleTextView = view.findViewById<TextView>(R.id.titleTextView)
titleTextView.text = context.getString(R.string.gold_reward, questContent.drop.gp)
rewardsList.addView(view)
}
}
}
private fun addRewardsRow(inflater: LayoutInflater, item: QuestDropItem, containerView: ViewGroup?) {
val view = inflater.inflate(R.layout.row_quest_reward, containerView, false) as ViewGroup
val imageView = view.findViewById<View>(R.id.imageView) as SimpleDraweeView
val titleTextView = view.findViewById<View>(R.id.titleTextView) as TextView
DataBindingUtils.loadImage(imageView, item.imageName)
if (item.count > 1) {
titleTextView.text = context.getString(R.string.quest_reward_count, item.text, item.count)
} else {
titleTextView.text = item.text
}
containerView?.addView(view)
}
}