Improve loading party screen

This commit is contained in:
Phillip Thelen 2019-10-24 15:46:30 +02:00
parent d6198f33c7
commit ea9de8e5e6
5 changed files with 48 additions and 38 deletions

View file

@ -1,7 +1,6 @@
package com.habitrpg.android.habitica.ui.fragments.social.party package com.habitrpg.android.habitica.ui.fragments.social.party
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup 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 com.habitrpg.android.habitica.ui.views.social.OldQuestProgressView
import io.reactivex.functions.Consumer import io.reactivex.functions.Consumer
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pherth.android.emoji_library.EmojiEditText import net.pherth.android.emoji_library.EmojiEditText
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
@ -124,12 +126,12 @@ class PartyDetailFragment : BaseFragment() {
newQuestButton?.visibility = View.GONE newQuestButton?.visibility = View.GONE
questDetailButton?.visibility = View.VISIBLE questDetailButton?.visibility = View.VISIBLE
questImageWrapper?.visibility = View.VISIBLE questImageWrapper?.visibility = View.VISIBLE
val mainHandler = Handler(context?.mainLooper) GlobalScope.launch {
mainHandler.postDelayed({ delay(500)
inventoryRepository.getQuestContent(party.quest?.key ?: "") inventoryRepository.getQuestContent(party.quest?.key ?: "")
.firstElement() .firstElement()
.subscribe(Consumer<QuestContent> { this@PartyDetailFragment.updateQuestContent(it) }, RxErrorHandler.handleEmptyError()) .subscribe(Consumer<QuestContent> { this@PartyDetailFragment.updateQuestContent(it) }, RxErrorHandler.handleEmptyError())
}, 500) }
} else { } else {
newQuestButton?.visibility = View.VISIBLE newQuestButton?.visibility = View.VISIBLE
questDetailButton?.visibility = View.GONE questDetailButton?.visibility = View.GONE
@ -191,24 +193,27 @@ class PartyDetailFragment : BaseFragment() {
private fun updateMembersList(members: RealmResults<Member>?) { private fun updateMembersList(members: RealmResults<Member>?) {
membersWrapper?.removeAllViews() membersWrapper?.removeAllViews()
val leaderID = viewModel?.leaderID val leaderID = viewModel?.leaderID
if (members != null) { members?.forEachIndexed { index, member ->
for (member in members) { val memberView = (if (membersWrapper?.childCount ?: 0 > index) {
val memberView = membersWrapper?.inflate(R.layout.party_member, false) ?: continue membersWrapper?.getChildAt(index)
val viewHolder = GroupMemberViewHolder(memberView) } else {
viewHolder.bind(member, leaderID ?: "", viewModel?.getUserData()?.value?.id) val view = membersWrapper?.inflate(R.layout.party_member, false)
viewHolder.onClickEvent = { membersWrapper?.addView(view)
FullProfileActivity.open(member.id ?: "") view
} }) ?: return@forEachIndexed
viewHolder.sendMessageEvent = { val viewHolder = GroupMemberViewHolder(memberView)
member.id?.let { showSendMessageToUserDialog(it, member.displayName) } viewHolder.bind(member, leaderID ?: "", viewModel?.getUserData()?.value?.id)
} viewHolder.onClickEvent = {
viewHolder.transferOwnershipEvent = { FullProfileActivity.open(member.id ?: "")
member.id?.let { showTransferOwnerShipDialog(it, member.displayName) } }
} viewHolder.sendMessageEvent = {
viewHolder.removeMemberEvent = { member.id?.let { showSendMessageToUserDialog(it, member.displayName) }
member.id?.let { showRemoveMemberDialog(it, member.displayName) } }
} viewHolder.transferOwnershipEvent = {
membersWrapper?.addView(memberView) member.id?.let { showTransferOwnerShipDialog(it, member.displayName) }
}
viewHolder.removeMemberEvent = {
member.id?.let { showRemoveMemberDialog(it, member.displayName) }
} }
} }
} }

View file

@ -98,6 +98,7 @@ open class GroupViewModel : BaseViewModel() {
disposable.add(groupIDFlowable disposable.add(groupIDFlowable
.filterOptionalDoOnEmpty { group.value = null } .filterOptionalDoOnEmpty { group.value = null }
.flatMap { socialRepository.getGroup(it) } .flatMap { socialRepository.getGroup(it) }
.map { socialRepository.getUnmanagedCopy(it) }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer { group.value = it }, RxErrorHandler.handleEmptyError())) .subscribe(Consumer { group.value = it }, RxErrorHandler.handleEmptyError()))
} }

View file

@ -38,23 +38,17 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout(
} }
} }
var currentValue: Double = 0.0 private var currentValue: Double = 0.0
set(value) { private var maxValue: Double = 0.0
field = value
updateBar()
}
var pendingValue: Double = 0.0 var pendingValue: Double = 0.0
set(value) { set(value) {
field = value if (field != value) {
updateBar() field = value
updateBar()
}
} }
var maxValue: Double = 0.0
set(value) {
field = value
updateBar()
}
private fun updateBar() { private fun updateBar() {
val remainingValue = currentValue - pendingValue val remainingValue = currentValue - pendingValue
@ -95,6 +89,17 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout(
fun set(value: Double, valueMax: Double) { fun set(value: Double, valueMax: Double) {
currentValue = value currentValue = value
maxValue = valueMax maxValue = valueMax
updateBar()
}
fun setCurrentValue(value: Double) {
currentValue = value
updateBar()
}
fun setMaxValue(value: Double) {
maxValue = value
updateBar()
} }
private fun setLayoutWeight(view: View, weight: Double) { private fun setLayoutWeight(view: View, weight: Double) {

View file

@ -55,9 +55,8 @@ class ValueBar(context: Context, attrs: AttributeSet?) : FrameLayout(context, at
} }
private fun updateBar() { private fun updateBar() {
progressBar.set(currentValue, maxValue)
this.progressBar.pendingValue = pendingValue this.progressBar.pendingValue = pendingValue
this.progressBar.currentValue = currentValue
this.progressBar.maxValue = maxValue
this.setValueText(formatter.format(currentValue) + " / " + formatter.format(maxValue.toInt())) this.setValueText(formatter.format(currentValue) + " / " + formatter.format(maxValue.toInt()))
} }

View file

@ -63,12 +63,12 @@ class QuestMenuView : LinearLayout {
} }
fun configure(quest: Quest) { fun configure(quest: Quest) {
healthBarView.currentValue = quest.progress?.hp ?: 0.0 healthBarView.setCurrentValue(quest.progress?.hp ?: 0.0)
} }
fun configure(questContent: QuestContent) { fun configure(questContent: QuestContent) {
this.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) bottomView.setBackgroundColor(questContent.colors?.darkColor ?: 0)
bossArtView.setBackgroundColor(questContent.colors?.mediumColor ?: 0) bossArtView.setBackgroundColor(questContent.colors?.mediumColor ?: 0)
DataBindingUtils.loadImage(bossArtView, "quest_"+questContent.key) DataBindingUtils.loadImage(bossArtView, "quest_"+questContent.key)