group task logic fixes

# Conflicts:
#	Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt
#	version.properties
This commit is contained in:
Phillip Thelen 2022-11-02 10:17:47 +01:00
parent f93f45e692
commit 576d81c868
3 changed files with 20 additions and 9 deletions

View file

@ -9,17 +9,17 @@ import com.habitrpg.android.habitica.helpers.ExceptionHandler
import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor import com.habitrpg.android.habitica.interactors.ScoreTaskLocallyInteractor
import com.habitrpg.android.habitica.models.BaseMainObject import com.habitrpg.android.habitica.models.BaseMainObject
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData 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.ChecklistItem
import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList 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.OwnedItem
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.proxy.AnalyticsManager 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.Flowable
import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
@ -144,7 +144,7 @@ class TaskRepositoryImpl(
if (bgTask.type != TaskType.REWARD && (bgTask.value - localDelta) + res.delta != bgTask.value) { if (bgTask.type != TaskType.REWARD && (bgTask.value - localDelta) + res.delta != bgTask.value) {
bgTask.value = (bgTask.value - localDelta) + res.delta bgTask.value = (bgTask.value - localDelta) + res.delta
if (TaskType.DAILY == bgTask.type || TaskType.TODO == bgTask.type) { if (TaskType.DAILY == bgTask.type || TaskType.TODO == bgTask.type) {
bgTask.completed = up bgTask.completeForUser(userID, up)
if (TaskType.DAILY == bgTask.type) { if (TaskType.DAILY == bgTask.type) {
if (up) { if (up) {
bgTask.streak = (bgTask.streak ?: 0) + 1 bgTask.streak = (bgTask.streak ?: 0) + 1

View file

@ -119,15 +119,26 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
fun completed(byUserID: String?): Boolean { fun completed(byUserID: String?): Boolean {
return if (isGroupTask) { return if (isGroupTask) {
group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == byUserID }?.completed ?: false group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == byUserID }?.completed ?: completed
} else { } else {
completed 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 { fun isDisplayedActiveForUser(userID: String?): Boolean {
val isActive = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO) val isActive = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO)
return isActive && completed(userID) return isActive && !completed(userID)
} }
val streakString: String? val streakString: String?

View file

@ -70,7 +70,7 @@ class DailyViewHolder(
} }
override fun shouldDisplayAsActive(task: Task?, userID: String?): Boolean { override fun shouldDisplayAsActive(task: Task?, userID: String?): Boolean {
return task?.isDisplayedActive ?: false return task?.isDisplayedActiveForUser(userID) ?: false
} }
override fun configureSpecialTaskTextView(task: Task) { override fun configureSpecialTaskTextView(task: Task) {