diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt index 343102b22..7ac411f21 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt @@ -146,6 +146,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), } override fun getTask(taskId: String): Flowable { + if (realm.isClosed) { + return Flowable.empty() + } return realm.where(Task::class.java).equalTo("id", taskId).findFirstAsync().asFlowable() .filter { realmObject -> realmObject.isLoaded } .cast(Task::class.java) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.kt index 401bc17d8..4ac4dee54 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskFilterHelper.kt @@ -1,12 +1,9 @@ package com.habitrpg.android.habitica.helpers import com.habitrpg.android.habitica.models.tasks.Task - -import java.util.ArrayList -import java.util.HashMap - import io.realm.OrderedRealmCollection import io.realm.RealmQuery +import java.util.* class TaskFilterHelper { private var tagsId: MutableList = ArrayList() @@ -86,31 +83,32 @@ class TaskFilterHelper { return activeFilters[type] } - fun createQuery(unfilteredData: OrderedRealmCollection): RealmQuery { + fun createQuery(unfilteredData: OrderedRealmCollection): RealmQuery? { + if (!unfilteredData.isValid) { + return null + } var query = unfilteredData.where() - if (unfilteredData.size == 0) { - return query - } + if (unfilteredData.size != 0) { + val taskType = unfilteredData[0].type + val activeFilter = getActiveFilter(taskType) - val taskType = unfilteredData[0].type - val activeFilter = getActiveFilter(taskType) - - if (tagsId.size > 0) { - query = query.`in`("tags.id", tagsId.toTypedArray()) - } - if (activeFilter != null && activeFilter != Task.FILTER_ALL) { - when (activeFilter) { - Task.FILTER_ACTIVE -> query = if (Task.TYPE_DAILY == taskType) { - query.equalTo("completed", false).equalTo("isDue", true) - } else { - query.equalTo("completed", false) + if (tagsId.size > 0) { + query = query.`in`("tags.id", tagsId.toTypedArray()) + } + if (activeFilter != null && activeFilter != Task.FILTER_ALL) { + when (activeFilter) { + Task.FILTER_ACTIVE -> query = if (Task.TYPE_DAILY == taskType) { + query.equalTo("completed", false).equalTo("isDue", true) + } else { + query.equalTo("completed", false) + } + Task.FILTER_GRAY -> query = query.equalTo("completed", true).or().equalTo("isDue", false) + Task.FILTER_WEAK -> query = query.lessThan("value", 1.0) + Task.FILTER_STRONG -> query = query.greaterThanOrEqualTo("value", 1.0) + Task.FILTER_DATED -> query = query.isNotNull("dueDate").equalTo("completed", false) + Task.FILTER_COMPLETED -> query = query.equalTo("completed", true) } - Task.FILTER_GRAY -> query = query.equalTo("completed", true).or().equalTo("isDue", false) - Task.FILTER_WEAK -> query = query.lessThan("value", 1.0) - Task.FILTER_STRONG -> query = query.greaterThanOrEqualTo("value", 1.0) - Task.FILTER_DATED -> query = query.isNotNull("dueDate").equalTo("completed", false) - Task.FILTER_COMPLETED -> query = query.equalTo("completed", true) } } return query diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt index 54eeedd1d..f91fe1375 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt @@ -98,7 +98,9 @@ abstract class RealmBaseTasksRecyclerViewAdapter(privat if (taskFilterHelper != null) { val query = taskFilterHelper.createQuery(unfilteredData) - updateData(query.sort("position").findAll()) + if (query != null) { + updateData(query.sort("position").findAll()) + } } }