mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Improve loading party screen
This commit is contained in:
parent
d6198f33c7
commit
ea9de8e5e6
5 changed files with 48 additions and 38 deletions
|
|
@ -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) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue