From e139b37dc1f9b286a620d93279427b36f16f3f5a Mon Sep 17 00:00:00 2001 From: Hafiz Date: Fri, 30 Jun 2023 14:08:59 -0400 Subject: [PATCH] Match web implementation for tags / order tags - Order tags - Add "group" field to Tag --- Habitica/res/values/strings.xml | 1 + .../habitrpg/android/habitica/models/Tag.kt | 1 + .../ui/activities/TaskFormActivity.kt | 67 ++++++++++++++++--- 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 545c504958..a1e5879771 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -428,6 +428,7 @@ Remove Keep My Challenges + Challenges Official Challenge You’re not part of any Challenges right now! diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Tag.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Tag.kt index 0482f9ea21..acf94c6fe9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/Tag.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/Tag.kt @@ -10,6 +10,7 @@ open class Tag : RealmObject(), BaseObject { var userId: String? = null var name: String = "" + var group: String? = null internal var challenge: Boolean = false override fun equals(other: Any?): Boolean { 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 c5feab3eb1..334df7a0e1 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 @@ -19,6 +19,7 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.widget.CheckBox +import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.appcompat.widget.AppCompatCheckBox @@ -217,6 +218,7 @@ class TaskFormActivity : BaseActivity() { .map { tagRepository.getUnmanagedCopy(it) } .collect { tags = it + sortTagPositions() setTagViews() } } @@ -525,18 +527,65 @@ class TaskFormActivity : BaseActivity() { } } + 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 = getString(R.string.challenges) + } + val groupsTagTitle = Tag().apply { + name = getString(R.string.groups) + } + val otherTagTitle = Tag().apply { + name = getString(R.string.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 setTagViews() { binding.tagsWrapper.removeAllViews() val padding = 20.dpToPx(this) - for (tag in tags) { - val view = CheckBox(this) - view.setPadding(padding, view.paddingTop, view.paddingRight, view.paddingBottom) - view.text = tag.name - view.setTextColor(getThemeColor(R.attr.textColorTintedPrimary)) - if (preselectedTags?.contains(tag.id) == true) { - view.isChecked = true + tags.forEach { tag -> + if (tag.id.isBlank()) { + // This is a title for a tag group + val view = TextView(this) + view.setPadding(0, view.paddingTop, view.paddingRight, view.paddingBottom) + view.text = tag.name + view.setTextColor(getThemeColor(R.attr.textColorTintedPrimary)) + binding.tagsWrapper.addView(view) + } else { + val view = CheckBox(this) + view.setPadding(padding, view.paddingTop, view.paddingRight, view.paddingBottom) + view.text = tag.name + view.setTextColor(getThemeColor(R.attr.textColorTintedPrimary)) + if (preselectedTags?.contains(tag.id) == true) { + view.isChecked = true + } + binding.tagsWrapper.addView(view) } - binding.tagsWrapper.addView(view) } setAllTagSelections() updateTagViewsColors() @@ -678,7 +727,7 @@ class TaskFormActivity : BaseActivity() { thisTask.tags = RealmList() binding.tagsWrapper.forEachIndexed { index, view -> val tagView = view as? CheckBox - if (tagView?.isChecked == true) { + if (tagView?.isChecked == true && tags[index].id.isNotBlank()) { thisTask.tags?.add(tags[index]) } }