Skip to content

About

Mobile Task Manager 25/26 - DM

Resources

Stars

7 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

198 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Mobile Task Manager - DM 25/26

[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.

πŸ“± Mobile Task Manager – Assignment 2: Lab 01. CLI Task Manager (Functional Design)

This repository contains the implementation for Assignment 2 of the Task Manager App project.

🎯 Assignment Goal

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.

βœ… Implemented Features

  • Data representation for tasks with Map<String, Any>
  • Menu-based CLI
  • Functions: addTask(...), listTasks(...), fun markTaskDone(id: Int), fun filterTasks(completed: Boolean)

🚧 Known Issues

  • Type casting without safety checks
  • Mixed nullable/non-nullable casting

πŸ“ Notes

  • The output (Only the design of prinln, no functionality is affected) can be different if you run the program on IntelliJ or cmd.

πŸ“± Mobile Task Manager – Assignment 3: Lab 02. Object-Oriented Programming

This repository contains the implementation for Assignment 3 of the Task Manager App project.

🎯 Assignment Goal

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.

βœ… Implemented Features

  • Class Task
  • Enum class Category
  • Extensions.kt with LocalDate treatment
  • Class TaskController
  • Functionalities implemented: addTasks(), getAllTasks(), markTaskDone(), filterTasks()

🚧 Known Issues

  • Duplicated imports in Task.kt (Fixed)

πŸ“ Notes

  • Output println hadn't compilated in IntelliJ so may be different (Not functionality affected.).
  • Library used: java.time.LocalDate, java.time.format.DateTimeFormatter

πŸ“± Mobile Task Manager – Assignment 4: Lab 03. Build Your Barebones Android App

This repository contains the implementation for Assignment 4 of the Task Manager App project.

🎯 Assignment Goal

  • 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.

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • Keyboard covers "Introduce Task ID" for marking a task as done. (Fixed with NestedScrollView)

πŸ“ Notes

  • 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.

🎯 Assignment Goal

  • 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).

βœ… Implemented Features

  • 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

🚧 Known Issues

  • 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)

πŸ“ Notes

  • 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.

🎯 Assignment Goal

  • 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)

βœ… Implemented Features

  • 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

🚧 Known Issues

  • Not known issues

πŸ“ Notes

  • 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.

🎯 Assignment Goal

  • 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

βœ… Implemented Features

  • 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

🚧 Known Issues

  • No two way databinding for isDone (FIXED)

πŸ“ Notes

  • 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.

🎯 Assignment Goal

  • 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

βœ… Implemented Features

  • 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

🚧 Known Issues

  • Issues with rotating screen/multiapp navigation (Fixed with loadTask)

πŸ“ Notes

  • 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.

πŸ“± Mobile Task Manager – Assignment 9: Lab 08. App architecture Pt. II. Data persistence

This repository contains the implementation for Assignment 9 of the Task Manager App project.

🎯 Assignment Goal

  • 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.

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • Issues with Detail Fragment (Fixed on .xml)
  • Issues with Edit Fragment (Fixed on .xml)

πŸ“ Notes

  • 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.

πŸ“± Mobile Task Manager – Assignment 10: Lab 09. Refined UI layout for the task list

This repository contains the implementation for Assignment 10 of the Task Manager App project.

🎯 Assignment Goal

  • 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.

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • Issues with Swipe an Drag (Fixed)

πŸ“ Notes

  • 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.

πŸ“± Mobile Task Manager – Assignment 11: Lab 10. Networking

This repository contains the implementation for Assignment 11 of the Task Manager App project.

🎯 Assignment Goal

  • 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.

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • Issues with UpdateTask (Fixed)

πŸ“ Notes

  • 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.

πŸ“± Mobile Task Manager – Assignment 12: Lab 11. Refined architecture

This repository contains the implementation for Assignment 12 of the Task Manager App project.

🎯 Assignment Goal

  • 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.

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • Issues with UpdateTask (again.) (Fixed)

πŸ“ Notes

  • 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.

🎯 Assignment Goal

  • 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).

βœ… Implemented Features

  • 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.

🚧 Known Issues

  • N/A

πŸ“ Notes

  • 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.

About

Mobile Task Manager 25/26 - DM

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages