diff --git a/Habitica/res/layout/shop_ad.xml b/Habitica/res/layout/shop_ad.xml index 6ed8c1313..acc92e1a7 100644 --- a/Habitica/res/layout/shop_ad.xml +++ b/Habitica/res/layout/shop_ad.xml @@ -29,5 +29,6 @@ style="@style/Body2" android:gravity="center_horizontal" android:textColor="@color/text_ternary" + android:maxWidth="300dp" android:layout_marginTop="2dp"/> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt index bb9035985..860b0ef49 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt @@ -125,9 +125,6 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context) binding?.recyclerView?.layoutManager = layoutManager - activity?.let { - binding?.recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL)) - } binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator() userViewModel.user.observeOnce(this) { @@ -155,54 +152,54 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL adapter = ItemRecyclerAdapter(context) } binding?.recyclerView?.adapter = adapter - adapter?.onUseSpecialItem = { onSpecialItemSelected(it) } - adapter?.onSellItem = { - lifecycleScope.launchCatching { - inventoryRepository.sellItem(it) - } + } + adapter?.onUseSpecialItem = { onSpecialItemSelected(it) } + adapter?.onSellItem = { + lifecycleScope.launchCatching { + inventoryRepository.sellItem(it) } - adapter?.onQuestInvitation = { - lifecycleScope.launchCatching { - inventoryRepository.inviteToQuest(it) - MainNavigationController.navigate(R.id.partyFragment) - } + } + adapter?.onQuestInvitation = { + lifecycleScope.launchCatching { + inventoryRepository.inviteToQuest(it) + MainNavigationController.navigate(R.id.partyFragment) } - adapter?.onOpenMysteryItem = { - lifecycleScope.launchCatching { - val item = inventoryRepository.openMysteryItem(user) ?: return@launchCatching - val activity = activity as? MainActivity - if (activity != null) { - val dialog = OpenedMysteryitemDialog(activity) - dialog.isCelebratory = true - dialog.setTitle(R.string.mystery_item_title) - dialog.binding.iconView.loadImage("shop_${item.key}") - dialog.binding.titleView.text = item.text - dialog.binding.descriptionView.text = item.notes - dialog.addButton(R.string.equip, true) { _, _ -> - lifecycleScope.launchCatching { - item.key?.let { mysteryItem -> inventoryRepository.equip("equipped", mysteryItem) } - } + } + adapter?.onOpenMysteryItem = { + lifecycleScope.launchCatching { + val item = inventoryRepository.openMysteryItem(user) ?: return@launchCatching + val activity = activity as? MainActivity + if (activity != null) { + val dialog = OpenedMysteryitemDialog(activity) + dialog.isCelebratory = true + dialog.setTitle(R.string.mystery_item_title) + dialog.binding.iconView.loadImage("shop_${item.key}") + dialog.binding.titleView.text = item.text + dialog.binding.descriptionView.text = item.notes + dialog.addButton(R.string.equip, true) { _, _ -> + lifecycleScope.launchCatching { + item.key?.let { mysteryItem -> inventoryRepository.equip("equipped", mysteryItem) } } - dialog.addCloseButton() - dialog.enqueue() } + dialog.addCloseButton() + dialog.enqueue() } } - adapter?.onStartHatching = { showHatchingDialog(it) } - adapter?.onHatchPet = { pet, egg -> hatchPet(pet, egg) } - adapter?.onCreateNewParty = { createNewParty() } - adapter?.itemType = itemType ?: "" - adapter?.itemText = (if (itemType == "hatchingPotions") context?.getString(R.string.potions) else itemTypeText) ?: "" - adapter?.onOpenShop = { - Analytics.sendEvent("Items CTA tap", EventCategory.BEHAVIOUR, HitType.EVENT, mapOf( - "area" to "bottom", - "type" to (itemType ?: "") - )) - if (itemType == "quests") { - MainNavigationController.navigate(R.id.questShopFragment) - } else { - openMarket() - } + } + adapter?.onStartHatching = { showHatchingDialog(it) } + adapter?.onHatchPet = { pet, egg -> hatchPet(pet, egg) } + adapter?.onCreateNewParty = { createNewParty() } + adapter?.itemType = itemType ?: "" + adapter?.itemText = (if (itemType == "hatchingPotions") context?.getString(R.string.potions) else itemTypeText) ?: "" + adapter?.onOpenShop = { + Analytics.sendEvent("Items CTA tap", EventCategory.BEHAVIOUR, HitType.EVENT, mapOf( + "area" to "bottom", + "type" to (itemType ?: "") + )) + if (itemType == "quests") { + MainNavigationController.navigate(R.id.questShopFragment) + } else { + openMarket() } } } diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt index acc124aea..9f967e436 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt @@ -2,12 +2,24 @@ package com.habitrpg.common.habitica.extensions import android.text.SpannableStringBuilder import android.text.Spanned +import android.text.TextPaint import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan import android.text.style.URLSpan import android.view.View import android.widget.TextView +class HabiticaClickableSpan(val onClick: () -> Unit): ClickableSpan() { + override fun onClick(widget: View) { + onClick(widget) + } + + override fun updateDrawState(ds: TextPaint) { + super.updateDrawState(ds) + ds.isUnderlineText = false + } +} + fun TextView.handleUrlClicks(onClicked: ((String) -> Unit)? = null) { // create span builder and replaces current text with it text = SpannableStringBuilder.valueOf(text).apply { @@ -15,10 +27,8 @@ fun TextView.handleUrlClicks(onClicked: ((String) -> Unit)? = null) { getSpans(0, length, URLSpan::class.java).forEach { // add new clickable span at the same position setSpan( - object : ClickableSpan() { - override fun onClick(widget: View) { - onClicked?.invoke(it.url) - } + HabiticaClickableSpan { + onClicked?.invoke(it.url) }, getSpanStart(it), getSpanEnd(it), diff --git a/common/src/main/res/layout/empty_item.xml b/common/src/main/res/layout/empty_item.xml index 6a8febc0c..259fdb6fe 100644 --- a/common/src/main/res/layout/empty_item.xml +++ b/common/src/main/res/layout/empty_item.xml @@ -29,9 +29,10 @@