Task ViewHolder binding Markdown parsing check & DiffUtil

- Check if text contains markdown before setting title/notes
- Override getDiffCallback to enable RecyclerView DiffUtil updates
This commit is contained in:
Hafiz 2025-06-12 09:32:34 -05:00 committed by Phillip Thelen
parent 86edc4ac7e
commit 0981e78e23
2 changed files with 23 additions and 21 deletions

View file

@ -13,6 +13,7 @@ import com.habitrpg.android.habitica.models.tasks.ChecklistItem
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.adapter.DiffCallback
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
@ -88,6 +89,13 @@ abstract class RealmBaseTasksRecyclerViewAdapter(
}
}
override fun getDiffCallback(
oldList: List<Task>,
newList: List<Task>
): DiffCallback<Task>? {
return object : DiffCallback<Task>(oldList, newList) {}
}
override fun getItemCount(): Int {
return data.size + if (showAdventureGuide) 1 else 0
}

View file

@ -169,29 +169,23 @@ abstract class BaseTaskViewHolder(
notesTextView?.visibility = View.GONE
}
titleTextView.text = data.text
scope.launch(Dispatchers.IO) {
if (data.text.isNotEmpty() && MarkdownParser.containsMarkdown(data.text)) {
val parsedText = MarkdownParser.parseMarkdown(data.text)
withContext(Dispatchers.Main) {
data.parsedText = parsedText
titleTextView.setParsedMarkdown(parsedText)
}
}
val titleText = data.text ?: ""
if (!MarkdownParser.containsMarkdown(titleText)) {
titleTextView.text = titleText
} else {
val parsedText = MarkdownParser.parseMarkdown(titleText)
data.parsedText = parsedText
titleTextView.setParsedMarkdown(parsedText)
}
if (displayMode != "minimal") {
notesTextView?.text = data.notes
data.notes?.let { notes ->
scope.launch(Dispatchers.IO) {
if (notes.isEmpty() || !MarkdownParser.containsMarkdown(notes)) {
return@launch
}
val parsedNotes = MarkdownParser.parseMarkdown(notes)
withContext(Dispatchers.Main) {
data.parsedNotes = parsedNotes
notesTextView?.setParsedMarkdown(parsedNotes)
}
}
val notes = data.notes ?: ""
if (!MarkdownParser.containsMarkdown(notes)) {
notesTextView?.text = notes
} else {
val parsedNotes = MarkdownParser.parseMarkdown(notes)
data.parsedNotes = parsedNotes
notesTextView?.setParsedMarkdown(parsedNotes)
}
} else {
notesTextView?.visibility = View.GONE