From b44e459609d73cebe79301ce25a0438a6d16613d Mon Sep 17 00:00:00 2001 From: Hafiz Date: Fri, 14 Oct 2022 15:18:48 -0400 Subject: [PATCH] Display tasks if local repository does not initially populate After retrieving challenge tasks, check if tasks are showing (laid out earlier from local repository), and if not use the retrieved challenges to lay out tasks. This should handle any potential race conditions as well. --- .../challenges/ChallengeDetailFragment.kt | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index ca8aeef27..6f0e54624 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -11,6 +11,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.core.net.toUri +import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent @@ -93,6 +94,24 @@ class ChallengeDetailFragment : BaseMainFragment FullProfileActivity.open(leaderID) } + loadTasks() + + binding?.joinButton?.setOnClickListener { + challenge?.let { challenge -> + challengeRepository.joinChallenge(challenge) + .subscribe({ + lifecycleScope.launch(ExceptionHandler.coroutine()) { + userRepository.retrieveUser(true) + } + }, ExceptionHandler.rx()) + } + } + binding?.leaveButton?.setOnClickListener { showChallengeLeaveDialog() } + + refresh() + } + + private fun loadTasks() { challengeID?.let { id -> compositeSubscription.add( challengeRepository.getChallenge(id) @@ -107,7 +126,7 @@ class ChallengeDetailFragment : BaseMainFragment lifecycleScope.launch(ExceptionHandler.coroutine()) { set(socialRepository.retrieveMember(it)) } - }, ExceptionHandler.rx()) + }, ExceptionHandler.rx()) ) compositeSubscription.add( challengeRepository.getChallengeTasks(id).subscribe( @@ -158,20 +177,6 @@ class ChallengeDetailFragment : BaseMainFragment ) ) } - - binding?.joinButton?.setOnClickListener { - challenge?.let { challenge -> - challengeRepository.joinChallenge(challenge) - .subscribe({ - lifecycleScope.launch(ExceptionHandler.coroutine()) { - userRepository.retrieveUser(true) - } - }, ExceptionHandler.rx()) - } - } - binding?.leaveButton?.setOnClickListener { showChallengeLeaveDialog() } - - refresh() } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -232,7 +237,11 @@ class ChallengeDetailFragment : BaseMainFragment challengeID?.let { id -> challengeRepository.retrieveChallenge(id) .flatMap { challengeRepository.retrieveChallengeTasks(id) } - .subscribe({ }, { + .subscribe({ taskList -> + if (binding?.taskGroupLayout?.childCount == 0 && taskList.tasks.isNotEmpty()) { + loadTasks() + } + }, { if (it is HttpException && it.code() == 404) { MainNavigationController.navigateBack() }