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
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<QuestContent> { 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<Member>?) {
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) }
}
}
}

View file

@ -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()))
}

View file

@ -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) {

View file

@ -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()))
}

View file

@ -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)