mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Fully remove eventbus
This commit is contained in:
parent
bfe0d3da71
commit
bc7a9ebad4
27 changed files with 134 additions and 286 deletions
|
|
@ -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'
|
||||
|
|
|
|||
11
Habitica/proguard-rules.pro
vendored
11
Habitica/proguard-rules.pro
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events
|
||||
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
|
||||
class GearPurchasedEvent(val item: ShopItem)
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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?)
|
||||
|
|
@ -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>()
|
||||
|
|
|
|||
|
|
@ -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 ?: ""
|
||||
|
|
|
|||
|
|
@ -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 -> {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>() {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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?) {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() }
|
||||
|
|
|
|||
Loading…
Reference in a new issue