From 576d81c868aa84ff1a13bf19a79dfd5378eae9ea Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 2 Nov 2022 10:17:47 +0100 Subject: [PATCH] group task logic fixes # Conflicts: # Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt # version.properties --- .../data/implementation/TaskRepositoryImpl.kt | 12 ++++++------ .../android/habitica/models/tasks/Task.kt | 15 +++++++++++++-- .../ui/viewHolders/tasks/DailyViewHolder.kt | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt index 3bb9717f1..565adaa79 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt @@ -9,17 +9,17 @@ import com.habitrpg.android.habitica.helpers.ExceptionHandler import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor import com.habitrpg.android.habitica.models.BaseMainObject import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData -import com.habitrpg.shared.habitica.models.responses.TaskDirection -import com.habitrpg.shared.habitica.models.responses.TaskDirectionData -import com.habitrpg.shared.habitica.models.responses.TaskScoringResult import com.habitrpg.android.habitica.models.tasks.ChecklistItem import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.TaskList -import com.habitrpg.shared.habitica.models.tasks.TaskType -import com.habitrpg.shared.habitica.models.tasks.TasksOrder import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.proxy.AnalyticsManager +import com.habitrpg.shared.habitica.models.responses.TaskDirection +import com.habitrpg.shared.habitica.models.responses.TaskDirectionData +import com.habitrpg.shared.habitica.models.responses.TaskScoringResult +import com.habitrpg.shared.habitica.models.tasks.TaskType +import com.habitrpg.shared.habitica.models.tasks.TasksOrder import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Single @@ -144,7 +144,7 @@ class TaskRepositoryImpl( if (bgTask.type != TaskType.REWARD && (bgTask.value - localDelta) + res.delta != bgTask.value) { bgTask.value = (bgTask.value - localDelta) + res.delta if (TaskType.DAILY == bgTask.type || TaskType.TODO == bgTask.type) { - bgTask.completed = up + bgTask.completeForUser(userID, up) if (TaskType.DAILY == bgTask.type) { if (up) { bgTask.streak = (bgTask.streak ?: 0) + 1 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index 325f16dba..19fed52b9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -119,15 +119,26 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { fun completed(byUserID: String?): Boolean { return if (isGroupTask) { - group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == byUserID }?.completed ?: false + group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == byUserID }?.completed ?: completed } else { completed } } + fun completeForUser(userID: String?, completed: Boolean) { + if (isGroupTask && group?.assignedUsersDetail?.isNotEmpty() == true) { + group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == userID }?.completed = completed + if (group?.assignedUsersDetail?.filter { it.completed != completed }?.isEmpty() == true) { + this.completed = completed + } + } else { + this.completed = completed + } + } + fun isDisplayedActiveForUser(userID: String?): Boolean { val isActive = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO) - return isActive && completed(userID) + return isActive && !completed(userID) } val streakString: String? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt index cb4a1a6fa..d9cf2886d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt @@ -70,7 +70,7 @@ class DailyViewHolder( } override fun shouldDisplayAsActive(task: Task?, userID: String?): Boolean { - return task?.isDisplayedActive ?: false + return task?.isDisplayedActiveForUser(userID) ?: false } override fun configureSpecialTaskTextView(task: Task) {