[ES] Este repositorio contiene todas las implementaciones del Task Manager App project de Dispositivos MΓ³viles (DM) 25/26:
- Assignments: Las entregas semanales de la asignatura.
- Checkpoint-01: Entrega parcial 1 que contiene lo implementado desde assignment-2 a assignment-6.
- Checkpoint-02: Entrega final que contiene lo implementado desde assignment-7 a assignment-13.
- Todo proyecto que incluya una API de CrudCrud debe ser cambiado por uno nuevo para funcionar correctamente.
This repository contains the implementation for Assignment 2 of the Task Manager App project.
Desing a simple CLI app using the Kotlin standard library, practice defining and calling functions, use a structured represention of task data and understand the motivation for introducing classes and enums in the next lab.
- Data representation for tasks with Map<String, Any>
- Menu-based CLI
- Functions: addTask(...), listTasks(...), fun markTaskDone(id: Int), fun filterTasks(completed: Boolean)
- Type casting without safety checks
- Mixed nullable/non-nullable casting
- The output (Only the design of prinln, no functionality is affected) can be different if you run the program on IntelliJ or cmd.
This repository contains the implementation for Assignment 3 of the Task Manager App project.
Apply object-oriented design principles in Kotlin, Use a controller class to encapsulate business logic and data handling, Replace unstructured task representation with a formal Task class, Introduce enum-based classification (Category), Improve code organization across multiple source files and Prepare the codebase for Android integration in Week 04.
- Class Task
- Enum class Category
- Extensions.kt with LocalDate treatment
- Class TaskController
- Functionalities implemented: addTasks(), getAllTasks(), markTaskDone(), filterTasks()
- Duplicated imports in Task.kt (Fixed)
- Output println hadn't compilated in IntelliJ so may be different (Not functionality affected.).
- Library used: java.time.LocalDate, java.time.format.DateTimeFormatter
This repository contains the implementation for Assignment 4 of the Task Manager App project.
- Set up and configure a basic Android project using Kotlin.
- Build a single Activity UI that interacts with task data.
- Store tasks in memory using a MutableList.
- Perform task creation, display, and update logic within the Activity.
- Validate user input to prevent empty entries.
- activity-main.xml with the layout for the TaskManager. Also added a new color in colors.xml
- Task.kt, Category.kt and Extensions.kt included from last assignment.
- MainActivity.kt with the logical functionality for the TaskManager:
- addTask(title:String)
- markTaskDone(id:Int): Boolean
- updateTextView()
- setOnClickListener for buttonAdd & buttonDone.
- Keyboard covers "Introduce Task ID" for marking a task as done. (Fixed with NestedScrollView)
- Libraries used: java.time.LocalDate, android.widget.*
π± Mobile Task Manager β Assignment 5: Lab 04. Creating a Structured UI with RecyclerView and Data Binding
This repository contains the implementation for Assignment 5 of the Task Manager App project.
- Use ConstraintLayout to structure the main screen layout.
- Replace the raw string display with a RecyclerView.
- Implement a custom Adapter and ViewHolder.
- Use data binding for binding task data to views.
- Populate the task list with static/dummy data (no user interaction yet).
- activity-main.xml w/Title Screen and RecyclerView
- item-task.xml w/DataBinding elements for Task List
- TaskAdapter.kt with the TaskViewHolder for items in item-task.xml
- MainActivty.kt with a DummyList hardcoded for the RecyclerView implemented.
- Include from others assignments: Task.kt, Extensions.kt, Category.kt
- RecyclerView scroll didn't show the last Task (fixed)
- Incorrect ViewHolder implemented in TaskAdapter.kt, it showed directly from TextViews instead of dataBinding items (fixed)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random
π± Mobile Task Manager β Assignment 6: Lab 05. Multi-screen and navigation (Part I). Basic navigation
This repository contains the implementation for Assignment 6 of the Task Manager App project.
- Introduce navigation via a navigation host and navigation graphs
- Create modular screens: task list, task details, and task form
- Implement data binding to render task data declaratively
- Prepare infrastructure for dynamic interaction and form editing (Week 07)
- TaskListFragment, TaskDetailFragment, TaskFormFragment with their xml layouts and logic
- Nav graph with TaskListFragment as Start Destination
- RecyclerView logic passed to TaskListFragment
- NavController on MainActivity
- Menu layout
- Not known issues
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, navigation plugins and safe-args plugins, com.google.android.material.appbar.MaterialToolbar, etc.
π± Mobile Task Manager β Assignment 7: Lab 06. Multi-screen and navigation (Part II). Form handling, editing tasks, and data binding
This repository contains the implementation for Assignment 7 of the Task Manager App project.
- Build a reusable TaskFormFragment with full input controls
- Use two-way data binding to simplify reading/writing form fields
- Handle navigation and argument passing for both add and edit modes
- Integrate the form with a shared in-memory TaskRepository used by both the list and form fragments
- TaskFormFragment logic and xml implemented
- TaskRepository object to hold tasks in memory
- TaskDetailFragment navigation to Edit a Task using the Form
- Menu for Edit a Task in DetailFragment
- No two way databinding for isDone (FIXED)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker
π± Mobile Task Manager β Assignment 8: Lab 07. App Architecture Pt. I: Shared ViewModel and Reactive UI with LiveData
This repository contains the implementation for Assignment 8 of the Task Manager App project.
- Create a shared TaskViewModel scoped to the activity
- Refactor fragments to observe and update data through the ViewModel
- Use LiveData to propagate state changes automatically
- Decouple UI logic from state management and prepare for data persistence
- TaskViewModel class with functions for managing Tasks: addTask, updateTask, markTaskDone, getTaskById
- TaskListFragment refactorized for using View Model
- TaskFormFragment refactorized for using View Model, also binding adapted with View Model
- TaskDetailFragment refactorized for using View Model
- deleteTask for TaskDetailFragment, option added to the menu
- Issues with rotating screen/multiapp navigation (Fixed with loadTask)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, etc.
This repository contains the implementation for Assignment 9 of the Task Manager App project.
- Replace the in-memory task list with Room-backed persistence.
- Create and annotate the required Room components: @Entity, @Dao, @Database.
- Use LiveData from Room for reactive UI updates.
- Use viewModelScope.launch to call suspend DAO functions.
- Maintain full MVVM separation between UI and data access.
- Task class using @Entity tag for data persistence with Room.
- TaskTypeConverters for Category and DueDate.
- TaskDao interface with methods for the database.
- TaskDb defining database instance and TaskRepository for Dao functions implementation.
- TaskViewModel refactor using Room structures.
- Issues with Detail Fragment (Fixed on .xml)
- Issues with Edit Fragment (Fixed on .xml)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, Room plugins, ktx, etc.
This repository contains the implementation for Assignment 10 of the Task Manager App project.
- Visually group tasks by category using section headers.
- Add gesture-based actions:
- Swipe left/right to delete or mark a task complete.
- Drag and drop to reorder tasks within a category.
- Apply distinct visual styles per view type (headers, active tasks, completed tasks).
- Maintain clear MVVM separationβUI logic in the ViewModel, rendering in the Adapter.
- TaskListItem for separate Tasks from Headers.
- TaskListItems in ViewModel.
- TaskAdapter refactored using ListAdapter.
- Gestured-based interactions with ItemTouchHelper for Swipe aor Drag.
- Updated TaskListFragment w/new Task Adapter and swipe/drag callbacks.
- Distinct Layout styles for Headers and Tasks.
- Issues with Swipe an Drag (Fixed)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, Room plugins, ktx, etc.
This repository contains the implementation for Assignment 11 of the Task Manager App project.
- Consume and produce task data from a remote REST API.
- Use Retrofit and Moshi for HTTP and JSON integration.
- Make non-blocking API calls with Kotlin coroutines.
- Replace Room-based data access with network operations (for now).
- Preserve reactive data flow into the UI via LiveData.
- TaskApiService interface with Retrofit Methods.
- RetrofitClient for TaskApiService.
- Refactored Task replacing Room logic.
- TaskViewModel refactored for Api Service logic.
- Fragments refactored for Api Service logic.
- Dimmed Text for Completed Task.
- Issues with UpdateTask (Fixed)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, Room plugins, ktx, Retrofit, Moshi, etc.
This repository contains the implementation for Assignment 12 of the Task Manager App project.
- Implement and use the Repository pattern properly.
- The Repository exposes simple domain-level operations (getTasks(), addTask(), updateTask(), deleteTask())
- The ViewModel never touches DAO or Retrofit directly.
- Implement data models that enable a better scalable solution instead of trying to unify the definition of the entities required for Room, the REST API and the data model using a single data class.
- Solve the dual identity problem (typical in real-world apps).
- _CRUD CRUD generates its own id which is different from the appβs localId.
- The repository must:
- _Map id β remoteId
- Keep localId stable for UI and RecyclerView
- Update remoteId after the server creates or updates a task
- Refactor the TaskViewModel to delegate all data access to the repository.
- Reinforce the roles and responsibilities of each architecture layer (ViewModel, Repository, DAO/API, Entity).
- Lay the groundwork for offline-first or synchronized workflows.
- TaskEntity, TaskDto and Task models to define local, network and domain models.
- TaskDao with TaskEntity and TaskApi with TaskDto.
- TaskMapper object for necessary mapping functions.
- TaskRepository with Room-first & Offline-First Sync logic with WorkManager.
- TaskSyncWorker for synchronize with CrudCrud.
- TaskViewModel separated from TaskDao and TaskApi only using Repository methods.
- Refactored navigation and fragments from String ID to Int ID.
- Task with pending proccess have a β³ icon on title.
- Issues with UpdateTask (again.) (Fixed)
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, Room plugins, ktx, Retrofit, Moshi, Work, etc.
π± Mobile Task Manager β Assignment 13: Lab 12. Final Polish: Material Design and UI Modernization
This repository contains the implementation for Assignment 13 of the Task Manager App project.
- Modernize the UI using Material Design 3.
- Apply consistent theming (colors + typography) across the app.
- Replace legacy widgets with Material components.
- Improve task interaction patterns using standard Material layout and feedback components.
- Implement a polished task detail/edit experience using a Modal Bottom Sheet.
- Support basic internationalization (English + default language).
- Material3 Theming w/ Custom colors, styles and dimens.
- MaterialToolbar app bar.
- Material UI Components.
- Floating Action Button for Add.
- MaterialCardView for Task Items.
- Modal Bottom Sheet for Details/Editing.
- Improved Date Input with Material Pickers.
- English Localization.
- Snackbar feedback.
- N/A
- Libraries used: java.time.LocalDate, android., androidx.recyclerview.widget., ActivityMainBinding and ItemTaskBinding generated in package, kotlin.random.Random, com.google.android.material.datepicker.MaterialDatePicker, ViewModel, ActivityViewModel, Room plugins, ktx, Retrofit, Moshi, Work, etc.
This assignment is part of the Mobile Development course at Universidad de Vigo.
See the course syllabus and lab instructions for more details.