From 2eec91d635b49cdf8e2aa28f78f2877506a2637e Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 23 Aug 2019 14:33:03 +0200 Subject: [PATCH] Improve mystery item feedback. Fixes #1188 --- Habitica/res/layout/snackbar_view.xml | 4 ++- Habitica/res/values/strings.xml | 1 + .../inventory/items/ItemRecyclerFragment.kt | 26 ++++++++++++------- .../habitica/ui/views/EquipmentItemRow.kt | 3 +-- .../habitica/ui/views/HabiticaSnackbar.kt | 8 +++--- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Habitica/res/layout/snackbar_view.xml b/Habitica/res/layout/snackbar_view.xml index 010339170..e7d87bc7e 100644 --- a/Habitica/res/layout/snackbar_view.xml +++ b/Habitica/res/layout/snackbar_view.xml @@ -22,7 +22,9 @@ android:layout_width="@dimen/snackbar_image_size" android:background="@drawable/white_circle_background" android:visibility="gone" - tools:visibility="visible" /> + tools:visibility="visible" + android:layout_marginTop="6dp" + android:layout_marginBottom="6dp"/> Are you sure you want to remove %s from the group? Transfer %s was removed from the group + You open the box and receive a %s 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 89f464267..56e5ba09b 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 @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.items +import android.graphics.drawable.BitmapDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -20,10 +21,9 @@ import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter import com.habitrpg.android.habitica.ui.fragments.BaseFragment -import com.habitrpg.android.habitica.ui.helpers.RecyclerViewEmptySupport -import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator -import com.habitrpg.android.habitica.ui.helpers.bindView -import com.habitrpg.android.habitica.ui.helpers.resetViews +import com.habitrpg.android.habitica.ui.helpers.* +import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar +import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar import io.reactivex.functions.Consumer import javax.inject.Inject @@ -35,17 +35,17 @@ class ItemRecyclerFragment : BaseFragment() { lateinit var userRepository: UserRepository val recyclerView: RecyclerViewEmptySupport? by bindView(R.id.recyclerView) val emptyView: View? by bindView(R.id.emptyView) - val emptyTextView: TextView? by bindView(R.id.empty_text_view) + private val emptyTextView: TextView? by bindView(R.id.empty_text_view) val titleView: TextView? by bindView(R.id.titleTextView) - val footerView: TextView? by bindView(R.id.footerTextView) - val openMarketButton: Button? by bindView(R.id.openMarketButton) - val openEmptyMarketButton: Button? by bindView(R.id.openEmptyMarketButton) + private val footerView: TextView? by bindView(R.id.footerTextView) + private val openMarketButton: Button? by bindView(R.id.openMarketButton) + private val openEmptyMarketButton: Button? by bindView(R.id.openEmptyMarketButton) var adapter: ItemRecyclerAdapter? = null var itemType: String? = null var itemTypeText: String? = null var isHatching: Boolean = false var isFeeding: Boolean = false - var hatchingItem: Item? = null + private var hatchingItem: Item? = null var feedingPet: Pet? = null var user: User? = null internal var layoutManager: androidx.recyclerview.widget.LinearLayoutManager? = null @@ -103,6 +103,14 @@ class ItemRecyclerFragment : BaseFragment() { .subscribe(Consumer { MainNavigationController.navigate(R.id.partyFragment) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getOpenMysteryItemFlowable() .flatMap { inventoryRepository.openMysteryItem(user) } + .doOnNext { + val activity = activity as? MainActivity + if (activity != null) { + DataBindingUtils.loadImage("shop_${it.key}") {image -> + showSnackbar(activity.snackbarContainer, BitmapDrawable(context?.resources, image), null, getString(R.string.mystery_item_received, it.text), HabiticaSnackbar.SnackbarDisplayType.NORMAL) + } + } + } .flatMap { userRepository.retrieveUser(false) } .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.startHatchingEvents.subscribeWithErrorHandler(Consumer { showHatchingDialog(it) })) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EquipmentItemRow.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EquipmentItemRow.kt index 67b541840..8e50fe6bd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EquipmentItemRow.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EquipmentItemRow.kt @@ -5,7 +5,6 @@ import android.util.AttributeSet import android.view.View import android.widget.LinearLayout import com.habitrpg.android.habitica.R -import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import kotlinx.android.synthetic.main.item_image_row.view.* @@ -14,7 +13,7 @@ class EquipmentItemRow(context: Context?, attrs: AttributeSet?) : LinearLayout(c var equipmentIdentifier: String? = null set(value) { field = value - val imageName = if (equipmentIdentifier?.isNotEmpty() == true && equipmentIdentifier?.endsWith("base_0") == false) "shop_"+equipmentIdentifier else "head_0" + val imageName = if (equipmentIdentifier?.isNotEmpty() == true && equipmentIdentifier?.endsWith("base_0") == false) "shop_$equipmentIdentifier" else "head_0" DataBindingUtils.loadImage(imageView, imageName) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt index 8b960c502..1a3333ae8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt @@ -53,11 +53,9 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb } fun setLeftIcon(image: Drawable?): HabiticaSnackbar { - if (image == null) { - return this - } val imageView = view.findViewById(R.id.leftImageView) imageView.setImageDrawable(image) + imageView.visibility = if (image != null) View.VISIBLE else View.GONE return this } @@ -122,7 +120,7 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb showSnackbar(container, null, null, content, null, null, 0, null, displayType) } - fun showSnackbar(container: ViewGroup, leftImage: Drawable, title: CharSequence, content: CharSequence, displayType: SnackbarDisplayType) { + fun showSnackbar(container: ViewGroup, leftImage: Drawable, title: CharSequence?, content: CharSequence?, displayType: SnackbarDisplayType) { showSnackbar(container, leftImage, title, content, null, null, 0, null, displayType) } @@ -136,7 +134,7 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb } fun showSnackbar(container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int, rightText: String?, displayType: SnackbarDisplayType) { - val snackbar = HabiticaSnackbar.make(container, Snackbar.LENGTH_LONG) + val snackbar = make(container, Snackbar.LENGTH_LONG) .setTitle(title) .setText(content) .setSpecialView(specialView)