From 75bad46e0972f4f8b16b4813d9fe8ba9ecd1e2af Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 6 Jan 2025 15:36:06 +0100 Subject: [PATCH] improve leaving party flow --- Habitica/res/values/strings.xml | 4 ++++ .../habitica/ui/activities/TaskFormActivity.kt | 2 +- .../social/guilds/GuildDetailFragment.kt | 6 +++--- .../social/party/PartyDetailFragment.kt | 18 +++++++++++++----- .../habitica/ui/viewmodels/GroupViewModel.kt | 7 +++++++ .../habitica/ui/viewmodels/PartyViewModel.kt | 3 +++ version.properties | 4 ++-- 7 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index e8d494b0a..ecd5411d6 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -551,9 +551,13 @@ Check off any Dailies you did yesterday: Start My Day Are you sure you want to leave this party? + Are you sure you want to leave this party? Do you want to keep participating in the Challenge when leaving the Party? Are you sure you want to discard changes to this task? You will not be able to rejoin this party unless invited. + You will not be able to rejoin this party unless invited.\n\nLeaving the party will also make you leave the quest you are currently on. + You will not be able to rejoin this party unless invited.\n\nLeaving the party will also abort the current quest. + Pending Accepted Declined diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index c55823dd0..8e22f753c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -552,7 +552,7 @@ class TaskFormActivity : BaseActivity() { binding.tagsTitleView.visibility = if (isChallengeTask) View.GONE else View.VISIBLE binding.tagsWrapper.visibility = if (isChallengeTask) View.GONE else View.VISIBLE - binding.statWrapper.visibility = if (usesTaskAttributeStats) View.VISIBLE else View.GONE + binding.statWrapper.visibility = if (usesTaskAttributeStats && taskType != TaskType.REWARD) View.VISIBLE else View.GONE if (isCreating) { binding.adjustStreakTitleView.visibility = View.GONE binding.adjustStreakWrapper.visibility = View.GONE diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt index 6661453d9..f4ecee943 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt @@ -165,14 +165,14 @@ class GuildDetailFragment : BaseFragment() { alert.setTitle(R.string.guild_challenges) alert.setMessage(R.string.leave_guild_challenges_confirmation) alert.addButton(R.string.keep_challenges, true) { _, _ -> - viewModel.leaveGroup(groupChallenges, true) { showLeaveSnackbar() } + viewModel.leaveGroup(false, false, groupChallenges, true) { showLeaveSnackbar() } } alert.addButton( R.string.leave_challenges_delete_tasks, isPrimary = false, isDestructive = true, ) { _, _ -> - viewModel.leaveGroup(groupChallenges, false) { showLeaveSnackbar() } + viewModel.leaveGroup(false, false, groupChallenges, false) { showLeaveSnackbar() } } alert.setExtraCloseButtonVisibility(View.VISIBLE) alert.show() @@ -185,7 +185,7 @@ class GuildDetailFragment : BaseFragment() { isPrimary = true, isDestructive = true, ) { _, _ -> - viewModel.leaveGroup(groupChallenges, false) { + viewModel.leaveGroup(false, false, groupChallenges, false) { showLeaveSnackbar() } } 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 7dcfb8984..6e694bcd9 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 @@ -20,7 +20,6 @@ import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.databinding.FragmentPartyDetailBinding -import com.habitrpg.common.habitica.extensions.inflate import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.HapticFeedbackManager import com.habitrpg.android.habitica.models.inventory.QuestContent @@ -42,6 +41,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog import com.habitrpg.android.habitica.ui.views.social.PartySeekingListItem import com.habitrpg.common.habitica.extensions.DataBindingUtils import com.habitrpg.common.habitica.extensions.dpToPx +import com.habitrpg.common.habitica.extensions.inflate import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.MainNavigationController @@ -507,7 +507,7 @@ class PartyDetailFragment : BaseFragment() { alert.setTitle(R.string.party_challenges) alert.setMessage(R.string.leave_party_challenges_confirmation) alert.addButton(R.string.keep_challenges, true) { _, _ -> - viewModel.leaveGroup(groupChallenges, true) { + viewModel.leaveGroup(viewModel.isUserOnQuest, viewModel.isUserQuestLeader, groupChallenges, true) { parentFragmentManager.popBackStack() MainNavigationController.navigate(R.id.noPartyFragment) } @@ -517,7 +517,7 @@ class PartyDetailFragment : BaseFragment() { false, isDestructive = true, ) { _, _ -> - viewModel.leaveGroup(groupChallenges, false) { + viewModel.leaveGroup(viewModel.isUserOnQuest, viewModel.isUserQuestLeader, groupChallenges, false) { parentFragmentManager.popBackStack() MainNavigationController.navigate(R.id.noPartyFragment) } @@ -527,13 +527,21 @@ class PartyDetailFragment : BaseFragment() { } else { val alert = HabiticaAlertDialog(context) alert.setTitle(R.string.leave_party_confirmation) - alert.setMessage(R.string.rejoin_party) + if (viewModel.isUserOnQuest) { + if (viewModel.isUserQuestLeader) { + alert.setMessage(R.string.rejoin_party_quest_leader) + } else { + alert.setMessage(R.string.rejoin_party_quest) + } + } else { + alert.setMessage(R.string.rejoin_party) + } alert.addButton( R.string.leave, isPrimary = true, isDestructive = true, ) { _, _ -> - viewModel.leaveGroup(groupChallenges, false) { + viewModel.leaveGroup(viewModel.isUserOnQuest, viewModel.isUserQuestLeader, groupChallenges, false) { if (isAdded) { parentFragmentManager.popBackStack() MainNavigationController.navigate(R.id.noPartyFragment) 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 75df57b1e..b0d6d830c 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 @@ -179,6 +179,8 @@ open class GroupViewModel } fun leaveGroup( + leaveQuest: Boolean, + abortQuest: Boolean, groupChallenges: List, keepChallenges: Boolean = true, function: (() -> Unit)? = null, @@ -191,6 +193,11 @@ open class GroupViewModel } } viewModelScope.launch(ExceptionHandler.coroutine()) { + if (abortQuest) { + socialRepository.abortQuest(groupID ?: "") + } else if (leaveQuest) { + socialRepository.leaveQuest(groupID ?: "") + } socialRepository.leaveGroup(groupID ?: "", keepChallenges) userRepository.retrieveUser(withTasks = false, forced = true) function?.invoke() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt index 990e709de..d2288f35f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt @@ -43,6 +43,9 @@ class PartyViewModel ?: true ) + internal val isUserQuestLeader: Boolean + get() = user.value?.id == getGroupData().value?.quest?.leader + @OptIn(ExperimentalCoroutinesApi::class) private val membersFlow = groupIDFlow diff --git a/version.properties b/version.properties index 0d6a5a78e..01c6d94e9 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -NAME=4.5.0 -CODE=9261 \ No newline at end of file +NAME=4.6.0 +CODE=9261