From 73246fa35438e06d65cfcf2adefe0778bc371f39 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sat, 14 May 2022 16:33:08 -0400 Subject: [PATCH 1/6] Setup --- habitica.properties.example | 18 ------------------ habitica.resources.example | 4 ---- 2 files changed, 22 deletions(-) delete mode 100644 habitica.properties.example delete mode 100644 habitica.resources.example diff --git a/habitica.properties.example b/habitica.properties.example deleted file mode 100644 index 0c783067a..000000000 --- a/habitica.properties.example +++ /dev/null @@ -1,18 +0,0 @@ -# Habitica Server Port -# local instance -# PORT=3000 -PORT=80 - -# Genymotion -# BASE_URL=http://10.0.3.2:3000 - -# Android Emulator -# see: http://developer.android.com/tools/help/emulator.html#networkaddresses -# BASE_URL=http://10.0.2.2:3000 - -# Production -BASE_URL=https://habitica.com - -STAGING_KEY= -ANDROID_TESTING_UUID= -APPLE_AUTH_CLIENT_ID= diff --git a/habitica.resources.example b/habitica.resources.example deleted file mode 100644 index 8d68b8005..000000000 --- a/habitica.resources.example +++ /dev/null @@ -1,4 +0,0 @@ -fabric_key=CHANGE_ME -facebook_app_id=CHANGE_ME -amplitude_app_id=CHANGE_ME -application_ad_id=CHANGE_ME From f89847feeabf485a25e2c2c9f3c8bfd8be3e1aeb Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sat, 14 May 2022 21:39:45 -0400 Subject: [PATCH 2/6] Show background for purchase when selecting background item --- .../android/habitica/ui/AvatarView.kt | 22 ++++++++++++++++++- .../habitica/ui/views/shops/PurchaseDialog.kt | 2 +- .../shops/PurchaseDialogBackgroundContent.kt | 4 ++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt index 28ed8bbf2..eca5d87f3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt @@ -35,6 +35,7 @@ class AvatarView : FrameLayout { private var showPet = true private var showSleeping = true private var hasBackground: Boolean = false + private var backgroundForPurchase: String? = null private var hasMount: Boolean = false private var hasPet: Boolean = false private val imageViewHolder = mutableListOf() @@ -203,7 +204,10 @@ class AvatarView : FrameLayout { } var backgroundName = avatar.preferences?.background - if (showBackground && backgroundName?.isNotEmpty() == true) { + if (backgroundForPurchase != null) { + layerMap[LayerType.BACKGROUND] = backgroundForPurchase + if (resetHasAttributes) hasBackground = true + } else if (showBackground && backgroundName?.isNotEmpty() == true) { backgroundName = substituteOrReturn(spriteSubstitutions["backgrounds"], backgroundName) layerMap[LayerType.BACKGROUND] = "background_$backgroundName" if (resetHasAttributes) hasBackground = true @@ -433,6 +437,22 @@ class AvatarView : FrameLayout { } } + fun setAvatarWithBackgroundForPurchase(avatar: Avatar, backgroundForPurchase: String?) { + val oldUser = this.avatar + this.avatar = avatar + this.backgroundForPurchase = backgroundForPurchase + + var equals = false + if (oldUser != null) { + val newLayerMap = getLayerMap(avatar, false) + + equals = currentLayers == newLayerMap + } + if (!equals) { + invalidate() + } + } + private fun initAvatarRectMatrix() { if (avatarRectF == null) { val srcRect = originalRect diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index 485a332c5..0db1c8218 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -288,7 +288,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop setLimitedTextView() if (additionalContentView is PurchaseDialogBackgroundContent) { - (additionalContentView as PurchaseDialogBackgroundContent).setAvatar(userRepository.getUnmanagedCopy(user)) + (additionalContentView as PurchaseDialogBackgroundContent).setAvatarWithBackgroundForPurchase(userRepository.getUnmanagedCopy(user), shopItem) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt index ad457a3f3..0c5de89b7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt @@ -20,7 +20,7 @@ class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent( binding.notesTextView.text = item.notes } - fun setAvatar(avatar: Avatar) { - binding.avatarView.setAvatar(avatar) + fun setAvatarWithBackgroundForPurchase(avatar: Avatar, item: ShopItem) { + binding.avatarView.setAvatarWithBackgroundForPurchase(avatar, item.imageName) } } From 3ab122883c5bd52d59dd841524936f8bbd7d8d7b Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sat, 14 May 2022 22:15:58 -0400 Subject: [PATCH 3/6] Add notes to set --- Habitica/res/layout/dialog_purchase_customizationset.xml | 8 ++++++++ .../views/shops/PurchaseDialogCustomizationSetContent.kt | 1 + 2 files changed, 9 insertions(+) diff --git a/Habitica/res/layout/dialog_purchase_customizationset.xml b/Habitica/res/layout/dialog_purchase_customizationset.xml index 05c3ab5aa..f6953a363 100644 --- a/Habitica/res/layout/dialog_purchase_customizationset.xml +++ b/Habitica/res/layout/dialog_purchase_customizationset.xml @@ -26,4 +26,12 @@ android:gravity="center" android:layout_marginTop="14dp" android:layout_marginBottom="4dp"/> + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogCustomizationSetContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogCustomizationSetContent.kt index b68bebd8e..888f0d50c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogCustomizationSetContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogCustomizationSetContent.kt @@ -28,5 +28,6 @@ class PurchaseDialogCustomizationSetContent(context: Context) : PurchaseDialogCo imageView.layoutParams = FlexboxLayout.LayoutParams(76.dpToPx(context), 76.dpToPx(context)) binding.imageViewWrapper.addView(imageView) } + binding.notesTextView.text = item.notes } } From 491e7f33f90f0c84c3a92a37fbdbaf53602aa9c7 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sun, 15 May 2022 01:03:39 -0400 Subject: [PATCH 4/6] Equip background dialog added --- .../res/layout/purchased_equip_dialog.xml | 15 ++++++++++++ .../android/habitica/ui/AvatarView.kt | 2 +- .../CustomizationRecyclerViewAdapter.kt | 24 +++++++++++++++++-- .../AvatarCustomizationFragment.kt | 1 + .../shops/PurchaseDialogBackgroundContent.kt | 2 +- 5 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 Habitica/res/layout/purchased_equip_dialog.xml diff --git a/Habitica/res/layout/purchased_equip_dialog.xml b/Habitica/res/layout/purchased_equip_dialog.xml new file mode 100644 index 000000000..7ed05b253 --- /dev/null +++ b/Habitica/res/layout/purchased_equip_dialog.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt index eca5d87f3..46e94b13a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt @@ -437,7 +437,7 @@ class AvatarView : FrameLayout { } } - fun setAvatarWithBackgroundForPurchase(avatar: Avatar, backgroundForPurchase: String?) { + fun setAvatarWithSelectedBackground(avatar: Avatar, backgroundForPurchase: String?) { val oldUser = this.avatar this.avatar = avatar this.backgroundForPurchase = backgroundForPurchase diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt index a49368688..5cd22a91b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt @@ -12,9 +12,11 @@ import com.habitrpg.android.habitica.databinding.CustomizationGridItemBinding import com.habitrpg.android.habitica.databinding.CustomizationSectionFooterBinding import com.habitrpg.android.habitica.databinding.CustomizationSectionHeaderBinding import com.habitrpg.android.habitica.helpers.MainNavigationController +import com.habitrpg.android.habitica.models.Avatar import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.CustomizationSet import com.habitrpg.android.habitica.models.shops.ShopItem +import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.helpers.loadImage import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog @@ -27,6 +29,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler var userSize: String? = null var hairColor: String? = null + var avatar: Avatar? = null var customizationType: String? = null var gemBalance: Int = 0 var unsortedCustomizations: List = ArrayList() @@ -194,8 +197,25 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler return } - customization?.let { - selectCustomizationEvents.onNext(it) + if (customization?.type == "background" && avatar != null){ + val alert = HabiticaAlertDialog(context = itemView.context) + val purchasedCustomizationView: View = LayoutInflater.from(itemView.context).inflate(R.layout.purchased_equip_dialog, null) + purchasedCustomizationView.findViewById(R.id.avatar_view).setAvatarWithSelectedBackground(avatar!!, customization?.let { ShopItem.fromCustomization(it, userSize, hairColor).imageName }) + alert.setAdditionalContentView(purchasedCustomizationView) + alert.addButton(R.string.equip, true) { _, _ -> + customization?.let { + selectCustomizationEvents.onNext(it) + } + } + alert.addButton(R.string.close, false) { _, _ -> + alert.dismiss() + } + alert.show() + } else { + customization?.let { + selectCustomizationEvents.onNext(it) + } + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt index 11cc42bd3..532c2c208 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt @@ -221,6 +221,7 @@ class AvatarCustomizationFragment : this.adapter.userSize = user.preferences?.size this.adapter.hairColor = user.preferences?.hair?.color this.adapter.gemBalance = user.gemCount + this.adapter.avatar = user adapter.notifyDataSetChanged() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt index 0c5de89b7..702ad132d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt @@ -21,6 +21,6 @@ class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent( } fun setAvatarWithBackgroundForPurchase(avatar: Avatar, item: ShopItem) { - binding.avatarView.setAvatarWithBackgroundForPurchase(avatar, item.imageName) + binding.avatarView.setAvatarWithSelectedBackground(avatar, item.imageName) } } From f89cd4284eaf49f26d9e1e58c20738d77b0b45bd Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 23 May 2022 08:25:37 -0400 Subject: [PATCH 5/6] Extend existing setAvatar method and use Map --- .../java/com/habitrpg/android/habitica/ui/AvatarView.kt | 9 ++++++--- .../ui/adapter/CustomizationRecyclerViewAdapter.kt | 7 +++++-- .../android/habitica/ui/views/shops/PurchaseDialog.kt | 2 +- .../ui/views/shops/PurchaseDialogBackgroundContent.kt | 9 +++++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt index 46e94b13a..0df664b5d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt @@ -35,6 +35,7 @@ class AvatarView : FrameLayout { private var showPet = true private var showSleeping = true private var hasBackground: Boolean = false + private var preview: Map? = null private var backgroundForPurchase: String? = null private var hasMount: Boolean = false private var hasPet: Boolean = false @@ -204,8 +205,9 @@ class AvatarView : FrameLayout { } var backgroundName = avatar.preferences?.background - if (backgroundForPurchase != null) { - layerMap[LayerType.BACKGROUND] = backgroundForPurchase +// if (backgroundForPurchase != null) { + if (preview != null) { + layerMap[preview?.keys?.first()] = preview?.values?.first() if (resetHasAttributes) hasBackground = true } else if (showBackground && backgroundName?.isNotEmpty() == true) { backgroundName = substituteOrReturn(spriteSubstitutions["backgrounds"], backgroundName) @@ -422,9 +424,10 @@ class AvatarView : FrameLayout { } } - fun setAvatar(avatar: Avatar) { + fun setAvatar(avatar: Avatar, preview: Map? = null) { val oldUser = this.avatar this.avatar = avatar + preview?.let { this.preview = preview } var equals = false if (oldUser != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt index 5cd22a91b..912387490 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt @@ -23,7 +23,8 @@ import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.subjects.PublishSubject -import java.util.Date +import java.util.* +import kotlin.collections.ArrayList class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.RecyclerView.Adapter() { @@ -200,7 +201,9 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler if (customization?.type == "background" && avatar != null){ val alert = HabiticaAlertDialog(context = itemView.context) val purchasedCustomizationView: View = LayoutInflater.from(itemView.context).inflate(R.layout.purchased_equip_dialog, null) - purchasedCustomizationView.findViewById(R.id.avatar_view).setAvatarWithSelectedBackground(avatar!!, customization?.let { ShopItem.fromCustomization(it, userSize, hairColor).imageName }) + val layerMap = EnumMap(AvatarView.LayerType::class.java) + layerMap[AvatarView.LayerType.BACKGROUND] = customization?.let { ShopItem.fromCustomization(it, userSize, hairColor).imageName } + purchasedCustomizationView.findViewById(R.id.avatar_view).setAvatar(avatar!!, layerMap) alert.setAdditionalContentView(purchasedCustomizationView) alert.addButton(R.string.equip, true) { _, _ -> customization?.let { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index 0db1c8218..4c48db308 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -288,7 +288,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop setLimitedTextView() if (additionalContentView is PurchaseDialogBackgroundContent) { - (additionalContentView as PurchaseDialogBackgroundContent).setAvatarWithBackgroundForPurchase(userRepository.getUnmanagedCopy(user), shopItem) + (additionalContentView as PurchaseDialogBackgroundContent).setAvatarWithBackgroundPreview(userRepository.getUnmanagedCopy(user), shopItem) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt index 702ad132d..fbb8ed811 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt @@ -6,7 +6,9 @@ import com.habitrpg.android.habitica.databinding.PurchaseDialogBackgroundBinding import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.Avatar import com.habitrpg.android.habitica.models.shops.ShopItem +import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.views.PixelArtView +import java.util.* class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(context) { val binding = PurchaseDialogBackgroundBinding.inflate(context.layoutInflater, this) @@ -20,7 +22,10 @@ class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent( binding.notesTextView.text = item.notes } - fun setAvatarWithBackgroundForPurchase(avatar: Avatar, item: ShopItem) { - binding.avatarView.setAvatarWithSelectedBackground(avatar, item.imageName) + fun setAvatarWithBackgroundPreview(avatar: Avatar, item: ShopItem) { + val layerMap = EnumMap(AvatarView.LayerType::class.java) + layerMap[AvatarView.LayerType.BACKGROUND] = item.imageName + + binding.avatarView.setAvatar(avatar, layerMap) } } From ea88374dd00ee9bafb1583382889d62e0d40ee99 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Thu, 26 May 2022 13:37:39 -0400 Subject: [PATCH 6/6] Revert/remove setAvatarWithSelectedBackground (Made more generic) --- .../habitrpg/android/habitica/ui/AvatarView.kt | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt index 0df664b5d..a20d6a80f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt @@ -440,22 +440,6 @@ class AvatarView : FrameLayout { } } - fun setAvatarWithSelectedBackground(avatar: Avatar, backgroundForPurchase: String?) { - val oldUser = this.avatar - this.avatar = avatar - this.backgroundForPurchase = backgroundForPurchase - - var equals = false - if (oldUser != null) { - val newLayerMap = getLayerMap(avatar, false) - - equals = currentLayers == newLayerMap - } - if (!equals) { - invalidate() - } - } - private fun initAvatarRectMatrix() { if (avatarRectF == null) { val srcRect = originalRect