This project was developed to help people decide which fuel to use in their vehicles, based on the current price and the efficiency of each fuel.
- Kotlin
- Android Studio
- Android Jetpack
- Retrofit
- Room
- Modularization by feature & by layer
- Clean Architecture
- MVVM
- Conventional Commits
- Koin
- Compare fuel by efficiency with the current price
- Save comparison in history
- Save comparison price
- Predefined fuels
- History of fuel comparisons
- Register new fuel
- News about fuels
- Customization (theme, language)
- Register new vehicle
- Backup/Restore data
- Share fuel comparison
flowchart TD
subgraph clusterUI[UI]
UI_ONBOARDING(fa:fa-passport :ui:onboarding):::ui
UI_COMPARATOR(fa:fa-code-compare :ui:comparator):::ui
UI_HISTORIES(fa:fa-list :ui:histories*):::ui
UI_FUELS(fa:fa-car :ui:fuels*):::ui
UI_NEWS(fa:fa-newspaper :ui:news*):::ui
UI_SETTINGS(fa:fa-gear :ui:settings*):::ui
end
subgraph clusterDOMAIN[DOMAIN]
UI_COMPARATOR --> DOMAIN_COMPARATOR[fa:fa-code-compare :domain:comparator]:::domain
UI_COMPARATOR -.-> DOMAIN_FUELS[fa:fa-car :domain:fuels]:::domain
UI_COMPARATOR -.-> DOMAIN_HISTORIES[fa:fa-list :domain:histories]:::domain
UI_FUELS --> DOMAIN_FUELS
UI_HISTORIES --> DOMAIN_HISTORIES
UI_NEWS --> DOMAIN_NEWS[fa:fa-newspaper :domain:news*]:::domain
UI_SETTINGS --> DOMAIN_SETTINGS[fa:fa-gear :domain:settings*]:::domain
end
subgraph clusterDATA[DATA]
DOMAIN_HISTORIES --> DATA_HISTORIES[fa:fa-list :data:histories]
DOMAIN_FUELS --> DATA_FUELS[fa:fa-car :data:fuels]
end
subgraph clusterLIBS[LIBS]
DATA_HISTORIES:::data --> LIB_DATABASE[fa:fa-database :libraries:database]
DATA_FUELS:::data --> LIB_DATABASE
end
LIB_DATABASE --> id1[(fa:fa-database Room Database)]
classDef ui fill:#00e489,color:#000
classDef domain fill:#fe8a65,color:#000
classDef data fill:#0b99f3,color:#000
graph TD
Activity/Fragment --> |"dispatchViewIntent(ViewIntent)"| ViewModel
ViewModel -.-> |"setState(State)"| Activity/Fragment
ViewModel -.-> |"sendAction(Action)"| Activity/Fragment
git clone [email protected]:filipe1309/AbasteceAi.git
cd AbasteceAi
./gradlew run
./gradlew projectDependencyGraph
Then, open Project module dependency graph created at
/build/reports/dependency-graph/project.dot.png
- Modularization - Why you should care
- Modularization - A successful architecture
- Get started with the Navigation component
- Single activity: Why, when, and how (Android Dev Summit '18)
- Modularization - Real-life example
- Modularization - How to approach
- Build a modular Android app architecture (Google I/O'19)
- Guide to Android app modularization
- Common modularization patterns
- Configure the app module
- Modularization - Lessons learned
- Kotlin + buildSrc for Better Gradle Dependency Management
- Android MVVM ViewModel’s output streams — ViewState and ActionState
- Android MVVM ViewModel’s Input Stream
- Android Architecture: Communication between ViewModel and View
- ViewState and Interactions — an easy contract between view and ViewModel
- Add a Floating Action Button
- What's new in architecture components (Google I/O'19)
- Create ViewModels with dependencies
- StateFlow vs. Flow vs. SharedFlow vs. LiveData... When to Use What?! - Android Studio Tutorial
- MVI Architecture with Android
- Database in a Multi-module Android Project
- How to Use Kotlin Symbol Processors on Android
- Kotlin Symbol Processing API
- Room
- Prepopulate your Room database
- AndroidX Room unresolved supertypes RoomDatabase
- Write asynchronous DAO queries
- Referencing complex data using Room
- Packing the Room: pre-populate your database with this one method
- Pre-Populate ROOM Database with Already Loaded Data | Android Studio Tutorial
- By layer or feature? Why not both?! Guide to Android app modularization
- MermaidJS
- Mermaid Live Editor
- Kotlin dependency injection: Koin vs. Hilt
- Koin
- The Ultimate Guide to Koin (Dependency Injection with Kotlin) - Android Studio Tutorial
Done with :heart: by filipe1309 🖖
@ Generated with ShubcoGen Template™