Skip to content

Another Todo List App showcases Android development in Kotlin, featuring Clean Architecture, MVVM, Android Jetpack (Navigation, ViewModel, Room, DataStore), Dagger2, Kotlin Coroutines/Flow, LiveData, Firebase (Auth, Firestore), and testing with JUnit 4, Espresso, Mockito.

License

Notifications You must be signed in to change notification settings

klauz42/Another-Todo-List-App

Repository files navigation

Another Todo List App

License

Another Todo List App demonstrates modern Android development practices on Kotlin, utilizing Clean Architecture and the MVVM pattern.
It includes frameworks and features such as: Android Jetpack (Navigation, ViewModel, Room, DataStore) Dagger2, Kotlin Coroutines and Flow, LiveData, Firebase (Authentication, Firestore), along with JUnit 4, Espresso and Mockito for testing.

Screenshots:

Light Theme

Dark Theme

Tech stack

  • Kotlin
    • Lifecycle: lifecycle-aware components, which can adjust their behavior based on the current lifecycle state of the activity or fragment
    • ViewModel: manages UI's data in a lifecycle-aware fashion. Allows data to survive configuration changes such as screen rotations or light/dark theme switching
    • Material Design: provides design components that follow Google's Material Design guidelines such as Bottom Navigation and TextInputLayout
    • Databinding: binds UI components in your layouts to data sources in a declarative style
    • Coordinatorlayout: enables placement of top-level application widgets, such as AppBarLayout and FloatingActionButton, within your layout
    • Recyclerview: displays large sets of data in app's UI while minimizing memory usage, also allows you to use swipe and drag & drop actions by using ItemTouchHelper
    • Room: provides an abstraction layer over SQLite to allow fluent database access
    • Preferences DataStore: a data storage solution that allows you to store key-value pairs
    • Navigation Component: provides support for fragment-based navigation, making a navigation in an app more clear
    • Dagger: fully static, compile-time dependency injection framework
    • Coroutines: a library for performing asynchronous tasks, managing background tasks in a more efficient and simpler way than traditional methods like threads
    • Firebase Firestore: SDK with Kotlin extensions for real-time, cloud-hosted NoSQL database
    • Firebase Authentication: SDK with Kotlin extensions for implementing user authentication
    • FirebaseUI for Auth: an open-source library that offers simple, customizable UI bindings on top of the core Firebase Auth SDK.
  • Testing
    • JUnit 4: a fundamental unit testing framework for Java applications
    • AndroidX Test: rules for Android testing
    • Espresso: a framework for UI testing in Android
    • Mockito: a framework for mocking objects in tests, crucial for testing components in isolation
    • Robolectric: a framework for unit testing Android code with a simulated Android environment
  • Architecture
    • Clean Architecture (Presentation - Domain - Data)
    • MVVM Pattern (View - DataBinding - ViewModel - Model)
    • Repository Pattern

Application Preview:


A collapsing toolbar layout with custom CoordinatorLayout.Behavior



Swipe items aside to delete or change done status (custom ItemTouchHelper.Callback)



Drag and drop items to move them in the to-do list (custom ItemTouchHelper.Callback)



Adding a new to-do and editing details
(Jetpack Navigation Component with Safe Args Gradle plug-in)



Adding a new to-do but not saving (DialogFragment)



To-do search screen
(Bottom Navigation and dynamic layout manager switching)



Search sorting options screen (Preferences DataStore)



Search filter options screen (Preferences DataStore)



Lifecycle-aware asynchronous data update
(Lifecycle, LiveData, Flow and coroutins)



Account info screen with option to sign out
(Firebase Authentication and FirebaseUI)

License:

MIT License

Copyright (c) 2024 Nikolai Matveev

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

Another Todo List App showcases Android development in Kotlin, featuring Clean Architecture, MVVM, Android Jetpack (Navigation, ViewModel, Room, DataStore), Dagger2, Kotlin Coroutines/Flow, LiveData, Firebase (Auth, Firestore), and testing with JUnit 4, Espresso, Mockito.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages