diff --git a/Habitica/res/values-night/colors.xml b/Habitica/res/values-night/colors.xml index ed360c5f8..ad22bb598 100644 --- a/Habitica/res/values-night/colors.xml +++ b/Habitica/res/values-night/colors.xml @@ -26,6 +26,7 @@ @color/blue_50 @color/teal_50 @color/brand_200 + #4D4f2a93 #40000000 #80000000 diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml index d030d9199..fd0ae111f 100644 --- a/Habitica/res/values/colors.xml +++ b/Habitica/res/values/colors.xml @@ -97,6 +97,7 @@ @color/blue_100 @color/teal_100 @color/brand_300 + #4D6033B5 #50ffffff #99FFFFFF diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 33a724365..bbb43442a 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1359,6 +1359,9 @@ Daily streaks and Habit counters will only count up while this is on Your Quest progress will stay pending Damage to a boss or found collection items will be stored until you resume damage + List + By Invite + Here’s a list of Habiticans looking to join a Party You diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index e341ee6b8..1705730a1 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -515,7 +515,7 @@ true @null @android:style/Animation.Dialog - @color/transparent + @color/background_brand @null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt index 6d91ad36a..676bf589c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt @@ -41,8 +41,6 @@ class TavernFragment : BaseMainFragment() { ): View? { this.usesTabLayout = true this.hidesToolbar = true - this.tutorialStepIdentifier = "tavern" - this.tutorialTexts = listOf(getString(R.string.tutorial_tavern)) return super.onCreateView(inflater, container, savedInstanceState) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt index e1bbc5cda..72f13221d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt @@ -79,7 +79,7 @@ class StableViewModel(private val application: Application?, private val itemTyp _items.value = mapAnimals(animals, it) } viewModelScope.launchCatching { - _ownedItems.value = inventoryRepository.getOwnedItems(true).firstOrNull() + _ownedItems.value = inventoryRepository.getOwnedItems(true).firstOrNull() ?: emptyMap() } _mounts.value = if ("pets" == itemType) { inventoryRepository.getMounts().firstOrNull() ?: emptyList() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt index c5806d104..06a3dd1ec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt @@ -13,15 +13,14 @@ import android.view.animation.AccelerateInterpolator import android.widget.Button import android.widget.LinearLayout import android.widget.RelativeLayout -import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.core.view.children import androidx.lifecycle.lifecycleScope import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.databinding.DialogHabiticaBaseBinding import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.ui.activities.BaseActivity -import com.habitrpg.android.habitica.ui.views.login.LockableScrollView import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.layoutInflater import com.plattysoft.leonids.ParticleSystem @@ -38,17 +37,11 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. updateButtonLayout() } var isCelebratory: Boolean = false - private val view: RelativeLayout = LayoutInflater.from(context).inflate(R.layout.dialog_habitica_base, null) as RelativeLayout - private val dialogWrapper: LinearLayout - internal val dialogContainer: LinearLayout - private var titleTextView: TextView - private var messageTextView: TextView - internal var contentView: ViewGroup - private var scrollingSeparator: View - internal var scrollView: LockableScrollView - protected var buttonsWrapper: LinearLayout - private var noticeTextView: TextView - private var closeButton: Button + private val binding = DialogHabiticaBaseBinding.inflate(LayoutInflater.from(context)) + val scrollView + get() = binding.mainScrollView + val contentView + get() = binding.contentView internal var additionalContentView: View? = null @@ -70,35 +63,25 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. var dialogWidth = 320 set(value) { field = value - val layoutParams = dialogWrapper.layoutParams + val layoutParams = binding.dialogWrapper.layoutParams layoutParams.width = value - dialogWrapper.layoutParams = layoutParams + binding.dialogWrapper.layoutParams = layoutParams } init { - setView(view) - dialogWrapper = view.findViewById(R.id.dialog_wrapper) - dialogContainer = view.findViewById(R.id.dialog_container) - titleTextView = view.findViewById(R.id.titleTextView) - messageTextView = view.findViewById(R.id.messageTextView) - contentView = view.findViewById(R.id.content_view) - scrollingSeparator = view.findViewById(R.id.scrolling_separator) - scrollView = view.findViewById(R.id.main_scroll_view) - buttonsWrapper = view.findViewById(R.id.buttons_wrapper) - noticeTextView = view.findViewById(R.id.notice_text_view) - closeButton = view.findViewById(R.id.close_button) - closeButton.setOnClickListener { dismiss() } - dialogContainer.clipChildren = true - dialogContainer.clipToOutline = true + setView(binding.root) + binding.closeButton.setOnClickListener { dismiss() } + binding.dialogContainer.clipChildren = true + binding.dialogContainer.clipToOutline = true } override fun setTitle(title: CharSequence?) { if ((title?.length ?: 0) > 0) { - titleTextView.visibility = View.VISIBLE + binding.titleTextView.visibility = View.VISIBLE } else { - titleTextView.visibility = View.GONE + binding.titleTextView.visibility = View.GONE } - titleTextView.text = title + binding.titleTextView.text = title } override fun setTitle(titleId: Int) { @@ -107,12 +90,12 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. override fun setMessage(message: CharSequence?) { if ((message?.length ?: 0) > 0) { - messageTextView.visibility = View.VISIBLE + binding.messageTextView.visibility = View.VISIBLE } else { - messageTextView.visibility = View.GONE + binding.messageTextView.visibility = View.GONE } - messageTextView.text = message - messageTextView.movementMethod = ScrollingMovementMethod() + binding.messageTextView.text = message + binding.messageTextView.movementMethod = ScrollingMovementMethod() } fun setMessage(messageId: Int) { @@ -121,11 +104,11 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. fun setNotice(notice: CharSequence?) { if ((notice?.length ?: 0) > 0) { - noticeTextView.visibility = View.VISIBLE + binding.noticeTextView.visibility = View.VISIBLE } else { - noticeTextView.visibility = View.GONE + binding.noticeTextView.visibility = View.GONE } - noticeTextView.text = notice + binding.noticeTextView.text = notice } fun setNotice(noticeID: Int) { @@ -133,52 +116,52 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. } fun setCustomHeaderView(customHeader: View) { - dialogContainer.addView(customHeader, 0) - dialogContainer.setPadding(0, 0, 0, dialogContainer.paddingBottom) + binding.dialogContainer.addView(customHeader, 0) + binding.dialogContainer.setPadding(0, 0, 0, binding.dialogContainer.paddingBottom) } fun setAdditionalContentView(layoutResID: Int) { val inflater = context.layoutInflater - setAdditionalContentView(inflater.inflate(layoutResID, view, false)) + setAdditionalContentView(inflater.inflate(layoutResID, binding.root, false)) } fun setAdditionalContentView(view: View?) { - this.view.removeView(additionalContentView) + binding.root.removeView(additionalContentView) additionalContentView = view - this.contentView.addView(view) + binding.contentView.addView(view) val layoutParams = view?.layoutParams layoutParams?.width = ViewGroup.LayoutParams.MATCH_PARENT layoutParams?.height = ViewGroup.LayoutParams.WRAP_CONTENT view?.layoutParams = layoutParams - contentView.forceLayout() + binding.contentView.forceLayout() } fun setAdditionalContentSidePadding(padding: Int) { - contentView.setPadding(padding, 0, padding, contentView.paddingBottom) - messageTextView.setPadding(padding, messageTextView.paddingTop, padding, messageTextView.paddingBottom) + binding.contentView.setPadding(padding, 0, padding, binding.contentView.paddingBottom) + binding.messageTextView.setPadding(padding, binding.messageTextView.paddingTop, padding, binding.messageTextView.paddingBottom) } fun setExtraCloseButtonVisibility(visibility: Int) { - closeButton.visibility = visibility + binding.closeButton.visibility = visibility } private fun updateButtonLayout() { if (isScrollingLayout || buttonAxis == LinearLayout.HORIZONTAL) { - scrollingSeparator.visibility = View.VISIBLE - buttonsWrapper.orientation = LinearLayout.HORIZONTAL + binding.scrollingSeparator.visibility = View.VISIBLE + binding.buttonsWrapper.orientation = LinearLayout.HORIZONTAL val padding = 16.dpToPx(context) - buttonsWrapper.setPadding(padding, padding, padding, 0) - dialogContainer.setPadding(0, dialogContainer.paddingTop, 0, padding) - contentView.setPadding(contentView.paddingStart, 0, contentView.paddingEnd, 30.dpToPx(context)) + binding.buttonsWrapper.setPadding(padding, padding, padding, 0) + binding.dialogContainer.setPadding(0, binding.dialogContainer.paddingTop, 0, padding) + binding.contentView.setPadding(binding.contentView.paddingStart, 0, binding.contentView.paddingEnd, 30.dpToPx(context)) } else { - scrollingSeparator.visibility = View.GONE - buttonsWrapper.orientation = LinearLayout.VERTICAL - contentView.setPadding(contentView.paddingStart, 0, contentView.paddingEnd, 0) + binding.scrollingSeparator.visibility = View.GONE + binding.buttonsWrapper.orientation = LinearLayout.VERTICAL + binding.contentView.setPadding(binding.contentView.paddingStart, 0, binding.contentView.paddingEnd, 0) val sidePadding = context.resources.getDimension(R.dimen.alert_side_padding).toInt() - buttonsWrapper.setPadding(20.dpToPx(context), sidePadding, sidePadding, 0) - dialogContainer.setPadding(0, dialogContainer.paddingTop, 0, 24.dpToPx(context)) + binding.buttonsWrapper.setPadding(20.dpToPx(context), sidePadding, sidePadding, 0) + binding.dialogContainer.setPadding(0, binding.dialogContainer.paddingTop, 0, 24.dpToPx(context)) } - buttonsWrapper.children.forEach { configureButtonLayoutParams(it) } + binding.buttonsWrapper.children.forEach { configureButtonLayoutParams(it) } } fun getContentView(): View? = additionalContentView @@ -202,12 +185,12 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. ): Button { val button: Button = if (isPrimary) { if (isDestructive) { - buttonsWrapper.inflate(R.layout.dialog_habitica_primary_destructive_button) as? Button + binding.buttonsWrapper.inflate(R.layout.dialog_habitica_primary_destructive_button) as? Button } else { - buttonsWrapper.inflate(R.layout.dialog_habitica_primary_button) as? Button + binding.buttonsWrapper.inflate(R.layout.dialog_habitica_primary_button) as? Button } } else { - val button = buttonsWrapper.inflate(R.layout.dialog_habitica_secondary_button) as? Button + val button = binding.buttonsWrapper.inflate(R.layout.dialog_habitica_secondary_button) as? Button if (isDestructive) { button?.setTextColor(ContextCompat.getColor(context, R.color.text_red)) } @@ -223,7 +206,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. function: ((HabiticaAlertDialog, Int) -> Unit)? = null ): View { val weakThis = WeakReference(this) - val buttonIndex = buttonsWrapper.childCount + val buttonIndex = binding.buttonsWrapper.childCount buttonView.setOnClickListener { weakThis.get()?.let { it1 -> if (function != null) { @@ -235,7 +218,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. } } configureButtonLayoutParams(buttonView) - buttonsWrapper.addView(buttonView) + binding.buttonsWrapper.addView(buttonView) // for some reason the padding gets lost somewhere. buttonView.setPadding(24.dpToPx(context), 0, 24.dpToPx(context), 0) return buttonView @@ -276,32 +259,32 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. super.onStart() if (isCelebratory) { - titleTextView.post { - val confettiContainer = view.findViewById(R.id.confetti_container) + binding.titleTextView.post { + val confettiContainer = binding.root.findViewById(R.id.confetti_container) ParticleSystem(confettiContainer, 40, ContextCompat.getDrawable(context, R.drawable.confetti_blue), 6000) .setAcceleration(0.00010f, 90) .setRotationSpeed(144f) .setSpeedByComponentsRange(-0.15f, 0.15f, -0.1f, -0.4f) .setFadeOut(200, AccelerateInterpolator()) - .emitWithGravity(titleTextView, Gravity.BOTTOM, 10, 2000) + .emitWithGravity(binding.titleTextView, Gravity.BOTTOM, 10, 2000) ParticleSystem(confettiContainer, 40, ContextCompat.getDrawable(context, R.drawable.confetti_red), 6000) .setAcceleration(0.00010f, 90) .setRotationSpeed(144f) .setSpeedByComponentsRange(-0.15f, 0.15f, -0.1f, -0.4f) .setFadeOut(200, AccelerateInterpolator()) - .emitWithGravity(titleTextView, Gravity.BOTTOM, 10, 2000) + .emitWithGravity(binding.titleTextView, Gravity.BOTTOM, 10, 2000) ParticleSystem(confettiContainer, 40, ContextCompat.getDrawable(context, R.drawable.confetti_yellow), 6000) .setAcceleration(0.00010f, 90) .setRotationSpeed(144f) .setSpeedByComponentsRange(-0.15f, 0.15f, -0.1f, -0.4f) .setFadeOut(200, AccelerateInterpolator()) - .emitWithGravity(titleTextView, Gravity.BOTTOM, 10, 2000) + .emitWithGravity(binding.titleTextView, Gravity.BOTTOM, 10, 2000) ParticleSystem(confettiContainer, 40, ContextCompat.getDrawable(context, R.drawable.confetti_purple), 6000) .setAcceleration(0.00010f, 90) .setRotationSpeed(144f) .setSpeedByComponentsRange(-0.15f, 0.15f, -0.1f, -0.4f) .setFadeOut(200, AccelerateInterpolator()) - .emitWithGravity(titleTextView, Gravity.BOTTOM, 10, 2000) + .emitWithGravity(binding.titleTextView, Gravity.BOTTOM, 10, 2000) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt index a0f1f05ef..69062e050 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt @@ -62,7 +62,7 @@ class QuestCompletedDialogContent : LinearLayout { binding.ownerRewardsList.visibility = View.GONE } - if (questContent.drop?.exp ?: 0 > 0) { + if ((questContent.drop?.exp ?: 0) > 0) { val view = inflater?.inflate(R.layout.row_quest_reward_imageview, binding.rewardsList, false) as? ViewGroup val imageView = view?.findViewById(R.id.imageView) imageView?.scaleType = ImageView.ScaleType.CENTER @@ -72,7 +72,7 @@ class QuestCompletedDialogContent : LinearLayout { binding.rewardsList.addView(view) } - if (questContent.drop?.gp ?: 0 > 0) { + if ((questContent.drop?.gp ?: 0) > 0) { val view = inflater?.inflate(R.layout.row_quest_reward_imageview, binding.rewardsList, false) as? ViewGroup val imageView = view?.findViewById(R.id.imageView) imageView?.scaleType = ImageView.ScaleType.CENTER diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.kt index 555751a3c..bfb88bdfe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.kt @@ -24,7 +24,7 @@ abstract class InsufficientCurrencyDialog(context: Context) : HabiticaAlertDialo override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val inflater = LayoutInflater.from(context) - val view = inflater.inflate(getLayoutID(), contentView, false) + val view = inflater.inflate(getLayoutID(), null) setAdditionalContentView(view) imageView = view.findViewById(R.id.imageView) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt index b8b09e86c..f5a2fcaa9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt @@ -46,7 +46,6 @@ class InsufficientGemsDialog(context: Context, var gemPrice: Int) : Insufficient addButton(R.string.see_other_options, true) { _, _ -> MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false))) } addCloseButton() contentView.setPadding(0, 0, 0, 0) - dialogContainer.setPadding(0, 0, 0, dialogContainer.paddingBottom) } override fun onAttachedToWindow() { 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 557f85f3d..b70a486e1 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 @@ -250,7 +250,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop pinTextView = customHeader.findViewById(R.id.pin_text) addCloseButton() - buyButton = addButton(layoutInflater.inflate(R.layout.dialog_purchase_shopitem_button, buttonsWrapper, false), autoDismiss = false) { _, _ -> + buyButton = addButton(layoutInflater.inflate(R.layout.dialog_purchase_shopitem_button, null), autoDismiss = false) { _, _ -> onBuyButtonClicked() } priceLabel = buyButton.findViewById(R.id.priceLabel) @@ -359,7 +359,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop Pair("key", shopItem.key) ) ) - HapticFeedbackManager.tap(contentView) + HapticFeedbackManager.tap(buyButton) val snackbarText = arrayOf("") val observable: (suspend () -> Any?) if (shopIdentifier != null && shopIdentifier == Shop.TIME_TRAVELERS_SHOP || "mystery_set" == shopItem.purchaseType || shopItem.currency == "hourglasses") {