It is a shopping list app that will help user to create its shopping list using online/offline feature by firebase.
The goal of the project is to demonstrate best practices by using up to date tech-stack and presenting modern Android application.
This project brings to table set of best practices, tools, and solutions:
- 100% Kotlin
- Modularization (app, presentation, domain, data, shared)
- Android Jetpack
- A single-activity architecture, using the Navigation component
- Testing
- Dependency Injection
- Static code analyse
- Firebase (Authentication and Firestone)
- CI integration by gihub actions
Technology | Description |
---|---|
Kotlin + Coroutines | Perform background operations |
Koin | Dependency injection |
Firebase authentication | Authentication |
Firebase firestone | Remote database |
kotlinx-coroutines-play-services | Extension function to handle firebase requests |
Timber | Logging |
core-ktx | Kotlin extensions |
swiperefreshlayout | Visual refresh layout |
Technology | Description |
---|---|
Navigation | Deal with whole in-app navigation |
LiveData | Notify views about database change |
Lifecycle | Perform an action when lifecycle state changes |
ViewModel | Store and manage UI-related data in a lifecycle conscious way |
Constraintlayout | Allows to build flexible layout |
Test | Tests |
Technology | Description |
---|---|
Unit Tests (JUnit) | |
core-testing | Used to sync background tasks |
kotlinx-coroutines-test | Used to sync coroutines jobs |
mockk | Mock objects using kotlin's style |
Technology | Description |
---|---|
Klint | An anti-bikeshedding Kotlin linter with built-in formatter. |
- Architecture
- Clean Architecture (at module level)
- MVVM (presentation layer)
- Gradle
The application is separated in modules as displayed below
The project does not cover e2e and integration tests once it will be implemented as soon as possible.
There are a few ways to open this project.
- Android Studio -> File -> New -> From Version control -> Git
- Enter
https://github.com/thiagoolsilva/ShoppingList
into URL field
- Run
git clone https://github.com/thiagoolsilva/ShoppingList
- Android Studio -> File -> Open
Other high-quality projects will help you to find solutions that work for your project:
- books jetpack - a showcase that uses jetpack components
- Android sunflower complete
Jetpack
sample covering all libraries - Clean Architecture boilerplate - contains nice diagrams of Clean Architecture layers
Thiago Lopes |
Copyright (c) 2020 Thiago Lopes da Silva
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.
`