Skip to content
Extraits de code Groupes Projets
Valider ea9d9281 rédigé par Monnot's avatar Monnot
Parcourir les fichiers

Refactoring from td5 is done -excepted the transformation of...

Refactoring from td5 is done -excepted the transformation of RecyclerView.Adapter in ListAdapter- and works
parent b851055f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -11,12 +11,12 @@ class TasksRepository {
// Ces deux variables encapsulent la même donnée:
// [_taskList] est modifiable mais privée donc inaccessible à l'extérieur de cette classe
private val _taskList = MutableLiveData<List<Task>>()
//private val _taskList = MutableLiveData<List<Task>>()
// [taskList] est publique mais non-modifiable:
// On pourra seulement l'observer (s'y abonner) depuis d'autres classes
public val taskList: LiveData<List<Task>> = _taskList
//public val taskList: LiveData<List<Task>> = _taskList
suspend fun refresh() {
/*suspend fun refresh() {
// Call HTTP (opération longue):
val tasksResponse = tasksWebService.getTasks()
// À la ligne suivante, on a reçu la réponse de l'API:
......@@ -47,8 +47,6 @@ class TasksRepository {
}
suspend fun updateTask(task: Task) {
// TODO: do update request and check response
// DONE
val taskResponse = tasksWebService.updateTask(task, task.id)
if (taskResponse.isSuccessful){
val editableList = _taskList.value.orEmpty().toMutableList()
......@@ -57,5 +55,29 @@ class TasksRepository {
editableList[position] = updatedTask!!
_taskList.value = editableList
}
}*/
// Refactoring
suspend fun loadTasks() : List<Task>? {
// Call HTTP (opération longue):
val tasksResponse = tasksWebService.getTasks()
// À la ligne suivante, on a reçu la réponse de l'API:
return if (tasksResponse.isSuccessful) tasksResponse.body() else null
}
suspend fun deleteTask(task : Task) {
val taskResponse = tasksWebService.deleteTask(id = task.id)
// return taskResponse.isSuccessful // ???
}
suspend fun addTask(task: Task){
val taskResponse = tasksWebService.createTask(task)
// return taskResponse.isSuccessful // ???
}
suspend fun updateTask(task: Task) {
val taskResponse = tasksWebService.updateTask(task, task.id)
// return taskResponse.isSuccessful // ???
}
}
\ No newline at end of file
......@@ -9,8 +9,9 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.clemhaowen.dm_td2.R
class TaskListAdapter(/*private val*/var taskList: List<Task>) : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>() {
class TaskListAdapter(var taskList: List<Task> = emptyList()) : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>() {
//var list : List<Task> = emptyList()
var onDeleteClickListener: ((Task) -> Unit)? = null
var onEditClickListener: ((Task) -> Unit)? = null
......
......@@ -7,7 +7,9 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.observe
import androidx.recyclerview.widget.LinearLayoutManager
......@@ -27,14 +29,21 @@ import java.util.*
class TaskListFragment : Fragment() {
//private var taskList = mutableListOf("Task 1", "Task 2", "Task 3")
// TODO uncomment when Task is implemented
private val taskList = mutableListOf(
/*private val taskList = mutableListOf(
Task(id = "id_1", title = "Task 1", description = "description 1"),
Task(id = "id_2", title = "Task 2"),
Task(id = "id_3", title = "Task 3")
)
)*/
// Refactoring
val taskListAdapter = TaskListAdapter()
// On récupère une instance de ViewModel
private val viewModel: TaskListViewModel by viewModels()
private val tasksRepository = TasksRepository()
// TODO delete this line when refactoring is done.
//private val tasksRepository = TasksRepository()
companion object {
const val ADD_TASK_REQUEST_CODE = 666
......@@ -55,15 +64,14 @@ class TaskListFragment : Fragment() {
// En utilisant les synthetics, on écrit juste l'id directement (c'est magique ✨):
//R.id.fragment_tasklist_recyclerView.layoutManager = LinearLayoutManager(activity) // ça marche pas
// TODO uncomment when TaskListAdapter is created
// DONE
recyclerView?.adapter = TaskListAdapter(taskList)
recyclerView?.adapter = taskListAdapter //TaskListAdapter(taskList)
(recyclerView?.adapter as TaskListAdapter).onDeleteClickListener = { task ->
// Supprimer la tâche
//taskList.remove(task)
//(recyclerView?.adapter as TaskListAdapter).notifyDataSetChanged()
lifecycleScope.launch {
tasksRepository.deleteTask(task)
//tasksRepository.deleteTask(task)
viewModel.deleteTask(task)
}
}
......@@ -71,15 +79,29 @@ class TaskListFragment : Fragment() {
val intent = Intent(activity, TaskActivity::class.java)
intent.putExtra("editTask", task)
startActivityForResult(intent, EDIT_TASK_REQUEST_CODE)
/*val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
}
startForResult.launch(intent)*/
(recyclerView?.adapter as TaskListAdapter).notifyDataSetChanged()
}
tasksRepository.taskList.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
// TODO comment this when refactoring is done.
/*tasksRepository.taskList.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
val editableList = (recyclerView?.adapter as TaskListAdapter).taskList.toMutableList()
editableList.clear()
editableList.addAll(it)
(recyclerView?.adapter as TaskListAdapter).taskList = editableList
(recyclerView?.adapter as TaskListAdapter).notifyDataSetChanged()
})*/
// TODO uncomment this when refactoring is done.
viewModel.taskList.observe(viewLifecycleOwner, androidx.lifecycle.Observer { newList ->
val editableList = (recyclerView?.adapter as TaskListAdapter).taskList.toMutableList()
editableList.clear()
editableList.addAll(newList)
(recyclerView?.adapter as TaskListAdapter).taskList = newList
(recyclerView?.adapter as TaskListAdapter).notifyDataSetChanged()
})
val createButton = view.findViewById<FloatingActionButton>(R.id.floatingActionButton)
......@@ -102,10 +124,12 @@ class TaskListFragment : Fragment() {
val task = data!!.getSerializableExtra(TaskActivity.TASK_KEY) as Task
lifecycleScope.launch {
if (requestCode == ADD_TASK_REQUEST_CODE) {
tasksRepository.addTask(task)
//tasksRepository.addTask(task)
viewModel.addTask(task)
}
else if (requestCode == EDIT_TASK_REQUEST_CODE){
tasksRepository.updateTask(task)
//tasksRepository.updateTask(task)
viewModel.editTask(task)
}
}
//taskList.add(task)
......@@ -118,14 +142,16 @@ class TaskListFragment : Fragment() {
crossfade(true)
transformations(CircleCropTransformation())
}
/*lifecycleScope.launch {
tasksRepository.refresh()
}*/
lifecycleScope.launch {
val userInfo = Api.userService.getInfo().body()!!
val textView = view?.findViewById<TextView>(R.id.textViewInfo)
textView?.text = "${userInfo.firstName} ${userInfo.lastName}"
tasksRepository.refresh()
// TODO comment this when refactoring is done.
//tasksRepository.refresh()
// TODO uncomment this when refactoring is done.
viewModel.loadTasks()
}
}
}
\ No newline at end of file
package com.clemhaowen.dm_td2.tasklist
import androidx.lifecycle.*
import com.clemhaowen.dm_td2.network.TasksRepository
import kotlinx.coroutines.launch
class TaskListViewModel : ViewModel() {
private val repository = TasksRepository()
private val _taskList = MutableLiveData<List<Task>>()
val taskList: LiveData<List<Task>> = _taskList
fun loadTasks() {
viewModelScope.launch {
_taskList.value = repository.loadTasks()!!
}
}
fun deleteTask(task: Task) {
viewModelScope.launch {
repository.deleteTask(task)
}
val editableList = _taskList.value.orEmpty().toMutableList()
val position = editableList.indexOfFirst { task.id == it.id }
editableList.removeAt(position)
_taskList.value = editableList
}
fun addTask(task: Task) {
viewModelScope.launch {
repository.addTask(task)
}
val editableList = _taskList.value.orEmpty().toMutableList()
editableList.add(task)
_taskList.value = editableList
}
fun editTask(task: Task) {
viewModelScope.launch {
repository.updateTask(task)
}
val editableList = _taskList.value.orEmpty().toMutableList()
val position = editableList.indexOfFirst { task.id == it.id }
editableList[position] = task
_taskList.value = editableList
}
}
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter