Fully remove eventbus

This commit is contained in:
Phillip Thelen 2022-01-13 15:33:07 +01:00
parent bfe0d3da71
commit bc7a9ebad4
27 changed files with 134 additions and 286 deletions

View file

@ -62,8 +62,7 @@ dependencies {
implementation "io.noties.markwon:ext-strikethrough:4.6.2"
implementation "io.noties.markwon:image:4.6.2"
implementation "io.noties.markwon:recycler:4.6.2"
//Eventbus
implementation 'org.greenrobot:eventbus:3.3.1'
// IAP Handling / Verification
implementation "com.android.billingclient:billing-ktx:4.0.0"
//Facebook
@ -158,7 +157,7 @@ android {
buildConfigField "String", "TESTING_LEVEL", "\"production\""
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
versionCode 3200
versionCode 3207
versionName "3.5"
targetSdkVersion 32
@ -206,7 +205,7 @@ android {
}
release {
signingConfig signingConfigs.release
debuggable true
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

View file

@ -74,17 +74,6 @@
-dontwarn javax.**
-dontwarn io.realm.**
#eventbus
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
#crashlytic
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception

View file

@ -40,7 +40,6 @@ import okhttp3.Cache
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor
import org.greenrobot.eventbus.EventBus
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory

View file

@ -1,5 +0,0 @@
package com.habitrpg.android.habitica.events
import com.habitrpg.android.habitica.models.shops.ShopItem
class GearPurchasedEvent(val item: ShopItem)

View file

@ -1,37 +0,0 @@
package com.habitrpg.android.habitica.events
import android.graphics.drawable.Drawable
import android.view.View
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import org.greenrobot.eventbus.EventBus
/**
* Created by phillip on 26.06.17.
*/
class ShowSnackbarEvent {
constructor(title: String?, type: SnackbarDisplayType) {
this.title = title
this.type = type
}
constructor(title: String?, text: String?, type: SnackbarDisplayType) {
this.title = title
this.text = text
this.type = type
}
constructor()
var leftImage: Drawable? = null
var title: String? = null
var text: String? = null
var type: SnackbarDisplayType = SnackbarDisplayType.NORMAL
var specialView: View? = null
var rightIcon: Drawable? = null
var rightTextColor = 0
var rightText: String? = null
fun post() {
EventBus.getDefault().post(this)
}
}

View file

@ -1,6 +0,0 @@
package com.habitrpg.android.habitica.events.commands
import com.habitrpg.android.habitica.models.inventory.Food
import com.habitrpg.android.habitica.models.inventory.Pet
class FeedCommand(val usingPet: Pet?, val usingFood: Food?)

View file

@ -1,32 +1,13 @@
package com.habitrpg.android.habitica.helpers
import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.events.*
import com.habitrpg.android.habitica.models.Notification
import com.habitrpg.android.habitica.models.notifications.AchievementData
import com.habitrpg.android.habitica.models.notifications.ChallengeWonData
import com.habitrpg.android.habitica.models.notifications.FirstDropData
import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.WonChallengeDialog
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.BehaviorSubject
import io.reactivex.rxjava3.subjects.PublishSubject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import java.lang.ref.WeakReference
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.coroutines.CoroutineContext
class NotificationsManager {
private val displayNotificationSubject = PublishSubject.create<Notification>()

View file

@ -6,11 +6,8 @@ import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.lifecycleScope
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.events.*
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.Notification
import com.habitrpg.android.habitica.models.notifications.AchievementData
import com.habitrpg.android.habitica.models.notifications.ChallengeWonData
@ -19,17 +16,14 @@ import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog
import com.habitrpg.android.habitica.ui.views.dialogs.FirstDropDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.WonChallengeDialog
import io.reactivex.rxjava3.core.Completable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import java.util.concurrent.TimeUnit
class ShowNotificationInteractor(private val activity: Activity, private val lifecycleScope: LifecycleCoroutineScope) {
@ -77,7 +71,6 @@ class ShowNotificationInteractor(private val activity: Activity, private val lif
}
}
@Subscribe
fun showCheckinDialog(notification: Notification) {
val notificationData = notification.data as? LoginIncentiveData
val nextUnlockText = activity.getString(R.string.nextPrizeUnlocks, notificationData?.nextRewardAt)
@ -113,15 +106,14 @@ class ShowNotificationInteractor(private val activity: Activity, private val lif
alert.show()
}
} else {
val event = ShowSnackbarEvent()
event.title = notificationData?.message
event.text = nextUnlockText
event.type = HabiticaSnackbar.SnackbarDisplayType.BLUE
EventBus.getDefault().post(event)
(activity as? SnackbarActivity)?.showSnackbar(
title = notificationData?.message,
content = nextUnlockText,
displayType = HabiticaSnackbar.SnackbarDisplayType.BLUE
)
}
}
@Subscribe
fun showAchievementDialog(notification: Notification) {
val data = (notification.data as? AchievementData) ?: return
val achievement = data.achievement ?: notification.type ?: ""

View file

@ -37,7 +37,6 @@ import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.userpicture.BitmapUtils
import io.reactivex.rxjava3.disposables.CompositeDisposable
import org.greenrobot.eventbus.EventBus
import java.util.*
import javax.inject.Inject
@ -106,11 +105,6 @@ abstract class BaseActivity : AppCompatActivity() {
resources.forceLocale(this, languageHelper.locale)
}
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
override fun onResume() {
super.onResume()
isActivityVisible = true
@ -122,13 +116,6 @@ abstract class BaseActivity : AppCompatActivity() {
super.onPause()
}
override fun onStop() {
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this)
}
super.onStop()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {

View file

@ -17,9 +17,7 @@ import android.view.*
import android.widget.FrameLayout
import android.widget.ImageView
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.core.content.FileProvider
import androidx.core.content.edit
import androidx.core.os.bundleOf
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavDestination
@ -35,8 +33,6 @@ import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.*
import com.habitrpg.android.habitica.data.local.UserQuestStatus
import com.habitrpg.android.habitica.databinding.ActivityMainBinding
import com.habitrpg.android.habitica.events.*
import com.habitrpg.android.habitica.events.commands.FeedCommand
import com.habitrpg.android.habitica.extensions.*
import com.habitrpg.android.habitica.helpers.*
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
@ -45,25 +41,22 @@ import com.habitrpg.android.habitica.interactors.DisplayItemDropUseCase
import com.habitrpg.android.habitica.interactors.NotifyUserUseCase
import com.habitrpg.android.habitica.models.TutorialStep
import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.Food
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
import com.habitrpg.android.habitica.models.inventory.Pet
import com.habitrpg.android.habitica.models.responses.MaintenanceResponse
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.proxy.AnalyticsManager
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.NavigationDrawerFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
import com.habitrpg.android.habitica.ui.views.AdventureGuideDrawerArrowDrawable
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.*
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.ValueBar
import com.habitrpg.android.habitica.ui.views.dialogs.*
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
@ -73,13 +66,11 @@ import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.rxjava3.schedulers.Schedulers
import io.realm.kotlin.isValid
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction, SnackbarActivity {
private var launchScreen: String? = null
private lateinit var drawerIcon: AdventureGuideDrawerArrowDrawable
@ -510,14 +501,9 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
super.onDestroy()
}
@Subscribe
fun onEvent(event: FeedCommand) {
if (event.usingFood == null || event.usingPet == null) {
return
}
val pet = event.usingPet
fun feedPet(pet: Pet, food: Food) {
compositeSubscription.add(
this.inventoryRepository.feedPet(event.usingPet, event.usingFood)
this.inventoryRepository.feedPet(pet, food)
.subscribe(
{ feedResponse ->
HabiticaSnackbar.showSnackbar(snackbarContainer, feedResponse.message, SnackbarDisplayType.NORMAL)
@ -525,7 +511,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
val mountWrapper = View.inflate(this, R.layout.pet_imageview, null) as? FrameLayout
val mountImageView = mountWrapper?.findViewById(R.id.pet_imageview) as? ImageView
DataBindingUtils.loadImage(mountImageView, "Mount_Icon_" + event.usingPet.key)
DataBindingUtils.loadImage(mountImageView, "Mount_Icon_" + pet.key)
val dialog = HabiticaAlertDialog(this@MainActivity)
dialog.setTitle(getString(R.string.evolved_pet_title, pet.text))
dialog.setAdditionalContentView(mountWrapper)
@ -738,9 +724,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
return intent
}
@Subscribe
fun showSnackBarEvent(event: ShowSnackbarEvent) {
HabiticaSnackbar.showSnackbar(snackbarContainer, event.leftImage, event.title, event.text, event.specialView, event.rightIcon, event.rightTextColor, event.rightText, event.type)
override fun snackbarContainer(): ViewGroup {
return snackbarContainer
}
override fun showConnectionProblem(title: String?, message: String) {

View file

@ -1,16 +1,15 @@
package com.habitrpg.android.habitica.ui.activities
import android.os.Bundle
import android.view.ViewGroup
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.ui.fragments.preferences.*
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import org.greenrobot.eventbus.Subscribe
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback, SnackbarActivity {
override fun getLayoutResId(): Int = R.layout.activity_prefs
@ -54,11 +53,6 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
return false
}
@Subscribe
fun showSnackBarEvent(event: ShowSnackbarEvent) {
HabiticaSnackbar.showSnackbar(findViewById(R.id.snackbar_container), event.leftImage, event.title, event.text, event.specialView, event.rightIcon, event.rightTextColor, event.rightText, event.type)
}
private fun createNextPage(preferenceScreen: PreferenceScreen): PreferenceFragmentCompat? =
when (preferenceScreen.key) {
"my_account" -> AccountPreferenceFragment()
@ -66,4 +60,9 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
"emailNotifications" -> EmailNotificationsPreferencesFragment()
else -> null
}
override fun snackbarContainer(): ViewGroup {
val v = findViewById<ViewGroup>(R.id.snackbar_container)
return v
}
}

View file

@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ItemItemBinding
import com.habitrpg.android.habitica.events.commands.FeedCommand
import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.OwnedItem
@ -21,7 +20,6 @@ import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import org.greenrobot.eventbus.EventBus
import java.text.SimpleDateFormat
import java.util.*
@ -45,6 +43,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter<OwnedI
private val openMysteryItemEvents = PublishSubject.create<Item>()
private val startHatchingSubject = PublishSubject.create<Item>()
private val hatchPetSubject = PublishSubject.create<Pair<HatchingPotion, Egg>>()
private val feedPetSubject = PublishSubject.create<Food>()
fun getSellItemFlowable(): Flowable<OwnedItem> {
return sellItemEvents.toFlowable(BackpressureStrategy.DROP)
@ -59,6 +58,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter<OwnedI
val startHatchingEvents: Flowable<Item> = startHatchingSubject.toFlowable(BackpressureStrategy.DROP)
val hatchPetEvents: Flowable<Pair<HatchingPotion, Egg>> = hatchPetSubject.toFlowable(BackpressureStrategy.DROP)
val feedPetEvents: Flowable<Food> = feedPetSubject.toFlowable(BackpressureStrategy.DROP)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
return ItemViewHolder(ItemItemBinding.inflate(context.layoutInflater, parent, false))
@ -166,9 +166,6 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter<OwnedI
}
when (selectedItem) {
is Egg -> item?.let { startHatchingSubject.onNext(it) }
is Food -> {
EventBus.getDefault().post(FeedCommand(null, selectedItem))
}
is HatchingPotion -> startHatchingSubject.onNext(selectedItem)
is QuestContent -> {
if (index == 0) {
@ -201,7 +198,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter<OwnedI
return@let
}
} else if (isFeeding) {
EventBus.getDefault().post(FeedCommand(feedingPet, item as? Food))
feedPetSubject.onNext(item as Food?)
fragment?.dismiss()
}
}

View file

@ -19,6 +19,7 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt
private var ownedItems: Map<String, OwnedItem>? = null
private var user: User? = null
private val equipEvents = PublishSubject.create<String>()
private val feedEvents = PublishSubject.create<Pair<Pet, Food?>>()
private var ownsSaddles: Boolean = false
private var itemList: List<Any> = ArrayList()
@ -37,6 +38,8 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt
return equipEvents.toFlowable(BackpressureStrategy.DROP)
}
var feedFlowable: Flowable<Pair<Pet, Food?>> = feedEvents.toFlowable(BackpressureStrategy.DROP)
var animalIngredientsRetriever: ((Animal, ((Pair<Egg?, HatchingPotion?>) -> Unit)) -> Unit)? = null
private fun canRaiseToMount(pet: Pet): Boolean {
@ -59,7 +62,7 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder =
when (viewType) {
1 -> SectionViewHolder(parent)
else -> PetViewHolder(parent, equipEvents, animalIngredientsRetriever)
else -> PetViewHolder(parent, equipEvents, feedEvents, animalIngredientsRetriever)
}
override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) {

View file

@ -29,6 +29,7 @@ class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var shopSpriteSuffix: String? = null
private var eggs: Map<String, Egg> = mapOf()
var animalIngredientsRetriever: ((Animal, ((Pair<Egg?, HatchingPotion?>) -> Unit)) -> Unit)? = null
private val feedEvents = PublishSubject.create<Pair<Pet, Food?>>()
var itemType: String? = null
private var user: User? = null
private val equipEvents = PublishSubject.create<String>()
@ -91,7 +92,7 @@ class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
1 -> SectionViewHolder(parent)
4 -> StableViewHolder(parent.inflate(R.layout.pet_overview_item))
5 -> StableViewHolder(parent.inflate(R.layout.mount_overview_item))
2 -> PetViewHolder(parent, equipEvents, animalIngredientsRetriever)
2 -> PetViewHolder(parent, equipEvents, feedEvents, animalIngredientsRetriever)
3 -> MountViewHolder(parent, equipEvents)
else -> StableHeaderViewHolder(parent)
}

View file

@ -15,8 +15,6 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.functions.Consumer
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.EventBusException
import java.util.ArrayList
import java.util.HashMap
import java.util.concurrent.TimeUnit
@ -52,12 +50,6 @@ abstract class BaseDialogFragment<VB : ViewBinding> : DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
compositeSubscription = CompositeDisposable()
// Receive Events
try {
EventBus.getDefault().register(this)
} catch (ignored: EventBusException) {
}
val additionalData = HashMap<String, Any>()
additionalData["page"] = this.javaClass.simpleName
AmplitudeManager.sendEvent("navigate", AmplitudeManager.EVENT_CATEGORY_NAVIGATION, AmplitudeManager.EVENT_HITTYPE_PAGEVIEW, additionalData)
@ -100,9 +92,6 @@ abstract class BaseDialogFragment<VB : ViewBinding> : DialogFragment() {
override fun onDestroyView() {
binding = null
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this)
}
if (!compositeSubscription.isDisposed) {
compositeSubscription.dispose()
}

View file

@ -14,8 +14,6 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.functions.Consumer
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.EventBusException
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@ -57,12 +55,6 @@ abstract class BaseFragment<VB : ViewBinding> : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
compositeSubscription = CompositeDisposable()
// Receive Events
try {
EventBus.getDefault().register(this)
} catch (ignored: EventBusException) {
}
binding = createBinding(inflater, container)
return binding?.root
}
@ -101,9 +93,6 @@ abstract class BaseFragment<VB : ViewBinding> : Fragment() {
override fun onDestroyView() {
binding = null
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this)
}
if (!compositeSubscription.isDisposed) {
compositeSubscription.dispose()
}

View file

@ -151,6 +151,7 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsBinding>(), SwipeRefr
.subscribe({ }, RxErrorHandler.handleEmptyError())
)
compositeSubscription.add(adapter.hatchPetEvents.subscribeWithErrorHandler { hatchPet(it.first, it.second) })
compositeSubscription.add(adapter.feedPetEvents.subscribeWithErrorHandler { feedPet(it) })
}
}
activity?.let {
@ -194,6 +195,10 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsBinding>(), SwipeRefr
this.loadItems()
}
private fun feedPet(food: Food) {
feedingPet?.let { (activity as? MainActivity)?.feedPet(it, food) }
}
override fun onResume() {
if ((this.isHatching || this.isFeeding) && dialog?.window != null) {
val params = dialog?.window?.attributes

View file

@ -12,7 +12,6 @@ import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.events.GearPurchasedEvent
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.shops.Shop
@ -25,7 +24,6 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.RecyclerViewState
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.views.CurrencyViews
import org.greenrobot.eventbus.Subscribe
import javax.inject.Inject
open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>() {

View file

@ -9,23 +9,17 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.events.commands.FeedCommand
import com.habitrpg.android.habitica.extensions.getTranslatedType
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
import com.habitrpg.android.habitica.models.inventory.Pet
import com.habitrpg.android.habitica.models.inventory.StableSection
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment
import com.habitrpg.android.habitica.ui.helpers.MarginDecoration
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.kotlin.Flowables
import org.greenrobot.eventbus.Subscribe
import javax.inject.Inject
class PetDetailRecyclerFragment :
@ -117,6 +111,7 @@ class PetDetailRecyclerFragment :
RxErrorHandler.handleEmptyError()
)
)
compositeSubscription.add(adapter.feedFlowable.subscribe({ showFeedingDialog(it.first, it.second) }, RxErrorHandler.handleEmptyError()))
view.post { setGridSpanCount(view.width) }
}
@ -195,17 +190,18 @@ class PetDetailRecyclerFragment :
}
}
@Subscribe
fun showFeedingDialog(event: FeedCommand) {
if (event.usingPet == null || event.usingFood == null) {
val fragment = ItemDialogFragment()
fragment.feedingPet = event.usingPet
fragment.isFeeding = true
fragment.isHatching = false
fragment.itemType = "food"
fragment.itemTypeText = getString(R.string.food)
parentFragmentManager.let { fragment.show(it, "feedDialog") }
private fun showFeedingDialog(pet: Pet, food: Food?) {
if (food != null) {
activity?.feedPet(pet, food)
return
}
val fragment = ItemDialogFragment()
fragment.feedingPet = pet
fragment.isFeeding = true
fragment.isHatching = false
fragment.itemType = "food"
fragment.itemTypeText = getString(R.string.food)
parentFragmentManager.let { fragment.show(it, "feedDialog") }
}
companion object {

View file

@ -1,20 +1,17 @@
package com.habitrpg.android.habitica.ui.fragments.preferences
import android.R.attr
import android.accounts.AccountManager
import android.app.Activity
import android.content.*
import android.os.Bundle
import android.text.InputType
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.getSystemService
import androidx.core.util.PatternsCompat
import androidx.core.widget.addTextChangedListener
import androidx.core.widget.doAfterTextChanged
import androidx.preference.EditTextPreference
import androidx.preference.Preference
import com.google.android.material.textfield.TextInputLayout
@ -22,7 +19,6 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.api.HostConfig
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.layoutInflater
@ -33,17 +29,11 @@ import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil
import com.habitrpg.android.habitica.ui.viewmodels.AuthenticationViewModel
import com.habitrpg.android.habitica.ui.views.ExtraLabelPreference
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.ValidatingEditText
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import org.greenrobot.eventbus.EventBus
import javax.inject.Inject
import android.R.attr.label
import android.content.*
import androidx.core.content.ContextCompat.getSystemService
class AccountPreferenceFragment: BasePreferencesFragment(),
@ -235,14 +225,17 @@ class AccountPreferenceFragment: BasePreferencesFragment(),
}
private fun displayAuthenticationSuccess(network: String) {
ShowSnackbarEvent(null, context?.getString(R.string.added_social_auth, network), HabiticaSnackbar.SnackbarDisplayType.SUCCESS).post()
(activity as? SnackbarActivity)?.showSnackbar(
content = context?.getString(R.string.added_social_auth, network),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
}
private fun displayDisconnectSuccess(network: String) {
val event = ShowSnackbarEvent()
event.text = context?.getString(R.string.removed_social_auth, network)
event.type = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
EventBus.getDefault().post(event)
(activity as? SnackbarActivity)?.showSnackbar(
content = context?.getString(R.string.removed_social_auth, network),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
}
private val recoverFromPlayServicesErrorResult = registerForActivityResult(
@ -289,7 +282,10 @@ class AccountPreferenceFragment: BasePreferencesFragment(),
.flatMap { userRepository.retrieveUser(true, true) }
.subscribe(
{
ShowSnackbarEvent(null, context.getString(R.string.password_changed), HabiticaSnackbar.SnackbarDisplayType.SUCCESS).post()
(activity as? SnackbarActivity)?.showSnackbar(
content = context.getString(R.string.password_changed),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
},
RxErrorHandler.handleEmptyError()
)
@ -333,7 +329,10 @@ class AccountPreferenceFragment: BasePreferencesFragment(),
.flatMap { userRepository.retrieveUser(true, true) }
.subscribe(
{
ShowSnackbarEvent(null, context.getString(R.string.password_added), HabiticaSnackbar.SnackbarDisplayType.SUCCESS).post()
(activity as? SnackbarActivity)?.showSnackbar(
content = context.getString(R.string.password_added),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
},
RxErrorHandler.handleEmptyError()
)
@ -487,10 +486,10 @@ class AccountPreferenceFragment: BasePreferencesFragment(),
private fun copyValue(name: String, value: CharSequence?) {
val clipboard: ClipboardManager? = context?.let { getSystemService(it, ClipboardManager::class.java) }
clipboard?.setPrimaryClip(ClipData.newPlainText(name, value))
val event = ShowSnackbarEvent()
event.text = context?.getString(R.string.copied_to_clipboard, name)
event.type = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
EventBus.getDefault().post(event)
(activity as? SnackbarActivity)?.showSnackbar(
content = context?.getString(R.string.copied_to_clipboard),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
}
override fun onSharedPreferenceChanged(p0: SharedPreferences?, p1: String?) {

View file

@ -16,19 +16,17 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.helpers.*
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.prefs.TimePreference
import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity
import com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.activities.PrefsActivity
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import org.greenrobot.eventbus.EventBus
import java.util.*
import javax.inject.Inject
@ -135,16 +133,15 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
return true
}
"reload_content" -> {
val event = ShowSnackbarEvent()
event.text = context?.getString(R.string.reloading_content)
event.type = HabiticaSnackbar.SnackbarDisplayType.NORMAL
EventBus.getDefault().post(event)
(activity as? SnackbarActivity)?.showSnackbar(
content = context?.getString(R.string.reloading_content)
)
contentRepository.retrieveContent(context, true).subscribe(
{
val completedEvent = ShowSnackbarEvent()
completedEvent.text = context?.getString(R.string.reloaded_content)
completedEvent.type = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
EventBus.getDefault().post(completedEvent)
(activity as? SnackbarActivity)?.showSnackbar(
content = context?.getString(R.string.reloaded_content),
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
},
RxErrorHandler.handleEmptyError()
)

View file

@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ChatItemBinding
import com.habitrpg.android.habitica.databinding.TavernChatIntroItemBinding
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.getAgoString
import com.habitrpg.android.habitica.extensions.setScaledPadding
@ -24,10 +23,10 @@ import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.helpers.setParsedMarkdown
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.schedulers.Schedulers
import org.greenrobot.eventbus.EventBus
open class ChatRecyclerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
@ -75,10 +74,10 @@ class ChatRecyclerMessageViewHolder(itemView: View, private var userId: String,
if (it.uuid != userId) {
onLikeMessage?.invoke(it)
} else {
val event = ShowSnackbarEvent()
event.text = context.getString(R.string.cant_like_own_message)
event.type = HabiticaSnackbar.SnackbarDisplayType.FAILURE
EventBus.getDefault().post(event)
(context as? SnackbarActivity)?.showSnackbar(
content = context.getString(R.string.cant_like_own_message),
displayType = HabiticaSnackbar.SnackbarDisplayType.FAILURE
)
}
}
}

View file

@ -7,7 +7,6 @@ import android.view.ViewGroup
import androidx.core.graphics.drawable.toBitmap
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.PetDetailItemBinding
import com.habitrpg.android.habitica.events.commands.FeedCommand
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.User
@ -16,9 +15,8 @@ import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
import com.habitrpg.android.habitica.ui.views.dialogs.PetSuggestHatchDialog
import io.reactivex.rxjava3.subjects.PublishSubject
import org.greenrobot.eventbus.EventBus
class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject<String>, private val animalIngredientsRetriever: ((Animal, ((Pair<Egg?, HatchingPotion?>) -> Unit)) -> Unit)?) : androidx.recyclerview.widget.RecyclerView.ViewHolder(parent.inflate(R.layout.pet_detail_item)), View.OnClickListener {
class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject<String>, private val feedEvents: PublishSubject<Pair<Pet, Food?>>, private val animalIngredientsRetriever: ((Animal, ((Pair<Egg?, HatchingPotion?>) -> Unit)) -> Unit)?) : androidx.recyclerview.widget.RecyclerView.ViewHolder(parent.inflate(R.layout.pet_detail_item)), View.OnClickListener {
private var hasMount: Boolean = false
private var hasUnlockedPotion: Boolean = false
private var hasUnlockedEgg: Boolean = false
@ -123,6 +121,7 @@ class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject<S
}
}
menu.setSelectionRunnable { index ->
val pet = animal as? Pet ?: return@setSelectionRunnable
when (index) {
0 -> {
animal?.let {
@ -130,12 +129,12 @@ class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject<S
}
}
1 -> {
EventBus.getDefault().post(FeedCommand(animal, null))
feedEvents.onNext(Pair(pet, null))
}
2 -> {
val saddle = Food()
saddle.key = "Saddle"
EventBus.getDefault().post(FeedCommand(animal, saddle))
feedEvents.onNext(Pair(pet, saddle))
}
}
}

View file

@ -3,14 +3,11 @@ package com.habitrpg.android.habitica.ui.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
import com.habitrpg.android.habitica.extensions.filterOptionalDoOnEmpty
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.BackpressureStrategy
import org.greenrobot.eventbus.EventBus
class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeComponent) {
constructor() : this(true)
@ -56,12 +53,7 @@ class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeCo
.flatMap { userRepository.retrieveUser() }
.flatMap { socialRepository.retrieveGroup(groupID) }
.subscribe(
{
val event = ShowSnackbarEvent()
event.type = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
event.text = "Quest invitation accepted"
EventBus.getDefault().post(event)
},
{},
RxErrorHandler.handleEmptyError()
)
)
@ -75,12 +67,7 @@ class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeCo
.flatMap { userRepository.retrieveUser() }
.flatMap { socialRepository.retrieveGroup(groupID) }
.subscribe(
{
val event = ShowSnackbarEvent()
event.type = HabiticaSnackbar.SnackbarDisplayType.FAILURE
event.text = "Quest invitation rejected"
EventBus.getDefault().post(event)
},
{},
RxErrorHandler.handleEmptyError()
)
)

View file

@ -125,7 +125,7 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb
showSnackbar(container, leftImage, title, content, null, null, 0, null, displayType, isCelebratory)
}
fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, rightIcon: Drawable, rightTextColor: Int, rightText: String, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) {
fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, rightIcon: Drawable, rightTextColor: Int?, rightText: String, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) {
showSnackbar(container, null, title, content, null, rightIcon, rightTextColor, rightText, displayType, isCelebratory)
}
@ -133,13 +133,15 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb
showSnackbar(container, null, title, content, specialView, null, 0, null, displayType, isCelebratory)
}
fun showSnackbar(container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int, rightText: String?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) {
fun showSnackbar(container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int?, rightText: String?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) {
val snackbar = make(container, Snackbar.LENGTH_LONG)
.setTitle(title)
.setText(content)
.setSpecialView(specialView)
.setLeftIcon(leftImage)
.setRightDiff(rightIcon, rightTextColor, rightText)
rightTextColor?.let {
snackbar.setRightDiff(rightIcon, rightTextColor, rightText)
}
when (displayType) {
SnackbarDisplayType.FAILURE -> snackbar.setBackgroundResource(R.drawable.snackbar_background_red)
@ -184,3 +186,22 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb
}
}
}
interface SnackbarActivity {
fun snackbarContainer(): ViewGroup
fun showSnackbar(
leftImage: Drawable? = null,
title: CharSequence? = null,
content: CharSequence? = null,
specialView: View? = null,
rightIcon: Drawable? = null,
rightTextColor: Int? = null,
rightText: String? = null,
displayType: HabiticaSnackbar.SnackbarDisplayType = HabiticaSnackbar.SnackbarDisplayType.NORMAL,
isCelebratory: Boolean = false
) {
HabiticaSnackbar.showSnackbar(snackbarContainer(), leftImage, title, content, specialView, rightIcon, rightTextColor, rightText, displayType, isCelebratory)
}
}

View file

@ -19,7 +19,6 @@ import com.habitrpg.android.habitica.proxy.AnalyticsManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import javax.inject.Inject
/**
@ -86,13 +85,5 @@ class InsufficientGemsDialog(context: Context, var gemPrice: Int) : Insufficient
addButton(R.string.purchase_gems, false) { _, _ -> MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false))) }
}
}
EventBus.getDefault().register(this)
}
override fun onDetachedFromWindow() {
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this)
}
super.onDetachedFromWindow()
}
}

View file

@ -15,8 +15,6 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
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.extensions.addCancelButton
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.extensions.getShortRemainingString
@ -28,10 +26,7 @@ import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.CurrencyView
import com.habitrpg.android.habitica.ui.views.CurrencyViews
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.*
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGoldDialog
@ -42,14 +37,11 @@ import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.disposables.CompositeDisposable
import kotlinx.coroutines.*
import org.greenrobot.eventbus.EventBus
import java.util.*
import javax.inject.Inject
import kotlin.math.max
import kotlin.time.Duration
import kotlin.time.ExperimentalTime
import kotlin.time.minutes
import kotlin.time.seconds
class PurchaseDialog(context: Context, component: UserComponent?, val item: ShopItem) : HabiticaAlertDialog(context) {
@ -370,21 +362,23 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
}
val subscription = observable
.doOnNext {
val event = ShowSnackbarEvent()
if (snackbarText[0].isNotEmpty()) {
event.text = snackbarText[0]
val text = if (snackbarText[0].isNotEmpty()) {
snackbarText[0]
} else {
event.text = context.getString(R.string.successful_purchase, shopItem.text)
context.getString(R.string.successful_purchase, shopItem.text)
}
event.type = HabiticaSnackbar.SnackbarDisplayType.NORMAL
event.rightIcon = priceLabel.compoundDrawables[0]
when (item.currency) {
"gold" -> event.rightTextColor = ContextCompat.getColor(context, R.color.text_yellow)
"gems" -> event.rightTextColor = ContextCompat.getColor(context, R.color.text_green)
"hourglasses" -> event.rightTextColor = ContextCompat.getColor(context, R.color.text_brand)
val rightTextColor = when (item.currency) {
"gold" -> ContextCompat.getColor(context, R.color.text_yellow)
"gems" -> ContextCompat.getColor(context, R.color.text_green)
"hourglasses" -> ContextCompat.getColor(context, R.color.text_brand)
else -> 0
}
event.rightText = "-" + priceLabel.text
EventBus.getDefault().post(event)
(ownerActivity as? SnackbarActivity)?.showSnackbar(
content = text,
rightIcon = priceLabel.compoundDrawables[0],
rightTextColor = rightTextColor,
rightText = "-" + priceLabel.text
)
}
.flatMap { userRepository.retrieveUser(withTasks = false, forced = true) }
.flatMap { inventoryRepository.retrieveInAppRewards() }