Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/boitakub/Bogadex
🎲 BoardGameGeek collections explorer application using Hilt, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture.
https://github.com/boitakub/Bogadex
android android-application boardgamegeek clean-architecture coroutines dagger2 flow hilt hilt-android hilt-dependency-injection jetpack-compose kotlin kotlin-coroutines mvi-architecture mvvm-android mvvm-architecture retrofit2 room workmanager
Last synced: 9 days ago
JSON representation
🎲 BoardGameGeek collections explorer application using Hilt, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture.
- Host: GitHub
- URL: https://github.com/boitakub/Bogadex
- Owner: boitakub
- License: bsd-3-clause
- Created: 2021-09-08T18:52:43.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-21T22:03:16.000Z (4 months ago)
- Last Synced: 2024-07-21T23:21:41.215Z (4 months ago)
- Topics: android, android-application, boardgamegeek, clean-architecture, coroutines, dagger2, flow, hilt, hilt-android, hilt-dependency-injection, jetpack-compose, kotlin, kotlin-coroutines, mvi-architecture, mvvm-android, mvvm-architecture, retrofit2, room, workmanager
- Language: Kotlin
- Homepage:
- Size: 10.3 MB
- Stars: 16
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-list - boitakub/Bogadex - 🎲 BoardGameGeek collections explorer application using Hilt, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture. (Kotlin)
README
Bogadex
[![Build](https://github.com/boitakub/Bogadex/actions/workflows/main.yml/badge.svg)](https://github.com/boitakub/Bogadex/actions/workflows/main.yml)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=bugs)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=boitakub_Bogadex&metric=coverage)](https://sonarcloud.io/summary/new_code?id=boitakub_Bogadex)
[![Kotlin](https://img.shields.io/badge/Kotlin-1.8.10-blue.svg?style=flat)](https://kotlinlang.org)
[![API](https://img.shields.io/badge/API-23%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=23)
[![License](https://img.shields.io/github/license/boitakub/bogadex)](LICENSE.md)
[![gitmoji](https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg)](https://github.com/carloscuesta/gitmoji)
[![Twitter](https://img.shields.io/badge/[email protected]?style=flat)](http://twitter.com/jforatier)
Bogadex is a small demo and functionnal application based on modern Android application tech-stacks and MVVM architecture.
This project aim to regroup and present most of current practices and patterns.
Also dealing with data (from BoardGameGeek) and presenting them in elegants ways.
## Download 📲
Go to the [Releases](https://github.com/boitakub/Bogadex/releases) to download the latest APK.
## Features ✨
* Free and open source
* List, Sort and Filter all you [BGG BoardGameGeekCollection](https://boardgamegeek.com/)## Tech Stack & Libraries 🧬
This project takes advantage of best practices, and many popular libraries and tools in the Android ecosystem.
- [Kotlin](https://kotlinlang.org/) - 100% Kotlin - Code and Scripts
- [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/) for asynchronous.
- Lifecycle - dispose of observing data when lifecycle state changes.
- ViewModel - UI related data holder, lifecycle aware.
- [Hilt-Dagger](https://dagger.dev/hilt/) for dependency injection.
- [JetPack](https://developer.android.com/jetpack)
* [Compose](https://developer.android.com/jetpack/compose?hl=fr) - UI build 100% with Jetpack Compose
* [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager) - Updating and maintaining data up-to-date periodically and asynchronous
* [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) - for shared preferences
* [Room](https://developer.android.com/training/data-storage/room) - Database for cache / offline storage- [Material 3](https://m3.material.io/) - Using Material Design 3
* [Dark Mode](https://developer.android.com/guide/topics/ui/look-and-feel/darktheme) - Generate theme trough [Material Theme Builder](https://m3.material.io/theme-builder#/dynamic)
- [Retrofit2 & OkHttp3](https://github.com/square/retrofit) - construct the REST APIs and paging network data.
- [Coil](https://github.com/coil-kt/coil) - Async images management.- [SonarCloud](https://sonarcloud.io/project/overview?id=boitakub_Bogadex) - Code quality and coverage analysis
- [Gradle optimizations](https://proandroiddev.com/how-we-reduced-our-gradle-build-times-by-over-80-51f2b6d6b05b) - Some gradle tips to optimize build time## Flow & Delivery 🚚
### Triggering a Release
Release a build version triggers in the following scenarios:
- You push a version tag to the repository.
- You create a pull request targeting the main branch.
- Check on pre-commit [Article](https://medium.com/@anjani.kjoshi/android-lint-pre-commit-hook-for-clean-code-747edfe57abf)
* lint - for Android critical issues
* KtLint - for kotlin file quality
- Auto version from git tag [Article](https://dev.to/ychescale9/git-based-android-app-versioning-with-agp-4-0-24ip) [Plugin](https://github.com/ReactiveCircus/app-versioning)
- Auto delivery from git tag
* on GitHub Release
* on Firebase App Distribution
* 🚧 on Google Play Store - Beta & Production
- Release signing [Article](https://proandroiddev.com/how-to-securely-build-and-sign-your-android-app-with-github-actions-ad5323452ce)## Code formatting
The CI uses [Spotless](https://github.com/diffplug/spotless) to check if your code is formatted correctly and contains the right licenses.
Internally, Spotless uses [ktlint](https://github.com/pinterest/ktlint) to check the formatting of your code.
To set up ktlint correctly with Android Studio, follow one of the [listed setup options](https://github.com/pinterest/ktlint#-with-intellij-idea).Before committing your code, run `./gradlew app:spotlessApply` to automatically format your code.
## Architecture 📐
Bogadex is based on MVVM architecture and a repository pattern with a modular approach.
- MVVM -> MVI Architecture (View - ViewModel - Model)
- Business oriented with UseCases pattern - [By layer or feature? Why not both?! Guide to Android app modularization](https://www.youtube.com/watch?v=16SwTvzDO0A)
- Repository pattern
- UI 100% Jetpack composeConcerns are separate by modules containing feature
![Design by features](docs/assets/design_by_feature.png)Each modules/feature share a common clean architecture pattern
![Clean architecture](docs/assets/clean_architecture.png)## Credits & Inspiration 🎖️
Bogadex is inspired by the wonderful repositories :
- [Jaewoong Eum](https://github.com/skydoves), especially [Pokedex](https://github.com/skydoves/Pokedex).
- [Igor Wojda](https://github.com/igorwojda) and his great repo [android-showcase](https://github.com/igorwojda/android-showcase).
- [Lopez Mikhael](https://github.com/lopspower) with [Pokedex Compose](https://github.com/lopspower/PokeCardCompose)Thank you for the great job.
## BoardGameGeek API 🎲
Pokedex using the [BoardGameGeekAPI](https://boardgamegeek.com/wiki/page/BGG_XML_API2/) for constructing RESTful-oriented API.
BoardGameGeekAPI provides a XML API interface to highly detailed objects built from thousands of lines of data related to Boardgames.