Fix issues in shops

This commit is contained in:
Phillip Thelen 2019-04-26 12:57:44 +02:00
parent 8605667adf
commit b6cde7e535
8 changed files with 80 additions and 84 deletions

View file

@ -0,0 +1,10 @@
package com.habitrpg.android.habitica.extensions
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import io.reactivex.Flowable
import io.reactivex.disposables.Disposable
import io.reactivex.functions.Consumer
fun <T> Flowable<T>.subscribeWithErrorHandler(function: Consumer<T>): Disposable {
return subscribe(function, RxErrorHandler.handleEmptyError())
}

View file

@ -13,22 +13,22 @@ import android.graphics.drawable.BitmapDrawable
import android.os.Build
import android.os.Bundle
import android.preference.PreferenceManager
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.tabs.TabLayout
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import android.util.Log
import android.util.TypedValue
import android.view.*
import android.widget.FrameLayout
import android.widget.TextView
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.core.content.edit
import androidx.navigation.findNavController
import com.facebook.drawee.view.SimpleDraweeView
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.tabs.TabLayout
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.perf.FirebasePerformance
import com.habitrpg.android.habitica.HabiticaBaseApplication
@ -52,7 +52,6 @@ import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import com.habitrpg.android.habitica.ui.AvatarView
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel
import com.habitrpg.android.habitica.ui.TutorialView
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil
@ -62,13 +61,13 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.ValueBar
import com.habitrpg.android.habitica.ui.views.bottombar.BottomBar
import com.habitrpg.android.habitica.ui.views.yesterdailies.YesterdailyDialog
import com.habitrpg.android.habitica.userpicture.BitmapUtils
import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
import com.habitrpg.android.habitica.widget.DailiesWidgetProvider
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider
import com.habitrpg.android.habitica.ui.views.bottombar.BottomBar
import io.reactivex.Completable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Action
@ -77,7 +76,6 @@ import io.reactivex.schedulers.Schedulers
import io.realm.Realm
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import java.lang.ref.WeakReference
import java.util.*
import javax.inject.Inject
@ -141,7 +139,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
var user: User? = null
private var activeFragment: WeakReference<BaseMainFragment>? = null
private var avatarInHeader: AvatarWithBarsViewModel? = null
private var faintDialog: AlertDialog? = null
private var sideAvatarView: AvatarView? = null
@ -354,7 +351,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
preferences?.sound.notNull { soundManager.soundTheme = it }
runOnUiThread {
updateSidebar()
activeFragment?.get()?.updateUserData(user)
}
displayDeathDialogIfNeeded()
@ -425,7 +421,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
super.onBackPressed()
} catch (ignored: Exception) {
}
this.activeFragment?.get()?.updateUserData(user)
}
}

View file

