MyNotes is a Demo app which demonstrates the use of MVVM architecture, Dependency Injection, Navigation Component Library, Room Database, LiveData, Coroutines, Datastore and other Modern Android Development.
The project uses Hilt for Dependency Injection π
I highly recommend to start with Manual Dependency injection method and then move to Hilt, see branch di-ManualInjection
for implementation.
- To Implement DI with Hilt see
di-hilt
- Kotlin - Programming Language Used in the app.
- Navigation Component Library - For setting up app's navigation.
- Room Database - For persisting data/tasks in device's local storage.
- Kotlin Coroutines - To execute code asynchronously.
- Flow - In the simplest of ways consider this as a pipe through which the data flows in the app, by using flow a developer doesn't need to refresh variables which contain data.
- LiveData - Used to observe the data on the UI layer
- ViewModel - To Store UI-related data that isn't destroyed on UI changes.
- RecyclerView - To Display data in a list format.
- Hilt - For Dependency Injection
- Datastore - For Storing Data
see feature/Prefernces-Datastore
to Implement Preferences Datastore by following Abstraction
- For an example of Room Database Schema Migration see branch
room-migration-testing
- For Implementing Instrumented Test Cases for Room Database see branch
testing
- For Implementing Unit Tests for ViewModel and Repository by using the latest testing apis (as of August 2022) see branch
testing-coroutines- 1.6.1
Made with contrib.rocks.
This project is made for educational purposes so don't be shy of asking any questions about any concept from the app or about android development.
Do open issues and raise PRs to I'll try my best to assist you. If this project helps you then do leave a π π
Don't let yourself get caught in the decision paralysis, just start learning and building. π
DM me at π
- Twitter: @avidRaghav
- LinkedIn: Raghav Aggarwal
Copyright 2022 Raghav Aggarwal
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.