diff --git a/Habitica/res/drawable/layout_rounded_bg_animalitem_complete.xml b/Habitica/res/drawable/layout_rounded_bg_animalitem_complete.xml new file mode 100644 index 000000000..a8cb4e3d1 --- /dev/null +++ b/Habitica/res/drawable/layout_rounded_bg_animalitem_complete.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/animal_overview_item.xml b/Habitica/res/layout/animal_overview_item.xml deleted file mode 100644 index 68c34da9d..000000000 --- a/Habitica/res/layout/animal_overview_item.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - diff --git a/Habitica/res/layout/mount_overview_item.xml b/Habitica/res/layout/mount_overview_item.xml new file mode 100644 index 000000000..136617b28 --- /dev/null +++ b/Habitica/res/layout/mount_overview_item.xml @@ -0,0 +1,45 @@ + + + + + style="@style/CardContent"> + + + + + + + diff --git a/Habitica/res/layout/pet_overview_item.xml b/Habitica/res/layout/pet_overview_item.xml new file mode 100644 index 000000000..7aa7a1f06 --- /dev/null +++ b/Habitica/res/layout/pet_overview_item.xml @@ -0,0 +1,43 @@ + + + + style="@style/CardContent"> + + + + + diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml index 295b8cd59..153ffc3a5 100644 --- a/Habitica/res/values/colors.xml +++ b/Habitica/res/values/colors.xml @@ -148,6 +148,7 @@ #000 #efeff4 #fafaff + #6ECDB2 #794b00 diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml index 3b56e5900..e8f7edcbe 100644 --- a/Habitica/res/values/dimens.xml +++ b/Habitica/res/values/dimens.xml @@ -50,10 +50,13 @@ 16sp 14sp 2dp - 120dp + 84dp + 120dp 28dp - 81dp - 99dp + 68dp + 65dp + 81dp + 99dp 124dp 10dp 16dp diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 2c68f8811..5a1d51aff 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1015,6 +1015,8 @@ Read More You are unable to buy that amount. Still have a question? + Delete Checklist entry + %1$d/%2$d Task list display Onboarding Tasks Complete to earn 100 Gold! diff --git a/Habitica/res/xml/network_security_config.xml b/Habitica/res/xml/network_security_config.xml index f808081d4..4c9e97462 100644 --- a/Habitica/res/xml/network_security_config.xml +++ b/Habitica/res/xml/network_security_config.xml @@ -6,6 +6,6 @@ - 192.168.178.52 + 10.0.0.107 \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Animal.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Animal.java index a2f2bbd41..96c1b7f90 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Animal.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Animal.java @@ -29,4 +29,8 @@ public interface Animal { Integer getNumberOwned(); void setNumberOwned(Integer numberOwned); + + Integer getTotalNumber(); + + void setTotalNumber(Integer totalNumber); } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.java index 19326be4f..1fd23de3c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.java @@ -12,7 +12,10 @@ public class Mount extends RealmObject implements Animal { boolean premium; @Ignore - Integer numberOwned; + private Integer numberOwned; + + @Ignore + private Integer totalNumber; public String getKey() { return key; @@ -82,4 +85,15 @@ public class Mount extends RealmObject implements Animal { public void setNumberOwned(Integer numberOwned) { this.numberOwned = numberOwned; } + + public Integer getTotalNumber() { + if (totalNumber == null) { + return 0; + } + return totalNumber; + } + + public void setTotalNumber(Integer totalNumber) { + this.totalNumber = totalNumber; + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.java index cf8c531e6..642c2c1fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.java @@ -14,6 +14,9 @@ public class Pet extends RealmObject implements Animal{ @Ignore private Integer numberOwned; + @Ignore + private Integer totalNumber; + public String getKey() { return key; } @@ -83,4 +86,16 @@ public class Pet extends RealmObject implements Animal{ public void setNumberOwned(Integer numberOwned) { this.numberOwned = numberOwned; } + + public Integer getTotalNumber() { + if (totalNumber == null) { + return 0; + } + + return totalNumber; + } + + public void setTotalNumber(Integer totalNumber) { + this.totalNumber = totalNumber; + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.kt index 0401cee20..34b0d5d0f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/MountDetailRecyclerAdapter.kt @@ -39,7 +39,7 @@ class MountDetailRecyclerAdapter(data: OrderedRealmCollection?, autoUpdat } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MountViewHolder { - return MountViewHolder(parent.inflate(R.layout.animal_overview_item)) + return MountViewHolder(parent.inflate(R.layout.mount_overview_item)) } override fun onBindViewHolder(holder: MountViewHolder, position: Int) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt index 280a3a0fe..c0d783c4e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt @@ -1,14 +1,12 @@ package com.habitrpg.android.habitica.ui.adapter.inventory import android.content.Context +import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.LinearLayout -import android.widget.RelativeLayout import android.widget.TextView -import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.GridLayoutManager import com.facebook.drawee.view.SimpleDraweeView import com.habitrpg.android.habitica.R @@ -47,9 +45,11 @@ class StableRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter< } else if (viewType == 1) { val view = parent.inflate(R.layout.customization_section_header) SectionViewHolder(view) - } - else { - val view = parent.inflate(R.layout.animal_overview_item) + } else if (viewType == 2) { + val view = parent.inflate(R.layout.pet_overview_item) + StableViewHolder(view) + } else { + val view = parent.inflate(R.layout.mount_overview_item) StableViewHolder(view) } @@ -72,15 +72,20 @@ class StableRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter< } override fun getItemViewType(position: Int): Int { - return if (itemList[position] == "header") { + var item = itemList[position] + + return if (item == "header") { 0 } - else if (itemList[position].javaClass == String::class.java) { + else if (item.javaClass == String::class.java) { 1 } - else { + else if (itemType == "pets") { 2 } + else { + 3 + } } override fun getItemCount(): Int = itemList.size @@ -118,25 +123,49 @@ class StableRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter< } ownedTextView.visibility = View.VISIBLE this.imageView.alpha = 1.0f + this.titleView.alpha = 1.0f + this.ownedTextView.alpha = 1.0f + val imageName = if (itemType == "pets") { - "Pet-" + item.key + "Pet_Egg_" + item.animal } else { "Mount_Icon_" + item.key } - this.ownedTextView.text = animal?.numberOwned?.toString() - ownedTextView.visibility = if (animal?.numberOwned == 0 || animal?.type == "special") View.GONE else View.VISIBLE - imageView.background = null - DataBindingUtils.loadImage(imageName) { - val drawable = BitmapDrawable(context?.resources, if (item.numberOwned > 0) it else it.extractAlpha()) - Observable.just(drawable) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(Consumer { - imageView.background = drawable - }, RxErrorHandler.handleEmptyError()) - } - if (item.numberOwned <= 0) { - this.imageView.alpha = 0.1f + + context?.let { + + var owned = item.numberOwned + var totalNum = item.totalNumber + + + this.ownedTextView.text = context?.getString(R.string.pet_ownership_fraction, owned, totalNum) + this.ownedTextView.background = context?.getDrawable(R.drawable.layout_rounded_bg_shopitem_price) + + this.ownedTextView.setTextColor(ContextCompat.getColor(it, R.color.black) ) + + ownedTextView.visibility = if (animal?.type == "special") View.GONE else View.VISIBLE + imageView.background = null + + DataBindingUtils.loadImage(imageName) { + val drawable = BitmapDrawable(context?.resources, it) + Observable.just(drawable) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(Consumer { + imageView.background = drawable + }, RxErrorHandler.handleEmptyError()) + } + if (item.numberOwned <= 0) { + this.imageView.alpha = 0.2f + this.titleView.alpha = 0.2f + this.ownedTextView.alpha = 0.2f + } + + if (item.numberOwned == item.totalNumber) { + this.ownedTextView.background = context?.getDrawable(R.drawable.layout_rounded_bg_animalitem_complete) + this.ownedTextView.setTextColor(ContextCompat.getColor(it, R.color.white)) + } } + } override fun onClick(v: View) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt index 2919a411a..b82bf9c92 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt @@ -106,7 +106,8 @@ class StableRecyclerFragment : BaseFragment() { private fun setGridSpanCount(width: Int) { var spanCount = 0 if (context != null && context?.resources != null) { - val itemWidth: Float = context?.resources?.getDimension(R.dimen.pet_width) ?: 0.toFloat() + var animal_width = if (itemType == "pets") R.dimen.pet_width else R.dimen.mount_width + val itemWidth: Float = context?.resources?.getDimension(animal_width) ?: 0.toFloat() spanCount = (width / itemWidth).toInt() } @@ -144,7 +145,6 @@ class StableRecyclerFragment : BaseFragment() { val items = ArrayList() var lastAnimal: Animal = unsortedAnimals[0] ?: return items var lastSectionTitle = "" - for (animal in unsortedAnimals) { val identifier = if (animal.animal.isNotEmpty() && animal.type != "special") animal.animal else animal.key val lastIdentifier = if (lastAnimal.animal.isNotEmpty()) lastAnimal.animal else lastAnimal.key @@ -154,6 +154,9 @@ class StableRecyclerFragment : BaseFragment() { } lastAnimal = animal } + + lastAnimal.totalNumber += 1 + if (animal.type != lastSectionTitle) { if (items.size > 0 && items[items.size - 1].javaClass == String::class.java) { items.removeAt(items.size - 1) @@ -175,6 +178,7 @@ class StableRecyclerFragment : BaseFragment() { } } } + } if (!((lastAnimal.type == "premium" || lastAnimal.type == "special") && lastAnimal.numberOwned == 0)) { items.add(lastAnimal) @@ -187,6 +191,5 @@ class StableRecyclerFragment : BaseFragment() { companion object { private const val ITEM_TYPE_KEY = "CLASS_TYPE_KEY" private const val HEADER_VIEW_TYPE = 0 - private const val SECTION_VIEW_TYPE = 1 } }