From 5139f74efa5ac9557faa145b17a69f8fcba24bbb Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 3 Jun 2025 15:30:31 -0500 Subject: [PATCH] Persists todo task filter preferences for each task type Saves the active to-do task filter to shared preferences, restoring the selected filter when the user returns. --- .../fragments/tasks/TaskRecyclerViewFragment.kt | 5 +++-- .../habitica/ui/viewmodels/TasksViewModel.kt | 15 ++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index da427e5bc..ef7bf5142 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -580,11 +580,12 @@ open class TaskRecyclerViewFragment : viewModel.userViewModel.user.observeOnce(this) { if (it != null) { when (taskType) { - TaskType.TODO -> + TaskType.TODO -> { viewModel.setActiveFilter( TaskType.TODO, - Task.FILTER_ACTIVE + viewModel.getTaskFilterPreference(TaskType.TODO) ) + } TaskType.DAILY -> { if (!viewModel.initialPreferenceFilterSet) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index 8e52f6e3d..e353dacb4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -199,11 +199,8 @@ constructor( if (activeFilters[type] == null) { return false } - return if (TaskType.TODO == type) { - Task.FILTER_ACTIVE != activeFilters[type] - } else { - Task.FILTER_ALL != activeFilters[type] - } + + return Task.FILTER_ALL != activeFilters[type] } fun filter(tasks: List): List { @@ -259,6 +256,8 @@ constructor( activeFilters[type] = activeFilter filterSets[type]?.value = Triple(searchQuery, activeFilter, tags) + sharedPreferences.edit { putString("filter_${type.value}", activeFilter) } + if (activeFilters[TaskType.TODO] == Task.FILTER_COMPLETED) { viewModelScope.launchCatching { taskRepository.retrieveCompletedTodos() @@ -283,6 +282,12 @@ constructor( } } + fun getTaskFilterPreference( + type: TaskType + ): String { + return sharedPreferences.getString("filter_${type.value}", Task.FILTER_ALL) ?: Task.FILTER_ALL + } + fun createQuery(unfilteredData: OrderedRealmCollection): RealmQuery? { if (!unfilteredData.isValid) { return null