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