@ -36,10 +36,6 @@ abstract class BaseMainFragment : BaseFragment() {
var usesBottomNavigation = false
open var user: User? = null
open fun updateUserData(user: User?) {
this.user = user
}
override fun onAttach(context: Context) {
super.onAttach(context)

View file

@ -1,14 +1,15 @@
package com.habitrpg.android.habitica.ui.fragments.inventory.customization
import android.os.Bundle
import androidx.recyclerview.widget.GridLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.GridLayoutManager
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.CustomizationRepository
import com.habitrpg.android.habitica.extensions.notNull
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.inventory.Customization
import com.habitrpg.android.habitica.models.responses.UnlockResponse
@ -100,12 +101,9 @@ class AvatarCustomizationFragment : BaseMainFragment() {
recyclerView.itemAnimator = SafeDefaultItemAnimator()
this.loadCustomizations()
this.updateActiveCustomization()
if (this.user != null) {
this.adapter.userSize = this.user?.preferences?.size
this.adapter.hairColor = this.user?.preferences?.hair?.color
this.adapter.gemBalance = user?.gemCount ?: 0
}
compositeSubscription.add(userRepository.getUser().subscribeWithErrorHandler(Consumer {
updateUser(it)
}))
}
override fun onDestroy() {
@ -142,21 +140,23 @@ class AvatarCustomizationFragment : BaseMainFragment() {
layoutManager.spanCount = spanCount
}
override fun updateUserData(user: User?) {
super.updateUserData(user)
this.adapter.gemBalance = user?.gemCount ?: 0
this.updateActiveCustomization()
fun updateUser(user: User) {
this.updateActiveCustomization(user)
if (adapter.customizationList.size != 0) {
val ownedCustomizations = ArrayList<String>()
user?.purchased?.customizations?.filter { it.type == this.type }?.mapTo(ownedCustomizations) { it.id }
user.purchased?.customizations?.filter { it.type == this.type }?.mapTo(ownedCustomizations) { it.id }
adapter.updateOwnership(ownedCustomizations)
} else {
this.loadCustomizations()
}
this.adapter.userSize = this.user?.preferences?.size
this.adapter.hairColor = this.user?.preferences?.hair?.color
this.adapter.gemBalance = user.gemCount
adapter.notifyDataSetChanged()
}
private fun updateActiveCustomization() {
if (this.type == null || user?.preferences == null) {
private fun updateActiveCustomization(user: User) {
if (this.type == null || user.preferences == null) {
return
}
val prefs = this.user?.preferences
@ -181,3 +181,4 @@ class AvatarCustomizationFragment : BaseMainFragment() {
}
}
}

View file

@ -7,6 +7,7 @@ import android.view.ViewGroup
import android.widget.AdapterView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.User
@ -24,11 +25,6 @@ class AvatarOverviewFragment : BaseMainFragment(), AdapterView.OnItemSelectedLis
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (this.user == null) {
return
}
this.setSize(this.user?.preferences?.size)
avatarSizeSpinner.onItemSelectedListener = this
avatarShirtView.setOnClickListener { displayCustomizationFragment("shirt", null) }
@ -42,31 +38,9 @@ class AvatarOverviewFragment : BaseMainFragment(), AdapterView.OnItemSelectedLis
avatarHairMustacheView.setOnClickListener { displayCustomizationFragment("hair", "mustache") }
avatarBackgroundView.setOnClickListener { displayCustomizationFragment("background", null) }
setCustomizations()
}
private fun setCustomizations() {
avatarShirtView.customizationIdentifier = user?.preferences?.size + "_shirt_" + user?.preferences?.shirt
avatarShirtView.equipmentName = user?.preferences?.shirt
avatarSkinView.customizationIdentifier = "skin_" + user?.preferences?.skin
avatarSkinView.equipmentName = user?.preferences?.skin
val chair = user?.preferences?.chair
avatarChairView.customizationIdentifier = if (chair?.startsWith("handleless") == true) "chair_$chair" else chair
avatarChairView.equipmentName = chair?.removePrefix("chair_")
avatarHairColorView.customizationIdentifier = if (user?.preferences?.hair?.color != null && user?.preferences?.hair?.color != "") "hair_bangs_1_" + user?.preferences?.hair?.color else ""
avatarHairColorView.equipmentName = user?.preferences?.hair?.color
avatarHairBangsView.customizationIdentifier = if (user?.preferences?.hair?.bangs != null && user?.preferences?.hair?.bangs != 0) "hair_bangs_" + user?.preferences?.hair?.bangs + "_" + user?.preferences?.hair?.color else ""
avatarHairBangsView.equipmentName = user?.preferences?.hair?.bangs.toString()
avatarHairBaseView.customizationIdentifier = if (user?.preferences?.hair?.base != null && user?.preferences?.hair?.base != 0) "hair_base_" + user?.preferences?.hair?.base + "_" + user?.preferences?.hair?.color else ""
avatarHairBaseView.equipmentName = user?.preferences?.hair?.base.toString()
avatarHairFlowerView.customizationIdentifier = if (user?.preferences?.hair?.flower != null && user?.preferences?.hair?.flower != 0) "hair_flower_" + user?.preferences?.hair?.flower else ""
avatarHairFlowerView.equipmentName = user?.preferences?.hair?.bangs.toString()
avatarHairBeardView.customizationIdentifier = if (user?.preferences?.hair?.beard != null && user?.preferences?.hair?.beard != 0) "hair_beard_" + user?.preferences?.hair?.beard + "_" + user?.preferences?.hair?.color else ""
avatarHairBeardView.equipmentName = user?.preferences?.hair?.beard.toString()
avatarHairMustacheView.customizationIdentifier = if (user?.preferences?.hair?.mustache != null && user?.preferences?.hair?.mustache != 0) "hair_mustache_" + user?.preferences?.hair?.mustache + "_" + user?.preferences?.hair?.color else ""
avatarHairMustacheView.equipmentName = user?.preferences?.hair?.mustache.toString()
avatarBackgroundView.customizationIdentifier = "background_" + user?.preferences?.background
avatarBackgroundView.equipmentName = user?.preferences?.background
compositeSubscription.add(userRepository.getUser().subscribeWithErrorHandler(Consumer {
updateUser(it)
}))
}
override fun injectFragment(component: AppComponent) {
@ -77,9 +51,33 @@ class AvatarOverviewFragment : BaseMainFragment(), AdapterView.OnItemSelectedLis
MainNavigationController.navigate(AvatarOverviewFragmentDirections.openAvatarDetail(type, category ?: ""))
}
override fun updateUserData(user: User?) {
super.updateUserData(user)
this.setSize(user?.preferences?.size)
fun updateUser(user: User) {
this.setSize(user.preferences?.size)
setCustomizations(user)
}
private fun setCustomizations(user: User) {
avatarShirtView.customizationIdentifier = user.preferences?.size + "_shirt_" + user.preferences?.shirt
avatarShirtView.equipmentName = user.preferences?.shirt
avatarSkinView.customizationIdentifier = "skin_" + user.preferences?.skin
avatarSkinView.equipmentName = user.preferences?.skin
val chair = user.preferences?.chair
avatarChairView.customizationIdentifier = if (chair?.startsWith("handleless") == true) "chair_$chair" else chair
avatarChairView.equipmentName = chair?.removePrefix("chair_")
avatarHairColorView.customizationIdentifier = if (user.preferences?.hair?.color != null && user.preferences?.hair?.color != "") "hair_bangs_1_" + user.preferences?.hair?.color else ""
avatarHairColorView.equipmentName = user.preferences?.hair?.color
avatarHairBangsView.customizationIdentifier = if (user.preferences?.hair?.bangs != null && user.preferences?.hair?.bangs != 0) "hair_bangs_" + user.preferences?.hair?.bangs + "_" + user.preferences?.hair?.color else ""
avatarHairBangsView.equipmentName = user.preferences?.hair?.bangs.toString()
avatarHairBaseView.customizationIdentifier = if (user.preferences?.hair?.base != null && user.preferences?.hair?.base != 0) "hair_base_" + user.preferences?.hair?.base + "_" + user.preferences?.hair?.color else ""
avatarHairBaseView.equipmentName = user.preferences?.hair?.base.toString()
avatarHairFlowerView.customizationIdentifier = if (user.preferences?.hair?.flower != null && user.preferences?.hair?.flower != 0) "hair_flower_" + user.preferences?.hair?.flower else ""
avatarHairFlowerView.equipmentName = user.preferences?.hair?.bangs.toString()
avatarHairBeardView.customizationIdentifier = if (user.preferences?.hair?.beard != null && user.preferences?.hair?.beard != 0) "hair_beard_" + user.preferences?.hair?.beard + "_" + user.preferences?.hair?.color else ""
avatarHairBeardView.equipmentName = user.preferences?.hair?.beard.toString()
avatarHairMustacheView.customizationIdentifier = if (user.preferences?.hair?.mustache != null && user.preferences?.hair?.mustache != 0) "hair_mustache_" + user.preferences?.hair?.mustache + "_" + user.preferences?.hair?.color else ""
avatarHairMustacheView.equipmentName = user.preferences?.hair?.mustache.toString()
avatarBackgroundView.customizationIdentifier = "background_" + user.preferences?.background
avatarBackgroundView.equipmentName = user.preferences?.background
}
private fun setSize(size: String?) {

View file

@ -1,10 +1,10 @@
package com.habitrpg.android.habitica.ui.fragments.inventory.shops
import android.os.Bundle
import androidx.recyclerview.widget.GridLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.GridLayoutManager
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.InventoryRepository
@ -234,6 +234,8 @@ class ShopFragment : BaseFragment() {
fun onItemPurchased(event: GearPurchasedEvent) {
if (Shop.MARKET == shopIdentifier) {
loadMarketGear()
} else if (Shop.TIME_TRAVELERS_SHOP == shopIdentifier) {
loadShopInventory()
}
}

View file

@ -1,17 +1,19 @@
package com.habitrpg.android.habitica.ui.fragments.inventory.shops
import android.os.Bundle
import androidx.fragment.app.FragmentPagerAdapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentPagerAdapter
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.views.CurrencyViews
import io.reactivex.functions.Consumer
import kotlinx.android.synthetic.main.fragment_viewpager.*
import javax.inject.Inject
@ -36,7 +38,8 @@ class ShopsFragment : BaseMainFragment() {
viewPager.currentItem = 0
setViewPagerAdapter()
toolbarAccessoryContainer?.addView(currencyView)
updateCurrencyView()
compositeSubscription.add(userRepository.getUser().subscribe(Consumer { updateCurrencyView(it) }, RxErrorHandler.handleEmptyError()))
}
override fun onDestroyView() {
@ -92,18 +95,9 @@ class ShopsFragment : BaseMainFragment() {
}
}
override fun updateUserData(user: User?) {
super.updateUserData(user)
updateCurrencyView()
}
private fun updateCurrencyView() {
if (user == null) {
return
}
currencyView.gold = user?.stats?.gp ?: 0.0
currencyView.gems = user?.gemCount?.toDouble() ?: 0.0
currencyView.hourglasses = user?.hourglassCount?.toDouble() ?: 0.0
private fun updateCurrencyView(user: User) {
currencyView.gold = user.stats?.gp ?: 0.0
currencyView.gems = user.gemCount.toDouble()
currencyView.hourglasses = user.hourglassCount?.toDouble() ?: 0.0
}
}

View file

@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.views.shops
import android.app.AlertDialog
import android.content.Context
import androidx.core.content.ContextCompat
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
@ -10,21 +9,22 @@ import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ScrollView
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.events.GearPurchasedEvent
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.ui.views.CurrencyView
import com.habitrpg.android.habitica.ui.views.CurrencyViews
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper