mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Improve task sorting
This commit is contained in:
parent
7335ef240b
commit
0cf7fc7864
5 changed files with 42 additions and 13 deletions
|
|
@ -3,6 +3,7 @@ package com.habitrpg.wearos.habitica.ui.activities
|
|||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.wear.widget.WearableLinearLayoutManager
|
||||
|
|
@ -32,6 +33,7 @@ class TaskListActivity : BaseActivity<ActivityTasklistBinding, TaskListViewModel
|
|||
super.onCreate(savedInstanceState)
|
||||
configureAdapter()
|
||||
binding.recyclerView.apply {
|
||||
overScrollMode = View.OVER_SCROLL_ALWAYS
|
||||
layoutManager =
|
||||
WearableLinearLayoutManager(
|
||||
this@TaskListActivity,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ open class TaskListAdapter(): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
var onTaskScore: ((Task) -> Unit)? = null
|
||||
var onTaskTapped:((Task) -> Unit)? = null
|
||||
var onRefresh:(() -> Unit)? = null
|
||||
var data: List<Task> = listOf()
|
||||
var data: List<Any> = listOf()
|
||||
set(value) {
|
||||
field = value
|
||||
notifyDataSetChanged()
|
||||
|
|
@ -25,7 +25,7 @@ open class TaskListAdapter(): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
if (holder is TaskViewHolder) {
|
||||
val item = data[position - 1]
|
||||
val item = data[position - 1] as Task
|
||||
holder.bind(item)
|
||||
holder.onTaskScore = {
|
||||
onTaskScore?.invoke(item)
|
||||
|
|
@ -34,15 +34,24 @@ open class TaskListAdapter(): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
onTaskTapped?.invoke(item)
|
||||
}
|
||||
} else if (holder is HeaderSectionViewHolder){
|
||||
holder.bind(title)
|
||||
holder.itemView.setOnClickListener {
|
||||
onRefresh?.invoke()
|
||||
if (position == 0) {
|
||||
holder.bind(title)
|
||||
holder.itemView.setOnClickListener {
|
||||
onRefresh?.invoke()
|
||||
}
|
||||
} else {
|
||||
holder.bind(data[position - 1] as String)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return if (position == 0) 0 else 1
|
||||
return if (position == 0) {
|
||||
0
|
||||
} else {
|
||||
val item = data[position - 1]
|
||||
if (item is Task) 1 else 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package com.habitrpg.wearos.habitica.ui.viewmodels
|
||||
|
||||
import androidx.lifecycle.asLiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.habitrpg.common.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
|
|
@ -10,6 +10,7 @@ import com.habitrpg.wearos.habitica.managers.LoadingManager
|
|||
import com.habitrpg.wearos.habitica.models.tasks.Task
|
||||
import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
|
@ -20,15 +21,21 @@ class RYAViewModel @Inject constructor(
|
|||
val taskRepository: TaskRepository,
|
||||
exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager
|
||||
) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) {
|
||||
val tasks = taskRepository.getTasks(TaskType.DAILY)
|
||||
.map { it.filter { task -> task.isDue == true && !task.completed } }
|
||||
.asLiveData()
|
||||
val tasks = MutableLiveData<List<Task>>()
|
||||
|
||||
private val tasksToComplete = mutableListOf<Task>()
|
||||
|
||||
init {
|
||||
viewModelScope.launch(exceptionBuilder.silent()) {
|
||||
tasks.value = taskRepository.getTasks(TaskType.DAILY)
|
||||
.map { it.filter { task -> task.isDue == true && !task.completed } }
|
||||
.first()
|
||||
}
|
||||
}
|
||||
|
||||
fun tappedTask(task: Task) {
|
||||
task.completed = !task.completed
|
||||
// taskRepository.localRepository.updateTask(task)
|
||||
tasks.value = tasks.value
|
||||
if (task.completed) {
|
||||
if (!tasksToComplete.contains(task)) {
|
||||
tasksToComplete.add(task)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import com.habitrpg.wearos.habitica.models.tasks.Task
|
|||
import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -24,7 +25,17 @@ class TaskListViewModel @Inject constructor(
|
|||
exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager
|
||||
) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) {
|
||||
val taskType = TaskType.from(savedStateHandle.get<String>("task_type"))
|
||||
val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT).asLiveData()
|
||||
val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT)
|
||||
.map {
|
||||
val taskList: MutableList<Any> = it.sortedBy { it.completed }.toMutableList()
|
||||
var firstCompletedIndex = taskList.indexOfFirst { it is Task && it.completed }
|
||||
if (firstCompletedIndex < 0) {
|
||||
firstCompletedIndex = 0
|
||||
}
|
||||
taskList.add(firstCompletedIndex, "Done today")
|
||||
taskList
|
||||
}
|
||||
.asLiveData()
|
||||
val user = userRepository.getUser()
|
||||
.asLiveData()
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class TaskResultViewModel @Inject constructor(savedStateHandle: SavedStateHandle
|
|||
) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) {
|
||||
val hasDrop: Boolean
|
||||
get() {
|
||||
return result?.drop?.key?.isNotBlank() == true || (result?.questItemsFound ?: 0) > 0
|
||||
return result?.drop?.key?.isNotBlank() == true // || (result?.questItemsFound ?: 0) > 0
|
||||
}
|
||||
val result = savedStateHandle.get<TaskScoringResult>("result")
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue