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