diff --git a/.gitignore b/.gitignore index 6534cc36a..83f17d194 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ habitica.properties habitica.resources Habitica/google-services.json reports/ +/prod diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt index 27952ad70..97cbd8c25 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt @@ -31,7 +31,7 @@ open class ShopItem : RealmObject() { var value: Int = 0 var locked: Boolean = false var isLimited: Boolean = false - var currency: String = "" + var currency: String? = null var purchaseType: String = "" var categoryIdentifier: String = "" var limitedNumberLeft: Int? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java index e31164428..c7b611c67 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/ItemDetailDialog.java @@ -115,7 +115,7 @@ public class ItemDetailDialog extends AlertDialog { public void setImage(String imageName) { itemImageView.setVisibility(View.VISIBLE); - DataBindingUtils.loadImage(itemImageView, imageName); + DataBindingUtils.INSTANCE.loadImage(itemImageView, imageName); } public void setBuyListener(OnClickListener listener) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index e4abef405..30c925167 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -642,7 +642,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria FrameLayout petWrapper = (FrameLayout) View.inflate(this, R.layout.pet_imageview, null); SimpleDraweeView petImageView = (SimpleDraweeView) petWrapper.findViewById(R.id.pet_imageview); - DataBindingUtils.loadImage(petImageView, "Pet-" + event.usingEgg.getKey() + "-" + event.usingHatchingPotion.getKey()); + DataBindingUtils.INSTANCE.loadImage(petImageView, "Pet-" + event.usingEgg.getKey() + "-" + event.usingHatchingPotion.getKey()); String potionName = event.usingHatchingPotion.getText(); String eggName = event.usingEgg.getText(); AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) @@ -678,7 +678,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria FrameLayout mountWrapper = (FrameLayout) View.inflate(this, R.layout.pet_imageview, null); SimpleDraweeView mountImageView = (SimpleDraweeView) mountWrapper.findViewById(R.id.pet_imageview); - DataBindingUtils.loadImage(mountImageView, "Mount_Icon_" + event.usingPet.getKey()); + DataBindingUtils.INSTANCE.loadImage(mountImageView, "Mount_Icon_" + event.usingPet.getKey()); String colorName = event.usingPet.getColorText(); String animalName = event.usingPet.getAnimalText(); AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) @@ -950,7 +950,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria SimpleDraweeView imageView = (SimpleDraweeView) view.findViewById(R.id.imageView); String imageKey = event.notification.data.rewardKey.get(0); - DataBindingUtils.loadImage(imageView, imageKey); + DataBindingUtils.INSTANCE.loadImage(imageView, imageKey); String youEarnedMessage = this.getString(R.string.checkInRewardEarned, event.notification.data.rewardText); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java index 8f7c1c806..5b602bf22 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.java @@ -185,7 +185,7 @@ public class CustomizationRecyclerViewAdapter extends RecyclerView.Adapter mana) { priceButton.setEnabled(false); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java index 20996ae30..7ad993589 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.java @@ -139,7 +139,7 @@ public class ItemRecyclerAdapter extends RealmRecyclerViewAdapter() { val item = obj as ShopItem (holder as ShopItemViewHolder).bind(item, item.canBuy(user)) if (ownedItems.containsKey(item.key)) { - holder.setItemCount(ownedItems[item.key]?.owned ?: 0) + holder.itemCount = ownedItems[item.key]?.owned ?: 0 } - holder.setIsPinned(pinnedItemKeys.contains(item.key)) + holder.isPinned = pinnedItemKeys.contains(item.key) } String::class.java -> (holder as EmptyStateViewHolder).text = obj as String } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java index ebeb9010d..b4a656002 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.java @@ -107,13 +107,13 @@ public class StableRecyclerAdapter extends RecyclerView.Adapter 0) { this.ownedTextView.setText(String.valueOf(animal.getNumberOwned())); if (itemType.equals("pets")) { - DataBindingUtils.loadImage(this.imageView, "Pet-" + item.getKey()); + DataBindingUtils.INSTANCE.loadImage(this.imageView, "Pet-" + item.getKey()); } else { - DataBindingUtils.loadImage(this.imageView, "Mount_Icon_" + item.getKey()); + DataBindingUtils.INSTANCE.loadImage(this.imageView, "Mount_Icon_" + item.getKey()); } } else { ownedTextView.setVisibility(View.GONE); - DataBindingUtils.loadImage(this.imageView, "PixelPaw"); + DataBindingUtils.INSTANCE.loadImage(this.imageView, "PixelPaw"); this.imageView.setAlpha(0.4f); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java index b74df1cfe..81ce5c4aa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java @@ -150,9 +150,9 @@ public class ChatRecyclerViewAdapter extends RealmRecyclerViewAdapter userLabelClickEvents.onNext(msg.uuid)); } - DataBindingUtils.setForegroundTintColor(userLabel, msg.getContributorForegroundColor()); + DataBindingUtils.INSTANCE.setForegroundTintColor(userLabel, msg.getContributorForegroundColor()); if (messageText != null) { messageText.setText(chatMessage.parsedText); @@ -214,7 +214,7 @@ public class ChatRecyclerViewAdapter extends RealmRecyclerViewAdapter participants) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java index 6b2a13c6c..8d06d26bd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java @@ -195,8 +195,8 @@ public class PartyDetailFragment extends BaseFragment { return; } questTitleView.setText(questContent.getText()); - DataBindingUtils.loadImage(questScrollImageView, "inventory_quest_scroll_"+questContent.getKey()); - DataBindingUtils.loadImage(questImageView, "quest_"+questContent.getKey()); + DataBindingUtils.INSTANCE.loadImage(questScrollImageView, "inventory_quest_scroll_"+questContent.getKey()); + DataBindingUtils.INSTANCE.loadImage(questImageView, "quest_"+questContent.getKey()); if (isQuestActive()) { questProgressView.setVisibility(View.VISIBLE); questProgressView.setData(questContent, quest.getProgress()); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java deleted file mode 100644 index 8ef0b27bd..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.habitrpg.android.habitica.ui.helpers; - -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; -import android.support.v4.content.ContextCompat; -import android.support.v4.content.res.ResourcesCompat; -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.Transformation; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.facebook.drawee.view.SimpleDraweeView; -import com.habitrpg.android.habitica.R; - -import net.pherth.android.emoji_library.EmojiTextView; - -public class DataBindingUtils { - - public static void loadImage(SimpleDraweeView view, String imageName) { - if (view != null && view.getVisibility() == View.VISIBLE) { - view.setImageURI(Uri.parse("https://habitica-assets.s3.amazonaws.com/mobileApp/images/" + imageName + ".png")); - } - } - - public static void setForegroundTintColor(TextView view, int color) { - if (color > 0) { - color = ContextCompat.getColor(view.getContext(), color); - } - view.setTextColor(color); - } - - public static void setRoundedBackground(View view, int color) { - Drawable drawable = ResourcesCompat.getDrawable(view.getResources(), R.drawable.layout_rounded_bg, null); - if (drawable != null) { - drawable.setColorFilter(color, PorterDuff.Mode.MULTIPLY); - } - if (Build.VERSION.SDK_INT < 16) { - view.setBackgroundDrawable(drawable); - } else { - view.setBackground(drawable); - } - } - - public static void setRoundedBackgroundInt(View view, int color) { - if (color != 0) { - setRoundedBackground(view, ContextCompat.getColor(view.getContext(), color)); - } - } - - public static void bindEmojiconTextView(EmojiTextView textView, CharSequence value) { - if (value != null) { - textView.setText(MarkdownParser.parseMarkdown(value.toString())); - } - } - - public static class LayoutWeightAnimation extends Animation { - float targetWeight; - float initializeWeight; - View view; - - LinearLayout.LayoutParams layoutParams; - - public LayoutWeightAnimation(View view, float targetWeight) { - this.view = view; - this.targetWeight = targetWeight; - - layoutParams = (LinearLayout.LayoutParams) view.getLayoutParams(); - initializeWeight = layoutParams.weight; - } - - @Override - protected void applyTransformation(float interpolatedTime, Transformation t) { - layoutParams.weight = initializeWeight + (targetWeight - initializeWeight) * interpolatedTime; - - view.requestLayout(); - } - - @Override - public boolean willChangeBounds() { - return true; - } - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt new file mode 100644 index 000000000..bc482f8fd --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt @@ -0,0 +1,67 @@ +package com.habitrpg.android.habitica.ui.helpers + +import android.graphics.PorterDuff +import android.graphics.drawable.Drawable +import android.net.Uri +import android.os.Build +import android.support.v4.content.ContextCompat +import android.support.v4.content.res.ResourcesCompat +import android.view.View +import android.view.animation.Animation +import android.view.animation.Transformation +import android.widget.LinearLayout +import android.widget.TextView + +import com.facebook.drawee.view.SimpleDraweeView +import com.habitrpg.android.habitica.R + +object DataBindingUtils { + + fun loadImage(view: SimpleDraweeView?, imageName: String?) { + if (view != null && imageName != null && view.visibility == View.VISIBLE) { + view.setImageURI("https://habitica-assets.s3.amazonaws.com/mobileApp/images/$imageName.png") + } + } + + fun setForegroundTintColor(view: TextView, color: Int) { + var color = color + if (color > 0) { + color = ContextCompat.getColor(view.context, color) + } + view.setTextColor(color) + } + + fun setRoundedBackground(view: View, color: Int) { + val drawable = ResourcesCompat.getDrawable(view.resources, R.drawable.layout_rounded_bg, null) + drawable?.setColorFilter(color, PorterDuff.Mode.MULTIPLY) + if (Build.VERSION.SDK_INT < 16) { + view.setBackgroundDrawable(drawable) + } else { + view.background = drawable + } + } + + fun setRoundedBackgroundInt(view: View, color: Int) { + if (color != 0) { + setRoundedBackground(view, ContextCompat.getColor(view.context, color)) + } + } + + class LayoutWeightAnimation(internal var view: View, internal var targetWeight: Float) : Animation() { + private var initializeWeight: Float = 0.toFloat() + + private var layoutParams: LinearLayout.LayoutParams = view.layoutParams as LinearLayout.LayoutParams + + init { + initializeWeight = layoutParams.weight + } + + override fun applyTransformation(interpolatedTime: Float, t: Transformation) { + layoutParams.weight = initializeWeight + (targetWeight - initializeWeight) * interpolatedTime + + view.requestLayout() + } + + override fun willChangeBounds(): Boolean = true + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.java deleted file mode 100644 index 07f73c335..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.habitrpg.android.habitica.ui.viewHolders; - -import android.content.Context; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.facebook.drawee.view.SimpleDraweeView; -import com.habitrpg.android.habitica.HabiticaBaseApplication; -import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.models.shops.ShopItem; -import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; -import com.habitrpg.android.habitica.ui.views.CurrencyView; -import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper; -import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class ShopItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - @BindView(R.id.imageView) - SimpleDraweeView imageView; - @BindView(R.id.buyButton) - View buyButton; - @BindView(R.id.priceLabel) - CurrencyView priceLabel; - - @BindView(R.id.item_detail_indicator) - TextView itemDetailIndicator; - - @BindView(R.id.pin_indicator) - public - ImageView pinIndicator; - - public String shopIdentifier; - private ShopItem item; - private boolean isPinned; - - private Context context; - - Drawable lockedDrawable; - Drawable limitedDrawable; - Drawable countDrawable; - - public ShopItemViewHolder(View itemView) { - super(itemView); - - context = itemView.getContext(); - - ButterKnife.bind(this, itemView); - - itemView.setOnClickListener(this); - itemView.setClickable(true); - - lockedDrawable = new BitmapDrawable(context.getResources(), HabiticaIconsHelper.imageOfItemIndicatorLocked()); - limitedDrawable = new BitmapDrawable(context.getResources(), HabiticaIconsHelper.imageOfItemIndicatorLimited()); - countDrawable = new BitmapDrawable(context.getResources(), HabiticaIconsHelper.imageOfItemIndicatorNumber()); - pinIndicator.setImageBitmap(HabiticaIconsHelper.imageOfPinnedItem()); - } - - public void bind(ShopItem item, boolean canBuy) { - this.item = item; - buyButton.setVisibility(View.VISIBLE); - - DataBindingUtils.loadImage(this.imageView, item.getImageName()); - - if (item.getUnlockCondition() == null || !item.getLocked()) { - priceLabel.setText(String.valueOf(item.getValue())); - priceLabel.setCurrency(item.getCurrency()); - if (item.getCurrency() == null) { - buyButton.setVisibility(View.GONE); - } - } else { - priceLabel.setText(item.getUnlockCondition().readableUnlockConditionId()); - } - - itemDetailIndicator.setText(null); - itemDetailIndicator.setVisibility(View.GONE); - if (item.isLimited()) { - itemDetailIndicator.setBackground(limitedDrawable); - itemDetailIndicator.setVisibility(View.VISIBLE); - } - - priceLabel.setLocked(item.getLocked() || !canBuy); - if (item.getLocked()) { - itemDetailIndicator.setBackground(lockedDrawable); - itemDetailIndicator.setVisibility(View.VISIBLE); - } - } - - public void setItemCount(int count) { - if (count > 0) { - itemDetailIndicator.setText(String.valueOf(count)); - itemDetailIndicator.setBackground(countDrawable); - itemDetailIndicator.setVisibility(View.VISIBLE); - } - } - - public void setIsPinned(boolean isPinned) { - this.isPinned = isPinned; - pinIndicator.setVisibility(isPinned ? View.VISIBLE : View.GONE); - } - - @Override - public void onClick(View view) { - PurchaseDialog dialog = new PurchaseDialog(context, HabiticaBaseApplication.getComponent(), item); - dialog.shopIdentifier = shopIdentifier; - dialog.setIsPinned(isPinned); - dialog.show(); - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt new file mode 100644 index 000000000..c3c04754b --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt @@ -0,0 +1,98 @@ +package com.habitrpg.android.habitica.ui.viewHolders + +import android.content.Context +import android.graphics.drawable.BitmapDrawable +import android.support.v7.widget.RecyclerView +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import com.facebook.drawee.view.SimpleDraweeView +import com.habitrpg.android.habitica.HabiticaBaseApplication +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 +import com.habitrpg.android.habitica.ui.views.CurrencyView +import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog + +class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { + + private val imageView: SimpleDraweeView by bindView(itemView, R.id.imageView) + private val buyButton: View by bindView(itemView, R.id.buyButton) + private val priceLabel: CurrencyView by bindView(itemView, R.id.priceLabel) + private val itemDetailIndicator: TextView by bindView(itemView, R.id.item_detail_indicator) + private val pinIndicator: ImageView by bindView(itemView, R.id.pin_indicator) + + var shopIdentifier: String? = null + private var item: ShopItem? = null + + private var context: Context = itemView.context + + private var lockedDrawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfItemIndicatorLocked()) + private var limitedDrawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfItemIndicatorLimited()) + private var countDrawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfItemIndicatorNumber()) + + var itemCount = 0 + set(value) { + field = value + if (value > 0) { + itemDetailIndicator.text = value.toString() + itemDetailIndicator.background = countDrawable + itemDetailIndicator.visibility = View.VISIBLE + } + } + + var isPinned = false + set(value) { + field =value + pinIndicator.visibility = if (isPinned) View.VISIBLE else View.GONE + } + + init { + itemView.setOnClickListener(this) + itemView.isClickable = true + pinIndicator.setImageBitmap(HabiticaIconsHelper.imageOfPinnedItem()) + } + + fun bind(item: ShopItem, canBuy: Boolean) { + this.item = item + buyButton.visibility = View.VISIBLE + + DataBindingUtils.loadImage(this.imageView, item.imageName) + + if (item.unlockCondition == null || !item.locked) { + priceLabel.text = item.value.toString() + priceLabel.currency = item.currency + if (item.currency == null) { + buyButton.visibility = View.GONE + } + } else { + priceLabel.setText(item.unlockCondition!!.readableUnlockConditionId()) + } + + itemDetailIndicator.text = null + itemDetailIndicator.visibility = View.GONE + if (item.isLimited) { + itemDetailIndicator.background = limitedDrawable + itemDetailIndicator.visibility = View.VISIBLE + } + + priceLabel.isLocked = item.locked || !canBuy + if (item.locked) { + itemDetailIndicator.background = lockedDrawable + itemDetailIndicator.visibility = View.VISIBLE + } + } + + override fun onClick(view: View) { + val dialog = PurchaseDialog(context, HabiticaBaseApplication.getComponent(), item) + dialog.shopIdentifier = shopIdentifier + dialog.setIsPinned(isPinned) + dialog.show() + } + + fun hidePinIndicator() { + pinIndicator.visibility = View.GONE + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt index 126d43358..027c8f619 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt @@ -12,50 +12,92 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.helpers.NumberAbbreviator class CurrencyView : android.support.v7.widget.AppCompatTextView { - - private var lightbackground = false + var lightBackground: Boolean = false + set(value) { + field = value + configureCurrency() + } var currency: String? = null set(currency) { field = currency - if ("gold" == currency) { - setIcon(HabiticaIconsHelper.imageOfGold()) - if (lightbackground) { - setTextColor(ContextCompat.getColor(context, R.color.yellow_5)) - } else { - setTextColor(ContextCompat.getColor(context, R.color.yellow_100)) - } - } else if ("gems" == currency) { - setIcon(HabiticaIconsHelper.imageOfGem()) - if (lightbackground) { - setTextColor(ContextCompat.getColor(context, R.color.green_100)) - } else { - setTextColor(ContextCompat.getColor(context, R.color.green_50)) - } - } else if ("hourglasses" == currency) { - setIcon(HabiticaIconsHelper.imageOfHourglass()) - if (lightbackground) { - setTextColor(ContextCompat.getColor(context, R.color.brand_300)) - } else { - setTextColor(ContextCompat.getColor(context, R.color.brand_500)) - } - } + configureCurrency() updateVisibility() } - private var drawable: BitmapDrawable? = null constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {} constructor(context: Context, currency: String, lightbackground: Boolean) : super(context) { - this.lightbackground = lightbackground + this.lightBackground = lightbackground this.currency = currency } - private fun setIcon(iconBitmap: Bitmap) { - drawable = BitmapDrawable(resources, iconBitmap) + private fun configureCurrency() { + if ("gold" == currency) { + icon = HabiticaIconsHelper.imageOfGold() + if (lightBackground) { + setTextColor(ContextCompat.getColor(context, R.color.yellow_5)) + } else { + setTextColor(ContextCompat.getColor(context, R.color.yellow_100)) + } + } else if ("gems" == currency) { + icon = HabiticaIconsHelper.imageOfGem() + if (lightBackground) { + setTextColor(ContextCompat.getColor(context, R.color.green_100)) + } else { + setTextColor(ContextCompat.getColor(context, R.color.green_50)) + } + } else if ("hourglasses" == currency) { + icon = HabiticaIconsHelper.imageOfHourglass() + if (lightBackground) { + setTextColor(ContextCompat.getColor(context, R.color.brand_300)) + } else { + setTextColor(ContextCompat.getColor(context, R.color.brand_500)) + } + } + } + + private var drawable: BitmapDrawable? = null + + var icon: Bitmap? = null + set(value) { + field = value + if (value != null) { + drawable = BitmapDrawable(resources, value) + this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null) + val padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 6f, context.resources.displayMetrics).toInt() + compoundDrawablePadding = padding + this.gravity = Gravity.CENTER_VERTICAL + } + } + + var value = 0.0 + set(value) { + field = value + text = NumberAbbreviator.abbreviate(context, value) + updateVisibility() + } + + var isLocked = false + set(value) { + field = value + if (isLocked) { + this.setTextColor(ContextCompat.getColor(context, R.color.gray_300)) + drawable?.alpha = 127 + } else { + drawable?.alpha = 255 + } + this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null) + } + + var cantAfford = false + set(value) { + if (cantAfford) { + this.setTextColor(ContextCompat.getColor(context, R.color.red_50)) + drawable?.alpha = 127 + } else { + drawable?.alpha = 255 + } this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null) - val padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 6f, context.resources.displayMetrics).toInt() - compoundDrawablePadding = padding - this.gravity = Gravity.CENTER_VERTICAL } private fun updateVisibility() { @@ -63,37 +105,4 @@ class CurrencyView : android.support.v7.widget.AppCompatTextView { visibility = if ("0" == text) View.GONE else View.VISIBLE } } - - fun setValue(value: Double?) { - text = NumberAbbreviator.abbreviate(context, value!!) - updateVisibility() - } - - fun setLocked(isLocked: Boolean) { - if (drawable == null) { - return - } - if (isLocked) { - this.setTextColor(ContextCompat.getColor(context, R.color.gray_300)) - drawable!!.alpha = 127 - } else { - drawable!!.alpha = 255 - } - - this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null) - } - - fun setCantAfford(cantAfford: Boolean) { - if (drawable == null) { - return - } - if (cantAfford) { - this.setTextColor(ContextCompat.getColor(context, R.color.red_50)) - drawable!!.alpha = 127 - } else { - drawable!!.alpha = 255 - } - - this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null) - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.java deleted file mode 100644 index 558577504..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.habitrpg.android.habitica.ui.views; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.support.annotation.Nullable; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.widget.LinearLayout; - -import com.habitrpg.android.habitica.R; - -/** - * Created by phillip on 08.09.17. - */ - -public class CurrencyViews extends LinearLayout { - private CurrencyView hourglassTextView; - private CurrencyView goldTextView; - private CurrencyView gemTextView; - public boolean lightbackground; - - public CurrencyViews(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - - TypedArray attributes = context.getTheme().obtainStyledAttributes( - attrs, - R.styleable.CurrencyViews, - 0, 0); - - lightbackground = attributes.getBoolean(R.styleable.CurrencyViews_hasLightBackground, true); - - setupViews(); - } - - public CurrencyViews(Context context) { - super(context); - setupViews(); - } - - private void setupViews() { - Resources r = getContext().getResources(); - int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, r.getDisplayMetrics()); - - hourglassTextView = new CurrencyView(getContext(), "hourglasses", lightbackground); - this.addView(hourglassTextView); - LinearLayout.LayoutParams hourglassParams = (LayoutParams) hourglassTextView.getLayoutParams(); - hourglassParams.setMargins(margin, 0, 0, 0); - hourglassTextView.setLayoutParams(hourglassParams); - goldTextView = new CurrencyView(getContext(), "gold", lightbackground); - this.addView(goldTextView); - LinearLayout.LayoutParams goldParams = (LayoutParams) goldTextView.getLayoutParams(); - goldParams.setMargins(margin, 0, 0, 0); - goldTextView.setLayoutParams(goldParams); - gemTextView = new CurrencyView(getContext(), "gems", lightbackground); - this.addView(gemTextView); - LinearLayout.LayoutParams gemParams = (LayoutParams) gemTextView.getLayoutParams(); - gemParams.setMargins(margin, 0, 0, 0); - gemTextView.setLayoutParams(gemParams); - } - - public void setGold(Double gold) { - goldTextView.setValue(gold); - } - - public void setGems(Integer gemCount) { - gemTextView.setValue(Double.valueOf(gemCount)); - } - - public void setHourglasses(Integer hourglassCount) { - hourglassTextView.setText(String.valueOf(hourglassCount)); - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt new file mode 100644 index 000000000..00d3de7b2 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt @@ -0,0 +1,59 @@ +package com.habitrpg.android.habitica.ui.views + +import android.content.Context +import android.util.AttributeSet +import android.util.TypedValue +import android.widget.LinearLayout +import com.habitrpg.android.habitica.R + +class CurrencyViews : LinearLayout { + var lightBackground: Boolean = false + set(value) { + field = value + hourglassTextView.lightBackground = value + gemTextView.lightBackground = value + goldTextView.lightBackground = value + } + private val hourglassTextView: CurrencyView = CurrencyView(context, "hourglasses", lightBackground) + private val goldTextView: CurrencyView = CurrencyView(context, "gold", lightBackground) + private val gemTextView: CurrencyView = CurrencyView(context, "gems", lightBackground) + + var gold: Double + get() = goldTextView.value + set(value) { goldTextView.value = value } + var gems: Double + get() = goldTextView.value + set(value) { gemTextView.value = value } + var hourglasses: Double + get() = hourglassTextView.value + set(value) { hourglassTextView.value = value } + + + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { + + val attributes = context?.theme?.obtainStyledAttributes( + attrs, + R.styleable.CurrencyViews, + 0, 0) + setupViews() + lightBackground = attributes?.getBoolean(R.styleable.CurrencyViews_hasLightBackground, true) ?: true + } + + constructor(context: Context?) : super(context) { + setupViews() + } + + private fun setupViews() { + val margin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, context.resources.displayMetrics).toInt() + setupView(hourglassTextView, margin) + setupView(goldTextView, margin) + setupView(gemTextView, margin) + } + + private fun setupView(view: CurrencyView, margin: Int) { + this.addView(view) + val params = view.layoutParams as LayoutParams + params.setMargins(margin, 0, 0, 0) + view.layoutParams = params + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.java index 201fc13d9..4d150bbf9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.java @@ -50,7 +50,7 @@ public class ValueBar extends FrameLayout { setLightBackground(attributes.getBoolean(R.styleable.ValueBar_lightBackground, false)); int color = attributes.getColor(R.styleable.ValueBar_barForegroundColor, 0); - DataBindingUtils.setRoundedBackground(barView, color); + DataBindingUtils.INSTANCE.setRoundedBackground(barView, color); Drawable iconRes = attributes.getDrawable(R.styleable.ValueBar_barIconDrawable); if (iconRes != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.java index ca62add7d..a6a97cc31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.java @@ -46,7 +46,7 @@ public abstract class PurchaseDialogContent extends LinearLayout { public void setItem(ShopItem item) { - DataBindingUtils.loadImage(imageView, item.getImageName()); + DataBindingUtils.INSTANCE.loadImage(imageView, item.getImageName()); titleTextView.setText(item.getText()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.java index 6c6f4c37a..cd6b7e66b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.java @@ -146,7 +146,7 @@ public class PurchaseDialogQuestContent extends PurchaseDialogContent { 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.loadImage(imageView, item.getImageName()); + DataBindingUtils.INSTANCE.loadImage(imageView, item.getImageName()); if (item.getCount() > 1) { titleTextView.setText(getContext().getString(R.string.quest_reward_count, item.getText(), item.getCount())); } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.java index cea32ee8d..5a8dba872 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.java @@ -72,7 +72,7 @@ public class QuestProgressView extends LinearLayout { SimpleDraweeView iconView = (SimpleDraweeView) view.findViewById(R.id.icon_view); TextView nameView = (TextView) view.findViewById(R.id.name_view); ValueBar valueView = (ValueBar) view.findViewById(R.id.value_view); - DataBindingUtils.loadImage(iconView, "quest_" + quest.getKey() + "_" + collect.key); + DataBindingUtils.INSTANCE.loadImage(iconView, "quest_" + quest.getKey() + "_" + collect.key); nameView.setText(contentCollect.text); valueView.set(collect.count, contentCollect.count);