mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-19 20:29:02 +00:00
Merge pull request #1772 from Hafizzle/Hafiz/#1417
#1417 - Improve Avatar customization Buy Modals
This commit is contained in:
commit
73d63073c6
10 changed files with 68 additions and 30 deletions
|
|
@ -26,4 +26,12 @@
|
|||
android:gravity="center"
|
||||
android:layout_marginTop="14dp"
|
||||
android:layout_marginBottom="4dp"/>
|
||||
<TextView
|
||||
android:id="@+id/notesTextView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Body2"
|
||||
android:textColor="@color/text_ternary"
|
||||
tools:text="These are the notes"
|
||||
android:gravity="center"/>
|
||||
</merge>
|
||||
15
Habitica/res/layout/purchased_equip_dialog.xml
Normal file
15
Habitica/res/layout/purchased_equip_dialog.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/colorContentBackground">
|
||||
|
||||
<com.habitrpg.android.habitica.ui.AvatarView
|
||||
android:id="@+id/avatar_view"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_width="@dimen/avatar_width"
|
||||
android:layout_height="@dimen/avatar_height"
|
||||
android:layout_marginTop="24dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -35,6 +35,8 @@ class AvatarView : FrameLayout {
|
|||
private var showPet = true
|
||||
private var showSleeping = true
|
||||
private var hasBackground: Boolean = false
|
||||
private var preview: Map<LayerType, String>? = null
|
||||
private var backgroundForPurchase: String? = null
|
||||
private var hasMount: Boolean = false
|
||||
private var hasPet: Boolean = false
|
||||
private val imageViewHolder = mutableListOf<ImageView>()
|
||||
|
|
@ -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<LayerType, String>? = null) {
|
||||
val oldUser = this.avatar
|
||||
this.avatar = avatar
|
||||
preview?.let { this.preview = preview }
|
||||
|
||||
var equals = false
|
||||
if (oldUser != null) {
|
||||
|
|
|
|||
|
|
@ -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<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
|
||||
var userSize: String? = null
|
||||
var hairColor: String? = null
|
||||
var avatar: Avatar? = null
|
||||
var customizationType: String? = null
|
||||
var gemBalance: Int = 0
|
||||
var unsortedCustomizations: List<Customization> = 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, String>(AvatarView.LayerType::class.java)
|
||||
layerMap[AvatarView.LayerType.BACKGROUND] = customization?.let { ShopItem.fromCustomization(it, userSize, hairColor).imageName }
|
||||
purchasedCustomizationView.findViewById<AvatarView>(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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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, String>(AvatarView.LayerType::class.java)
|
||||
layerMap[AvatarView.LayerType.BACKGROUND] = item.imageName
|
||||
|
||||
binding.avatarView.setAvatar(avatar, layerMap)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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=
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
fabric_key=CHANGE_ME
|
||||
facebook_app_id=CHANGE_ME
|
||||
amplitude_app_id=CHANGE_ME
|
||||
application_ad_id=CHANGE_ME
|
||||
Loading…
Reference in a new issue