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/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 28ed8bbf2..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 @@ -35,6 +35,8 @@ 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 private val imageViewHolder = mutableListOf() @@ -203,7 +205,11 @@ class AvatarView : FrameLayout { } var backgroundName = avatar.preferences?.background - if (showBackground && backgroundName?.isNotEmpty() == true) { +// 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) layerMap[LayerType.BACKGROUND] = "background_$backgroundName" if (resetHasAttributes) hasBackground = true @@ -418,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 a49368688..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 @@ -12,21 +12,25 @@ 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 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() { 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 +198,27 @@ 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) + 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 { + 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/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index 485a332c5..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).setAvatar(userRepository.getUnmanagedCopy(user)) + (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 ad457a3f3..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 setAvatar(avatar: Avatar) { - binding.avatarView.setAvatar(avatar) + fun setAvatarWithBackgroundPreview(avatar: Avatar, item: ShopItem) { + val layerMap = EnumMap(AvatarView.LayerType::class.java) + layerMap[AvatarView.LayerType.BACKGROUND] = item.imageName + + binding.avatarView.setAvatar(avatar, layerMap) } } 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 } } 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