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 298c576e2..df8f051de 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 @@ -35,6 +35,7 @@ interface UserRepository : BaseRepository { fun sleep(user: User): Flowable fun getSkills(user: User): Flowable> + fun getTransformationItems(): Flowable> fun getSpecialItems(user: User): 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 19156f165..0642b1a59 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 @@ -124,6 +124,9 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli override fun getSpecialItems(user: User): Flowable> = localRepository.getSpecialItems(user) + override fun getTransformationItems(): Flowable> = + localRepository.getTransformationItems() + override fun useSkill(key: String, target: String?, taskId: String): Flowable { return zipWithLiveUser(apiClient.useSkill(key, target ?: "", taskId)) { response, user -> response.hpDiff = response.user?.stats?.hp ?: 0 - (user.stats?.hp ?: 0.0) 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 9842db322..3570a1c1d 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 @@ -26,6 +26,7 @@ interface UserLocalRepository : BaseLocalRepository { fun getSkills(user: User): Flowable> fun getSpecialItems(user: User): Flowable> + fun getTransformationItems(): Flowable> fun getAchievements(): Flowable> fun getQuestAchievements(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 455c2b00d..e1cbc4077 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 @@ -171,4 +171,15 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), .filter { it.isLoaded } ) } + + override fun getTransformationItems(): Flowable> { + val habitClass = "special" + return RxJavaBridge.toV3Flowable( + realm.where(Skill::class.java) + .equalTo("habitClass", habitClass) + .findAll() + .asFlowable() + .filter { it.isLoaded } + ) + } } 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 9d5188afc..6a15c43d1 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 @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.ItemItemBinding import com.habitrpg.android.habitica.extensions.layoutInflater +import com.habitrpg.android.habitica.models.Skill import com.habitrpg.android.habitica.models.inventory.* import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedPet @@ -110,10 +111,14 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter "Egg" @@ -203,4 +208,17 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter, ownedItems: MutableList){ + val transformationItems: MutableList = mutableListOf() + for (item in skillItems){ + val ownedTransformationItem = OwnedItem() + ownedTransformationItem.key = item.key + ownedTransformationItem.itemType = item.habitClass + ownedTransformationItem.numberOwned = 5 //Test + transformationItems.add(ownedTransformationItem) + } + data = ownedItems + transformationItems + notifyDataSetChanged() + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt index 52e1a3262..f7f083dcb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt @@ -16,8 +16,8 @@ import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.interactors.HatchPetUseCase -import com.habitrpg.android.habitica.interactors.NotifyUserUseCase import com.habitrpg.android.habitica.models.inventory.* +import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.activities.BaseActivity @@ -43,6 +43,7 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL var adapter: ItemRecyclerAdapter? = null var itemType: String? = null + var transformationItems: MutableList = mutableListOf() var itemTypeText: String? = null var user: User? = null internal var layoutManager: androidx.recyclerview.widget.LinearLayoutManager? = null @@ -208,9 +209,16 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL .map { it.distinctBy { it.key } } .doOnNext { items -> adapter?.data = items + if (itemType == "special") { + transformationItems = items.toMutableList() + userRepository.getTransformationItems() + .subscribe { skillItems -> adapter?.setSpecialItems(skillItems, transformationItems) } + } } .map { items -> items.mapNotNull { it.key } } - .flatMap { inventoryRepository.getItems(itemClass, it.toTypedArray()) } + .flatMap { + inventoryRepository.getItems(itemClass, it.toTypedArray()) + } .map { val itemMap = mutableMapOf() for (item in it) {