mirror of https://github.com/tasks/tasks
parent
138cc21796
commit
113cf6f1b8
@ -0,0 +1,78 @@
|
||||
package org.tasks.dialogs
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.todoroo.astrid.dao.TaskDao
|
||||
import com.todoroo.astrid.data.Task
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.NonCancellable
|
||||
import kotlinx.coroutines.launch
|
||||
import org.tasks.compose.collectAsStateLifecycleAware
|
||||
import org.tasks.compose.edit.Priority
|
||||
import org.tasks.databinding.DialogDateTimePickerBinding
|
||||
import org.tasks.databinding.DialogPriorityPickerBinding
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class PriorityPicker : DialogFragment() {
|
||||
|
||||
@Inject lateinit var taskDao: TaskDao
|
||||
|
||||
private val taskIds: LongArray
|
||||
get() = arguments?.getLongArray(EXTRA_TASKS) ?: longArrayOf()
|
||||
|
||||
companion object {
|
||||
const val EXTRA_TASKS = "extra_tasks"
|
||||
const val EXTRA_DESATURATE = "extra_desaturatee"
|
||||
|
||||
fun newPriorityPicker(desaturateColors: Boolean, tasks: List<Task>): PriorityPicker {
|
||||
val bundle = Bundle()
|
||||
bundle.putLongArray(EXTRA_TASKS, tasks.map { it.id }.toLongArray())
|
||||
bundle.putBoolean(EXTRA_DESATURATE, desaturateColors)
|
||||
val fragment = PriorityPicker()
|
||||
fragment.arguments = bundle
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
lateinit var binding: DialogDateTimePickerBinding
|
||||
private val priorityPickerViewModel: PriorityPickerViewModel by viewModels()
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
return requireActivity().let { fragmentActivity ->
|
||||
val inflater = fragmentActivity.layoutInflater
|
||||
val binding = DialogPriorityPickerBinding.inflate(inflater, null, false)
|
||||
binding.priorityRow.setContent { Priority(selected = priorityPickerViewModel.priority.collectAsStateLifecycleAware().value,
|
||||
onClick = { priorityPickerViewModel.setPriority( it ) }, desaturate = savedInstanceState?.getBoolean(
|
||||
EXTRA_DESATURATE) ?: false) }
|
||||
val builder = AlertDialog.Builder(fragmentActivity)
|
||||
.setTitle("Change priority")
|
||||
.setView(binding.root)
|
||||
|
||||
builder.setNegativeButton("Cancel") { _, _ ->
|
||||
|
||||
}
|
||||
builder.setPositiveButton("Ok") { _, _ ->
|
||||
changePriority()
|
||||
}
|
||||
builder.create()
|
||||
}
|
||||
}
|
||||
|
||||
private fun changePriority() {
|
||||
lifecycleScope.launch(NonCancellable) {
|
||||
taskDao
|
||||
.fetch(taskIds.toList())
|
||||
.forEach {
|
||||
it.priority = priorityPickerViewModel.priority.value
|
||||
taskDao.save(it)
|
||||
}
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package org.tasks.dialogs
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.todoroo.astrid.data.Task
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class PriorityPickerViewModel @Inject constructor(): ViewModel() {
|
||||
|
||||
private val _priority = MutableStateFlow(Task.Priority.NONE)
|
||||
val priority = _priority.asStateFlow()
|
||||
|
||||
fun setPriority(priority: Int) {
|
||||
_priority.value = priority
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/dialog_background">
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/priority_row"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</RelativeLayout>
|
Loading…
Reference in New Issue