Improve mystery item feedback. Fixes #1188

This commit is contained in:
Phillip Thelen 2019-08-23 14:33:03 +02:00
parent 40c3665c3a
commit 2eec91d635
5 changed files with 25 additions and 17 deletions

View file

@ -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"/>
<LinearLayout
android:id="@+id/content_container"
android:layout_width="0dp"

View file

@ -956,4 +956,5 @@
<string name="remove_member_confirm">Are you sure you want to remove %s from the group?</string>
<string name="transfer">Transfer</string>
<string name="removed_member">%s was removed from the group</string>
<string name="mystery_item_received">You open the box and receive a %s</string>
</resources>

View file

@ -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) }))

View file

@ -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)
}

View file

@ -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<ImageView>(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)