diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt index 4a70e5f62..28147bb26 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt @@ -1,7 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.social.party import android.os.Bundle -import android.os.Handler import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -34,6 +33,9 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.social.OldQuestProgressView import io.reactivex.functions.Consumer import io.realm.RealmResults +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import net.pherth.android.emoji_library.EmojiEditText import javax.inject.Inject import javax.inject.Named @@ -124,12 +126,12 @@ class PartyDetailFragment : BaseFragment() { newQuestButton?.visibility = View.GONE questDetailButton?.visibility = View.VISIBLE questImageWrapper?.visibility = View.VISIBLE - val mainHandler = Handler(context?.mainLooper) - mainHandler.postDelayed({ + GlobalScope.launch { + delay(500) inventoryRepository.getQuestContent(party.quest?.key ?: "") .firstElement() .subscribe(Consumer { this@PartyDetailFragment.updateQuestContent(it) }, RxErrorHandler.handleEmptyError()) - }, 500) + } } else { newQuestButton?.visibility = View.VISIBLE questDetailButton?.visibility = View.GONE @@ -191,24 +193,27 @@ class PartyDetailFragment : BaseFragment() { private fun updateMembersList(members: RealmResults?) { membersWrapper?.removeAllViews() val leaderID = viewModel?.leaderID - if (members != null) { - for (member in members) { - val memberView = membersWrapper?.inflate(R.layout.party_member, false) ?: continue - val viewHolder = GroupMemberViewHolder(memberView) - viewHolder.bind(member, leaderID ?: "", viewModel?.getUserData()?.value?.id) - viewHolder.onClickEvent = { - FullProfileActivity.open(member.id ?: "") - } - viewHolder.sendMessageEvent = { - member.id?.let { showSendMessageToUserDialog(it, member.displayName) } - } - viewHolder.transferOwnershipEvent = { - member.id?.let { showTransferOwnerShipDialog(it, member.displayName) } - } - viewHolder.removeMemberEvent = { - member.id?.let { showRemoveMemberDialog(it, member.displayName) } - } - membersWrapper?.addView(memberView) + members?.forEachIndexed { index, member -> + val memberView = (if (membersWrapper?.childCount ?: 0 > index) { + membersWrapper?.getChildAt(index) + } else { + val view = membersWrapper?.inflate(R.layout.party_member, false) + membersWrapper?.addView(view) + view + }) ?: return@forEachIndexed + val viewHolder = GroupMemberViewHolder(memberView) + viewHolder.bind(member, leaderID ?: "", viewModel?.getUserData()?.value?.id) + viewHolder.onClickEvent = { + FullProfileActivity.open(member.id ?: "") + } + viewHolder.sendMessageEvent = { + member.id?.let { showSendMessageToUserDialog(it, member.displayName) } + } + viewHolder.transferOwnershipEvent = { + member.id?.let { showTransferOwnerShipDialog(it, member.displayName) } + } + viewHolder.removeMemberEvent = { + member.id?.let { showRemoveMemberDialog(it, member.displayName) } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt index de945038e..4e35ec9f2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt @@ -98,6 +98,7 @@ open class GroupViewModel : BaseViewModel() { disposable.add(groupIDFlowable .filterOptionalDoOnEmpty { group.value = null } .flatMap { socialRepository.getGroup(it) } + .map { socialRepository.getUnmanagedCopy(it) } .observeOn(AndroidSchedulers.mainThread()) .subscribe(Consumer { group.value = it }, RxErrorHandler.handleEmptyError())) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt index 75b602aee..d265e1b6e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt @@ -38,23 +38,17 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout( } } - var currentValue: Double = 0.0 - set(value) { - field = value - updateBar() - } + private var currentValue: Double = 0.0 + private var maxValue: Double = 0.0 var pendingValue: Double = 0.0 set(value) { - field = value - updateBar() + if (field != value) { + field = value + updateBar() + } } - var maxValue: Double = 0.0 - set(value) { - field = value - updateBar() - } private fun updateBar() { val remainingValue = currentValue - pendingValue @@ -95,6 +89,17 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout( fun set(value: Double, valueMax: Double) { currentValue = value maxValue = valueMax + updateBar() + } + + fun setCurrentValue(value: Double) { + currentValue = value + updateBar() + } + + fun setMaxValue(value: Double) { + maxValue = value + updateBar() } private fun setLayoutWeight(view: View, weight: Double) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.kt index 2d6fb4f8d..2276e70a9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValueBar.kt @@ -55,9 +55,8 @@ class ValueBar(context: Context, attrs: AttributeSet?) : FrameLayout(context, at } private fun updateBar() { + progressBar.set(currentValue, maxValue) this.progressBar.pendingValue = pendingValue - this.progressBar.currentValue = currentValue - this.progressBar.maxValue = maxValue this.setValueText(formatter.format(currentValue) + " / " + formatter.format(maxValue.toInt())) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt index f1bab7bb3..64d359b0f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt @@ -63,12 +63,12 @@ class QuestMenuView : LinearLayout { } fun configure(quest: Quest) { - healthBarView.currentValue = quest.progress?.hp ?: 0.0 + healthBarView.setCurrentValue(quest.progress?.hp ?: 0.0) } fun configure(questContent: QuestContent) { this.questContent = questContent - healthBarView.maxValue = questContent.boss?.hp?.toDouble() ?: 0.0 + healthBarView.setMaxValue(questContent.boss?.hp?.toDouble() ?: 0.0) bottomView.setBackgroundColor(questContent.colors?.darkColor ?: 0) bossArtView.setBackgroundColor(questContent.colors?.mediumColor ?: 0) DataBindingUtils.loadImage(bossArtView, "quest_"+questContent.key)