From ea23626c6c61f8e05137a9c8ea60f13b4d80f66b Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Tue, 28 Jul 2020 22:06:44 +0200 Subject: [PATCH 1/5] Displaying number of user collected items in quest progress view --- Habitica/res/layout/quest_progress_old.xml | 6 ++++++ .../android/habitica/models/inventory/QuestProgress.kt | 1 + .../habitica/ui/views/social/OldQuestProgressView.kt | 6 ++++++ .../habitrpg/android/habitica/utils/QuestDeserializer.kt | 3 +++ 4 files changed, 16 insertions(+) diff --git a/Habitica/res/layout/quest_progress_old.xml b/Habitica/res/layout/quest_progress_old.xml index 56070eb1b..fc3b14751 100644 --- a/Habitica/res/layout/quest_progress_old.xml +++ b/Habitica/res/layout/quest_progress_old.xml @@ -36,4 +36,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt index eed63d322..8ab4e1d8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt @@ -11,6 +11,7 @@ open class QuestProgress : RealmObject() { var key: String? = null var hp: Double = 0.0 var rage: Double = 0.0 + var collectedItems: Int = 0 var collect: RealmList? = null var down: Float = 0.0f var up: Float = 0.0f diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index f399b96e1..0ade30c86 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -31,6 +31,7 @@ class OldQuestProgressView : LinearLayout { private val bossHealthView: ValueBar by bindView(R.id.bossHealthView) private val bossRageView: ValueBar by bindView(R.id.bossRageView) private val collectionContainer: ViewGroup by bindView(R.id.collectionContainer) + private val collectedItemsNumberView: TextView by bindView(R.id.collectedItemsNumberView) private val rect = RectF() private val displayDensity = context.resources.displayMetrics.density @@ -84,10 +85,12 @@ class OldQuestProgressView : LinearLayout { } bossNameView.visibility = View.VISIBLE bossHealthView.visibility = View.VISIBLE + collectedItemsNumberView.visibility = View.GONE } else { bossNameView.visibility = View.GONE bossHealthView.visibility = View.GONE bossRageView.visibility = View.GONE + collectedItemsNumberView.visibility = View.VISIBLE if (progress != null) { val inflater = LayoutInflater.from(context) @@ -109,14 +112,17 @@ class OldQuestProgressView : LinearLayout { fun configure(user: User, userOnQuest: Boolean?) { val value = (user.party?.quest?.progress?.up ?: 0F).toDouble() + val collectedItems = user.party?.quest?.progress?.collectedItems if (userOnQuest == true) { bossHealthView.pendingValue = value bossHealthView.description = String.format("%.01f dmg pending", value) bossHealthView.descriptionIconView.visibility = View.VISIBLE + collectedItemsNumberView.text = "+$collectedItems items found" } else { bossHealthView.pendingValue = 0.0 bossHealthView.description = "" bossHealthView.descriptionIconView.visibility = View.GONE + collectedItemsNumberView.text = "" } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt index 346919239..eecff35b8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt @@ -33,6 +33,9 @@ class QuestDeserializer : JsonDeserializer { if (progressObj.has("down")) { progress.down = progressObj.get("down").asFloat } + if (progressObj.has("collectedItems")) { + progress.collectedItems = progressObj.get("collectedItems").asInt + } if (progressObj.has("collect")) { progress.collect = RealmList() for ((key, value) in progressObj.getAsJsonObject("collect").entrySet()) { From 2da5d8221242f92168d6b3c59e27d878305dc0be Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Wed, 29 Jul 2020 22:30:40 +0200 Subject: [PATCH 2/5] Collected items number in new (world boss?) quest view --- Habitica/res/layout/quest_progress.xml | 6 ++++++ .../android/habitica/ui/views/social/QuestProgressView.kt | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/Habitica/res/layout/quest_progress.xml b/Habitica/res/layout/quest_progress.xml index 685e1049f..464ae6c9f 100644 --- a/Habitica/res/layout/quest_progress.xml +++ b/Habitica/res/layout/quest_progress.xml @@ -147,6 +147,12 @@ android:orientation="vertical" android:paddingLeft="@dimen/spacing_large" android:paddingRight="@dimen/spacing_large"/> + Date: Tue, 4 Aug 2020 20:48:04 +0200 Subject: [PATCH 3/5] Added info about found quest items in a snackbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When user finds an item as a result, the information is displayed in the same way, as for other found items. If he/she finds both — quest item and some other treasure both are displayed in the same dialog. Three subsequent notifications would be quite unhandy and also it seemed easier to be accomplished this way. --- .../data/implementation/TaskRepositoryImpl.kt | 2 ++ .../habitica/interactors/DisplayItemDropUseCase.kt | 14 +++++++++++--- .../models/responses/TaskDirectionDataTemp.kt | 1 + .../habitica/models/responses/TaskScoringResult.kt | 1 + .../android/habitica/ui/activities/MainActivity.kt | 3 +-- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt index b5663043c..f2c153885 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt @@ -76,6 +76,7 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli result.goldDelta = localData.gp - (stats?.gp ?: 0.0) result.hasLeveledUp = localData.lvl > stats?.lvl ?: 0 result.questDamage = localData._tmp?.quest?.progressDelta + result.questItemsFound = localData._tmp?.quest?.collection result.drop = localData._tmp?.drop notifyFunc?.invoke(result) @@ -108,6 +109,7 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli result.goldDelta = res.gp - (stats?.gp ?: 0.0) result.hasLeveledUp = res.lvl > stats?.lvl ?: 0 result.questDamage = res._tmp?.quest?.progressDelta + result.questItemsFound = res._tmp?.quest?.collection result.drop = res._tmp?.drop if (localData == null) { notifyFunc?.invoke(result) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index 5776d9cb9..0e218f350 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.helpers.SoundManager import com.habitrpg.android.habitica.models.responses.TaskScoringResult import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import io.reactivex.Flowable +import java.lang.StringBuilder import javax.inject.Inject class DisplayItemDropUseCase @Inject @@ -17,11 +18,18 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut override fun buildUseCaseObservable(requestValues: RequestValues): Flowable { return Flowable.defer { val data = requestValues.data + var snackbarText = StringBuilder(data?.drop?.dialog ?: "") - if (data?.drop != null) { + if (data?.questItemsFound ?: 0 > 0 && requestValues.showQuestItems) { + if (snackbarText.isNotEmpty()) + snackbarText.append('\n') + snackbarText.append("+${data!!.questItemsFound} quest items") + } + + if (snackbarText.isNotEmpty()) { Handler().postDelayed({ HabiticaSnackbar.showSnackbar(requestValues.snackbarTargetView, - data.drop?.dialog, HabiticaSnackbar.SnackbarDisplayType.DROP) + snackbarText, HabiticaSnackbar.SnackbarDisplayType.DROP) soundManager.loadAndPlayAudio(SoundManager.SoundItemDrop) }, 3000L) } @@ -30,5 +38,5 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut } } - class RequestValues(val data: TaskScoringResult?, val context: AppCompatActivity, val snackbarTargetView: ViewGroup) : UseCase.RequestValues + class RequestValues(val data: TaskScoringResult?, val context: AppCompatActivity, val snackbarTargetView: ViewGroup, val showQuestItems: Boolean) : UseCase.RequestValues } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt index 42f4e3e7c..3d31263ba 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt @@ -9,6 +9,7 @@ class TaskDirectionDataTemp { class TaskDirectionDataQuest { var progressDelta: Double = 0.0 + var collection: Int = 0 } class TaskDirectionDataDrop { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt index bd20eb9b1..c27faede5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt @@ -9,4 +9,5 @@ class TaskScoringResult { var manaDelta: Double? = null var hasLeveledUp: Boolean = false var questDamage: Double? = null + var questItemsFound: Int? = null } 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 6afef229a..bed0a3ac3 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 @@ -83,7 +83,6 @@ import io.realm.Realm 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 { @@ -500,7 +499,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } - compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer)) + compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, userIsOnQuest)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } From 6e18bfe0ad9611db7d21b43dcbcdd3a418c11987 Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Tue, 4 Aug 2020 21:48:27 +0200 Subject: [PATCH 4/5] Localized strings for indicated number of quest items --- Habitica/res/values-fr/strings.xml | 1 + Habitica/res/values-pl/strings.xml | 1 + Habitica/res/values/strings.xml | 1 + .../android/habitica/interactors/DisplayItemDropUseCase.kt | 5 ++++- .../android/habitica/ui/views/social/OldQuestProgressView.kt | 2 +- .../android/habitica/ui/views/social/QuestProgressView.kt | 3 ++- 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml index 3124b420d..b62fb8862 100644 --- a/Habitica/res/values-fr/strings.xml +++ b/Habitica/res/values-fr/strings.xml @@ -220,6 +220,7 @@ Quêtes Familiers Montures + Vous avez trouvé %d objets pour la quête Vous avez trouvé une pièce d\'équipement rare dans l\'Armoire : %s! Génial ! Vous farfouillez dans l\'Armoire et trouvez une %1$s %2$s. Qu\'est-ce que ça fait là ? Vous luttez contre l\'Armoire et gagnez de l\'expérience. Prends ça ! diff --git a/Habitica/res/values-pl/strings.xml b/Habitica/res/values-pl/strings.xml index ecd26f5fd..543bd4c0e 100644 --- a/Habitica/res/values-pl/strings.xml +++ b/Habitica/res/values-pl/strings.xml @@ -213,6 +213,7 @@ Misje Zwierzaki Wierzchowce + Znalazłeś %d przedmiot(y/ów) z zadania Znalazłeś element rzadkiego Ekwipunku w Skrzyni: %s! Super! Przeszukujesz Skrzynię i znajdujesz %1$s %2$s. Co to tam robi? Mocujesz się ze Skrzynią i zyskujesz Doświadczenie. A masz! diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index eca3d05e5..14a90d4ad 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -271,6 +271,7 @@ Pets Mounts + You\'ve found %d quest items You found %s in the Armoire You rummage in the Armoire and find %1$s %2$s. What\'s that doing in here? You wrestle with the Armoire and gain Experience. Take that! diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index 0e218f350..a0e0dfaa8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -1,8 +1,11 @@ package com.habitrpg.android.habitica.interactors +import android.content.Context import android.os.Handler +import android.provider.Settings.Global.getString import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity +import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.executors.PostExecutionThread import com.habitrpg.android.habitica.executors.ThreadExecutor import com.habitrpg.android.habitica.helpers.SoundManager @@ -23,7 +26,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut if (data?.questItemsFound ?: 0 > 0 && requestValues.showQuestItems) { if (snackbarText.isNotEmpty()) snackbarText.append('\n') - snackbarText.append("+${data!!.questItemsFound} quest items") + snackbarText.append(requestValues.context.getString(R.string.quest_items_found, data!!.questItemsFound)) } if (snackbarText.isNotEmpty()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index 0ade30c86..ee3efc790 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -117,7 +117,7 @@ class OldQuestProgressView : LinearLayout { bossHealthView.pendingValue = value bossHealthView.description = String.format("%.01f dmg pending", value) bossHealthView.descriptionIconView.visibility = View.VISIBLE - collectedItemsNumberView.text = "+$collectedItems items found" + collectedItemsNumberView.text = context.getString(R.string.quest_items_found, collectedItems) } else { bossHealthView.pendingValue = 0.0 bossHealthView.description = "" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt index 69e89ae88..ad5b081a3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt @@ -189,7 +189,8 @@ class QuestProgressView : LinearLayout { fun configure(user: User) { pendingDamageTextView.text = String.format("%.01f dmg pending", (user.party?.quest?.progress?.up ?: 0F) ) - collectedItemsNumber.text = "+${user.party?.quest?.progress?.collectedItems ?: 0} items found" + val collectedItems = user.party?.quest?.progress?.collectedItems ?: 0 + collectedItemsNumber.text = context.getString(R.string.quest_items_found, collectedItems) } private fun setupRageStrikeViews() { From a00a6e4f1451b9283705f2703ed8af6c05c48281 Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Wed, 5 Aug 2020 23:10:29 +0200 Subject: [PATCH 5/5] Damage/items found shown in snackbar only for quests that require it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Instead of just looking for quest participants we also check progress   to see whether it requires dealing damage or collecting items - Result of this check is represented by an enum - This only works after progress with required data is fetched. It means   (according to my understanding) after quest is seen in party screen   at least once. (But current devel also has this issue with damage notifications   so I guess it's acceptable for now). - Inspired by #1132 --- .../android/habitica/data/UserRepository.kt | 3 ++- .../data/implementation/UserRepositoryImpl.kt | 5 +++-- .../data/local/UserLocalRepository.kt | 9 +++++++- .../RealmUserLocalRepository.kt | 10 +++++++-- .../habitica/ui/activities/MainActivity.kt | 21 ++++++++++++++----- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt index d4fdf1409..0bf5f7339 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.data +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.QuestAchievement import com.habitrpg.android.habitica.models.Skill @@ -77,5 +78,5 @@ interface UserRepository : BaseRepository { fun getAchievements(): Flowable> fun getQuestAchievements(): Flowable> - fun getIsUserOnQuest(): Flowable + fun getUserQuestStatus(): Flowable } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index c0c320941..ecc4a0e0b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -4,6 +4,7 @@ import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.data.local.UserLocalRepository +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.Achievement @@ -172,8 +173,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli } override fun readNotification(id: String): Flowable> = apiClient.readNotification(id) - override fun getIsUserOnQuest(): Flowable { - return localRepository.getIsUserOnQuest(userID) + override fun getUserQuestStatus(): Flowable { + return localRepository.getUserQuestStatus(userID) } override fun readNotifications(notificationIds: Map>): Flowable> = diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt index abd490bde..8193a221b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt @@ -9,6 +9,13 @@ import com.habitrpg.android.habitica.models.user.User import io.reactivex.Flowable import io.realm.RealmResults +enum class UserQuestStatus { + NO_QUEST, + QUEST_COLLECT, + QUEST_BOSS, + QUEST_UNKNOWN +} + interface UserLocalRepository : BaseLocalRepository { fun getTutorialSteps(): Flowable> @@ -24,5 +31,5 @@ interface UserLocalRepository : BaseLocalRepository { fun getSpecialItems(user: User): Flowable> fun getAchievements(): Flowable> fun getQuestAchievements(userID: String): Flowable> - fun getIsUserOnQuest(userID: String): Flowable + fun getUserQuestStatus(userID: String): Flowable } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt index 75ec17204..67e911f19 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.data.local.implementation import com.habitrpg.android.habitica.data.local.UserLocalRepository +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.models.* import com.habitrpg.android.habitica.models.social.ChallengeMembership import com.habitrpg.android.habitica.models.social.ChatMessage @@ -13,7 +14,7 @@ import io.realm.Realm import io.realm.RealmResults class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), UserLocalRepository { - override fun getIsUserOnQuest(userID: String): Flowable { + override fun getUserQuestStatus(userID: String): Flowable { return getUser(userID) .map { it.party?.id ?: "" } .filter { it.isNotBlank() } @@ -25,7 +26,12 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), .filter { groups -> groups.size > 0 } .map { groups -> groups.first() } } - .map { it.quest?.members?.find { questMember -> questMember.key == userID } != null } + .map { when { + it.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST + it.quest?.progress?.collect?.isNotEmpty() ?: false -> UserQuestStatus.QUEST_COLLECT + it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS + else -> UserQuestStatus.QUEST_UNKNOWN + }} } override fun getAchievements(): Flowable> { 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 bed0a3ac3..f6c5bd6f4 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 @@ -34,6 +34,7 @@ import com.habitrpg.android.habitica.api.HostConfig import com.habitrpg.android.habitica.api.MaintenanceApiService 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 @@ -136,7 +137,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { private var drawerFragment: NavigationDrawerFragment? = null var drawerToggle: ActionBarDrawerToggle? = null private var resumeFromActivity = false - private var userIsOnQuest = false + private var userQuestStatus = UserQuestStatus.NO_QUEST private var connectionIssueHandler: Handler? = null @@ -184,8 +185,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { this@MainActivity.user = newUser this@MainActivity.setUserData() }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(userRepository.getIsUserOnQuest().subscribeWithErrorHandler(Consumer { - userIsOnQuest = it + compositeSubscription.add(userRepository.getUserQuestStatus().subscribeWithErrorHandler(Consumer { + userQuestStatus = it })) val viewModel = ViewModelProviders.of(this) @@ -494,12 +495,22 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { internal fun displayTaskScoringResponse(data: TaskScoringResult?) { if (user != null && data != null) { + val damageValue = when (userQuestStatus) { + UserQuestStatus.QUEST_BOSS, + UserQuestStatus.QUEST_UNKNOWN -> data.questDamage + else -> 0.0 + } compositeSubscription.add(notifyUserUseCase.observable(NotifyUserUseCase.RequestValues(this, snackbarContainer, - user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, if (userIsOnQuest) data.questDamage else 0.0, data.hasLeveledUp)) + user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, damageValue, data.hasLeveledUp)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } - compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, userIsOnQuest)) + val showItemsFound = when (userQuestStatus) { + UserQuestStatus.QUEST_COLLECT, + UserQuestStatus.QUEST_UNKNOWN -> true + else -> false + } + compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, showItemsFound)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) }