parent
							
								
									b7a74a13d7
								
							
						
					
					
						commit
						71590bd5a2
					
				
					 6 changed files with 42 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -18,7 +18,6 @@ import androidx.compose.runtime.Composable
 | 
			
		|||
import androidx.compose.ui.Alignment
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.graphics.Color
 | 
			
		||||
import androidx.compose.ui.text.font.FontWeight
 | 
			
		||||
import androidx.compose.ui.text.style.TextOverflow
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
import androidx.compose.ui.unit.dp
 | 
			
		||||
| 
						 | 
				
			
			@ -31,13 +30,15 @@ import be.ugent.sel.studeez.resources
 | 
			
		|||
@Composable
 | 
			
		||||
fun TaskEntry(
 | 
			
		||||
    task: Task,
 | 
			
		||||
    onCheckTask: (Boolean) -> Unit,
 | 
			
		||||
    onDeleteTask: () -> Unit,
 | 
			
		||||
) {
 | 
			
		||||
    Card(
 | 
			
		||||
        modifier = Modifier
 | 
			
		||||
            .fillMaxWidth()
 | 
			
		||||
            .padding(horizontal = 10.dp, vertical = 5.dp),
 | 
			
		||||
    ) {
 | 
			
		||||
        val color = if (task.completed) Color.Gray else Color.Black
 | 
			
		||||
        val color = if (task.completed) Color.Gray else MaterialTheme.colors.onSurface
 | 
			
		||||
        Row(
 | 
			
		||||
            horizontalArrangement = Arrangement.SpaceBetween,
 | 
			
		||||
            verticalAlignment = Alignment.CenterVertically,
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +51,7 @@ fun TaskEntry(
 | 
			
		|||
            ) {
 | 
			
		||||
                Checkbox(
 | 
			
		||||
                    checked = task.completed,
 | 
			
		||||
                    onCheckedChange = {},
 | 
			
		||||
                    onCheckedChange = onCheckTask,
 | 
			
		||||
                    colors = CheckboxDefaults.colors(
 | 
			
		||||
                        checkedColor = Color.Gray,
 | 
			
		||||
                        uncheckedColor = MaterialTheme.colors.onSurface,
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +80,7 @@ fun TaskEntry(
 | 
			
		|||
            Box(modifier = Modifier.weight(7f)) {
 | 
			
		||||
                if (task.completed) {
 | 
			
		||||
                    IconButton(
 | 
			
		||||
                        onClick = { /*TODO*/ },
 | 
			
		||||
                        onClick = onDeleteTask,
 | 
			
		||||
                        modifier = Modifier
 | 
			
		||||
                            .padding(start = 20.dp)
 | 
			
		||||
                    ) {
 | 
			
		||||
| 
						 | 
				
			
			@ -109,6 +110,7 @@ fun TaskEntryPreview() {
 | 
			
		|||
            name = "Test Task",
 | 
			
		||||
            completed = false,
 | 
			
		||||
        ),
 | 
			
		||||
        {}, {},
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +121,8 @@ fun CompletedTaskEntryPreview() {
 | 
			
		|||
        task = Task(
 | 
			
		||||
            name = "Test Task",
 | 
			
		||||
            completed = true,
 | 
			
		||||
        )
 | 
			
		||||
        ),
 | 
			
		||||
        {}, {},
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -131,5 +134,6 @@ fun OverflowTaskEntryPreview() {
 | 
			
		|||
            name = "Test Taskkkkkkkkkkkkkkkkkkkkkkkkkkk",
 | 
			
		||||
            completed = false,
 | 
			
		||||
        ),
 | 
			
		||||
        {}, {},
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,4 +7,5 @@ data class Task(
 | 
			
		|||
    val name: String = "",
 | 
			
		||||
    val completed: Boolean = false,
 | 
			
		||||
    val time: Int = 0,
 | 
			
		||||
    val subjectId: String = "",
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,4 +11,6 @@ interface TaskDAO {
 | 
			
		|||
    fun saveTask(newTask: Task)
 | 
			
		||||
 | 
			
		||||
    fun deleteTask(oldTask: Task)
 | 
			
		||||
 | 
			
		||||
    fun toggleTaskCompleted(task: Task, completed: Boolean)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
    private val auth: AccountDAO,
 | 
			
		||||
) : TaskDAO {
 | 
			
		||||
    override fun getTasks(subject: Subject): Flow<List<Task>> {
 | 
			
		||||
        return selectedSubjectTasksCollection(subject)
 | 
			
		||||
        return selectedSubjectTasksCollection(subject.id)
 | 
			
		||||
            .snapshots()
 | 
			
		||||
            .map { it.toObjects(Task::class.java) }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -26,13 +26,19 @@ class FireBaseTaskDAO @Inject constructor(
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    override fun deleteTask(oldTask: Task) {
 | 
			
		||||
        TODO("Not yet implemented")
 | 
			
		||||
        selectedSubjectTasksCollection(oldTask.subjectId).document(oldTask.id).delete()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun selectedSubjectTasksCollection(subject: Subject): CollectionReference =
 | 
			
		||||
    override fun toggleTaskCompleted(task: Task, completed: Boolean) {
 | 
			
		||||
        selectedSubjectTasksCollection(task.subjectId)
 | 
			
		||||
            .document(task.id)
 | 
			
		||||
            .update("completed", completed)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference =
 | 
			
		||||
        firestore.collection(FireBaseCollections.USER_COLLECTION)
 | 
			
		||||
            .document(auth.currentUserId)
 | 
			
		||||
            .collection(FireBaseCollections.SUBJECT_COLLECTION)
 | 
			
		||||
            .document(subject.id)
 | 
			
		||||
            .document(subjectId)
 | 
			
		||||
            .collection(FireBaseCollections.TASK_COLLECTION)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,7 +7,6 @@ import androidx.compose.foundation.lazy.items
 | 
			
		|||
import androidx.compose.material.ButtonDefaults
 | 
			
		||||
import androidx.compose.material.Icon
 | 
			
		||||
import androidx.compose.material.IconButton
 | 
			
		||||
import androidx.compose.material.Text
 | 
			
		||||
import androidx.compose.material.icons.Icons
 | 
			
		||||
import androidx.compose.material.icons.filled.Edit
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
| 
						 | 
				
			
			@ -20,6 +19,7 @@ import be.ugent.sel.studeez.R
 | 
			
		|||
import be.ugent.sel.studeez.common.composable.BasicButton
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.NewTaskSubjectButton
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.tasks.TaskEntry
 | 
			
		||||
import be.ugent.sel.studeez.common.ext.basicButton
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.task.Subject
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.task.Task
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +32,8 @@ data class TaskActions(
 | 
			
		|||
    val getSubject: () -> Subject,
 | 
			
		||||
    val getTasks: () -> Flow<List<Task>>,
 | 
			
		||||
    val deleteSubject: () -> Unit,
 | 
			
		||||
    val deleteTask: (Task) -> Unit,
 | 
			
		||||
    val onCheckTask: (Task, Boolean) -> Unit,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +42,8 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction
 | 
			
		|||
        getTasks = viewModel::getTasks,
 | 
			
		||||
        getSubject = viewModel::getSelectedSubject,
 | 
			
		||||
        deleteSubject = { viewModel.deleteSubject(open) },
 | 
			
		||||
        deleteTask = viewModel::deleteTask,
 | 
			
		||||
        onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) },
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +75,11 @@ fun TaskScreen(
 | 
			
		|||
        ) {
 | 
			
		||||
            LazyColumn {
 | 
			
		||||
                items(tasks.value) {
 | 
			
		||||
                    Text(text = it.name)
 | 
			
		||||
                    TaskEntry(
 | 
			
		||||
                        task = it,
 | 
			
		||||
                        onCheckTask = { isChecked -> taskActions.onCheckTask(it, isChecked) },
 | 
			
		||||
                        onDeleteTask = { taskActions.deleteTask(it) },
 | 
			
		||||
                    )
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            NewTaskSubjectButton(onClick = taskActions.addTask, R.string.new_task)
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +119,8 @@ fun TaskScreenPreview() {
 | 
			
		|||
            { Subject(name = "Test Subject") },
 | 
			
		||||
            { flowOf() },
 | 
			
		||||
            {},
 | 
			
		||||
            {},
 | 
			
		||||
            { _, _ -> run {} },
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -35,4 +35,12 @@ class TaskViewModel @Inject constructor(
 | 
			
		|||
    fun getSelectedSubject(): Subject {
 | 
			
		||||
        return selectedSubject()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun deleteTask(task: Task) {
 | 
			
		||||
        taskDAO.deleteTask(task)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun toggleTaskCompleted(task: Task, completed: Boolean) {
 | 
			
		||||
        taskDAO.toggleTaskCompleted(task, completed)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue