From bc7a9ebad4de08b5f06ee5840bc886bb7bd658ea Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 13 Jan 2022 15:33:07 +0100 Subject: [PATCH] Fully remove eventbus --- Habitica/build.gradle | 7 ++- Habitica/proguard-rules.pro | 11 ----- .../data/implementation/ApiClientImpl.kt | 1 - .../habitica/events/GearPurchasedEvent.kt | 5 -- .../habitica/events/ShowSnackbarEvent.kt | 37 --------------- .../habitica/events/commands/FeedCommand.kt | 6 --- .../habitica/helpers/NotificationsManager.kt | 19 -------- .../interactors/ShowNotificationInteractor.kt | 20 +++----- .../habitica/ui/activities/BaseActivity.kt | 13 ----- .../habitica/ui/activities/MainActivity.kt | 33 ++++--------- .../habitica/ui/activities/PrefsActivity.kt | 17 ++++--- .../adapter/inventory/ItemRecyclerAdapter.kt | 9 ++-- .../inventory/PetDetailRecyclerAdapter.kt | 5 +- .../inventory/StableRecyclerAdapter.kt | 3 +- .../ui/fragments/BaseDialogFragment.kt | 11 ----- .../habitica/ui/fragments/BaseFragment.kt | 11 ----- .../inventory/items/ItemDialogFragment.kt | 5 ++ .../fragments/inventory/shops/ShopFragment.kt | 2 - .../stable/PetDetailRecyclerFragment.kt | 30 +++++------- .../preferences/AccountPreferenceFragment.kt | 47 +++++++++---------- .../preferences/PreferencesFragment.kt | 19 ++++---- .../ui/viewHolders/ChatRecyclerViewHolder.kt | 11 ++--- .../habitica/ui/viewHolders/PetViewHolder.kt | 9 ++-- .../habitica/ui/viewmodels/PartyViewModel.kt | 17 +------ .../habitica/ui/views/HabiticaSnackbar.kt | 27 +++++++++-- .../InsufficientGemsDialog.kt | 9 ---- .../habitica/ui/views/shops/PurchaseDialog.kt | 36 ++++++-------- 27 files changed, 134 insertions(+), 286 deletions(-) delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/GearPurchasedEvent.kt delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowSnackbarEvent.kt delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/FeedCommand.kt diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 3f15a63ab..839e6397a 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -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' diff --git a/Habitica/proguard-rules.pro b/Habitica/proguard-rules.pro index 80cc5c85e..c6aea91eb 100644 --- a/Habitica/proguard-rules.pro +++ b/Habitica/proguard-rules.pro @@ -74,17 +74,6 @@ -dontwarn javax.** -dontwarn io.realm.** -#eventbus --keepclassmembers class ** { - @org.greenrobot.eventbus.Subscribe ; -} --keep enum org.greenrobot.eventbus.ThreadMode { *; } - -# Only required if you use AsyncExecutor --keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { - (java.lang.Throwable); -} - #crashlytic -keepattributes SourceFile,LineNumberTable -keep public class * extends java.lang.Exception diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index c1d3f5e6f..cd06dd257 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -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 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/GearPurchasedEvent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/events/GearPurchasedEvent.kt deleted file mode 100644 index 36dd4fab0..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/GearPurchasedEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.habitrpg.android.habitica.events - -import com.habitrpg.android.habitica.models.shops.ShopItem - -class GearPurchasedEvent(val item: ShopItem) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowSnackbarEvent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowSnackbarEvent.kt deleted file mode 100644 index cf1b44af8..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/ShowSnackbarEvent.kt +++ /dev/null @@ -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) - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/FeedCommand.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/FeedCommand.kt deleted file mode 100644 index c210418f4..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/FeedCommand.kt +++ /dev/null @@ -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?) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt index 57b80ed41..947c89b65 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt @@ -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() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ShowNotificationInteractor.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ShowNotificationInteractor.kt index 54c908708..abb2fa8d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ShowNotificationInteractor.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ShowNotificationInteractor.kt @@ -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 ?: "" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index 9012181b2..2e26d20b0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -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 -> { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 812266446..2d371e3bb 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -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) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt index cd98445e7..bd670f5f9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt @@ -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(R.id.snackbar_container) + return v + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt index 657200827..9d5188afc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt @@ -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() private val startHatchingSubject = PublishSubject.create() private val hatchPetSubject = PublishSubject.create>() + private val feedPetSubject = PublishSubject.create() fun getSellItemFlowable(): Flowable { return sellItemEvents.toFlowable(BackpressureStrategy.DROP) @@ -59,6 +58,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter = startHatchingSubject.toFlowable(BackpressureStrategy.DROP) val hatchPetEvents: Flowable> = hatchPetSubject.toFlowable(BackpressureStrategy.DROP) + val feedPetEvents: Flowable = 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 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? = null private var user: User? = null private val equipEvents = PublishSubject.create() + private val feedEvents = PublishSubject.create>() private var ownsSaddles: Boolean = false private var itemList: List = ArrayList() @@ -37,6 +38,8 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt return equipEvents.toFlowable(BackpressureStrategy.DROP) } + var feedFlowable: Flowable> = feedEvents.toFlowable(BackpressureStrategy.DROP) + var animalIngredientsRetriever: ((Animal, ((Pair) -> 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) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt index 9a07fa3a8..90b2da691 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/StableRecyclerAdapter.kt @@ -29,6 +29,7 @@ class StableRecyclerAdapter : RecyclerView.Adapter() { var shopSpriteSuffix: String? = null private var eggs: Map = mapOf() var animalIngredientsRetriever: ((Animal, ((Pair) -> Unit)) -> Unit)? = null + private val feedEvents = PublishSubject.create>() var itemType: String? = null private var user: User? = null private val equipEvents = PublishSubject.create() @@ -91,7 +92,7 @@ class StableRecyclerAdapter : RecyclerView.Adapter() { 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) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt index 164b7ed01..049340870 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt @@ -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 : 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() additionalData["page"] = this.javaClass.simpleName AmplitudeManager.sendEvent("navigate", AmplitudeManager.EVENT_CATEGORY_NAVIGATION, AmplitudeManager.EVENT_HITTYPE_PAGEVIEW, additionalData) @@ -100,9 +92,6 @@ abstract class BaseDialogFragment : DialogFragment() { override fun onDestroyView() { binding = null - if (EventBus.getDefault().isRegistered(this)) { - EventBus.getDefault().unregister(this) - } if (!compositeSubscription.isDisposed) { compositeSubscription.dispose() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt index cc260d3f6..297a8a210 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt @@ -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 : 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 : Fragment() { override fun onDestroyView() { binding = null - if (EventBus.getDefault().isRegistered(this)) { - EventBus.getDefault().unregister(this) - } if (!compositeSubscription.isDisposed) { compositeSubscription.dispose() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt index ffe3a6cd6..acc9eb967 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt @@ -151,6 +151,7 @@ class ItemDialogFragment : BaseDialogFragment(), 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(), 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 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index 8368bdcc7..5f2c11d6f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -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() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt index 5d845db2b..3c0b3b076 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt @@ -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 { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt index a8b2a1fad..1ef0a9cb9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt @@ -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?) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index 671f5b264..b4fe7ca55 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -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() ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt index 8cded4340..a8a815a19 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt @@ -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 + ) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/PetViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/PetViewHolder.kt index 0fc912274..ff7f5f0dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/PetViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/PetViewHolder.kt @@ -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, private val animalIngredientsRetriever: ((Animal, ((Pair) -> Unit)) -> Unit)?) : androidx.recyclerview.widget.RecyclerView.ViewHolder(parent.inflate(R.layout.pet_detail_item)), View.OnClickListener { +class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject, private val feedEvents: PublishSubject>, private val animalIngredientsRetriever: ((Animal, ((Pair) -> 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 + val pet = animal as? Pet ?: return@setSelectionRunnable when (index) { 0 -> { animal?.let { @@ -130,12 +129,12 @@ class PetViewHolder(parent: ViewGroup, private val equipEvents: PublishSubject { - 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)) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt index 03d59dc03..49f187c01 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt @@ -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() ) ) 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 d2775f104..f5ec707f5 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 @@ -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) + } +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt index ed2c76f1a..fd50b94a7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt @@ -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() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index d412d24ce..95dd40dbf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -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() }