diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 9c46bbf10..f374adcf3 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -337,6 +337,9 @@
Edit
Are you sure?
Do you really want to delete?
+ Your Tags
+ Challenge Tags
+ Group Tags
Choose Message Recipient
@@ -1455,6 +1458,7 @@
\@Mentions in Group Plans
Subscribe to hold on with 1HP!
+
- You
- You, %d other
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 738b8e774..43082195d 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
@@ -546,13 +546,13 @@ class TaskFormActivity : BaseActivity() {
}
}
val challengesTagTitle = Tag().apply {
- name = getString(R.string.challenges)
+ name = getString(R.string.challenge_tags)
}
val groupsTagTitle = Tag().apply {
- name = getString(R.string.groups)
+ name = getString(R.string.group_tags)
}
val otherTagTitle = Tag().apply {
- name = getString(R.string.tags)
+ name = getString(R.string.your_tags)
}
if (challengeTagList.isNotEmpty()) {
sortedTagList.add(challengesTagTitle)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt
index eb77a04e8..e5e4c813b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt
@@ -9,6 +9,7 @@ import android.view.LayoutInflater
import android.view.WindowManager
import android.widget.Button
import android.widget.RadioGroup
+import android.widget.TextView
import androidx.annotation.IdRes
import androidx.appcompat.widget.AppCompatCheckBox
import androidx.core.content.ContextCompat
@@ -135,28 +136,38 @@ class TaskFilterDialog(context: Context, private val repository: TagRepository,
)
val leftPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, context.resources.displayMetrics).toInt()
val verticalPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8f, context.resources.displayMetrics).toInt()
+ sortTagPositions()
for (tag in tags) {
- val tagCheckbox = AppCompatCheckBox(context)
- tagCheckbox.text = tag.name
- tagCheckbox.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
- tagCheckbox.isChecked = viewModel.tags.contains(tag.id)
- tagCheckbox.setPadding(
- tagCheckbox.paddingLeft + leftPadding,
- verticalPadding,
- tagCheckbox.paddingRight,
- verticalPadding
- )
- tagCheckbox.setTextColor(ContextCompat.getColor(context, R.color.text_secondary))
- CompoundButtonCompat.setButtonTintList(tagCheckbox, colorStateList)
- tagCheckbox.setOnCheckedChangeListener { _, isChecked ->
- if (isChecked) {
- viewModel.addActiveTag(tag.id)
- } else {
- viewModel.removeActiveTag(tag.id)
+ if (tag.id.isBlank()) {
+ // This is a title for a tag group
+ val view = TextView(context)
+ view.setPadding(0, view.paddingTop, view.paddingRight, view.paddingBottom)
+ view.text = tag.name
+ view.setTextColor(context.getThemeColor(R.attr.textColorTintedPrimary))
+ binding.tagsList.addView(view)
+ } else {
+ val tagCheckbox = AppCompatCheckBox(context)
+ tagCheckbox.text = tag.name
+ tagCheckbox.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
+ tagCheckbox.isChecked = viewModel.tags.contains(tag.id)
+ tagCheckbox.setPadding(
+ tagCheckbox.paddingLeft + leftPadding,
+ verticalPadding,
+ tagCheckbox.paddingRight,
+ verticalPadding
+ )
+ tagCheckbox.setTextColor(ContextCompat.getColor(context, R.color.text_secondary))
+ CompoundButtonCompat.setButtonTintList(tagCheckbox, colorStateList)
+ tagCheckbox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ viewModel.addActiveTag(tag.id)
+ } else {
+ viewModel.removeActiveTag(tag.id)
+ }
+ filtersChanged()
}
- filtersChanged()
+ binding.tagsList.addView(tagCheckbox)
}
- binding.tagsList.addView(tagCheckbox)
}
createAddTagButton()
}
@@ -320,6 +331,44 @@ class TaskFilterDialog(context: Context, private val repository: TagRepository,
filtersChanged()
}
+ private fun sortTagPositions() {
+ val sortedTagList = arrayListOf()
+ val challengeTagList = arrayListOf()
+ val groupTagList = arrayListOf()
+ val otherTagList = arrayListOf()
+ tags.forEach {
+ if (it.challenge) {
+ challengeTagList.add(it)
+ } else if (it.group != null) {
+ groupTagList.add(it)
+ } else {
+ otherTagList.add(it)
+ }
+ }
+ val challengesTagTitle = Tag().apply {
+ name = context.getString(R.string.challenge_tags)
+ }
+ val groupsTagTitle = Tag().apply {
+ name = context.getString(R.string.group_tags)
+ }
+ val otherTagTitle = Tag().apply {
+ name = context.getString(R.string.your_tags)
+ }
+ if (challengeTagList.isNotEmpty()) {
+ sortedTagList.add(challengesTagTitle)
+ sortedTagList.addAll(challengeTagList)
+ }
+ if (groupTagList.isNotEmpty()) {
+ sortedTagList.add(groupsTagTitle)
+ sortedTagList.addAll(groupTagList)
+ }
+ if (otherTagList.isNotEmpty()) {
+ sortedTagList.add(otherTagTitle)
+ sortedTagList.addAll(otherTagList)
+ }
+ tags = sortedTagList
+ }
+
private fun editButtonClicked() {
isEditing = !isEditing
if (isEditing) {