Skip to content

A playground about best practices, using updated libraries and solutions in the Android world!

License

Notifications You must be signed in to change notification settings

Kaaveh/ComposeNews

Repository files navigation

ComposeNews

This repo is a playground about best practices, using updated libraries and solutions in the Android world!

Check the apk from here

⚙️ Architecture

Architecture diagram

The main architecture of code based on MVI + CLEAN architecture. The division criteria is a hybrid strategy based on Feature + Layer by module. For the detail of architecture, please read this article.

🚦 Navigation

For the detail of navigation implementations, please read this article.

📱 Previewing

For the detail of handling preview of composable functions in this code-base, please read this article.

🛠 Technologies

  • Jetpack Compose
  • CLEAN architecture
  • MVI architectural pattern
  • Coroutine Flow
  • SQLDelight database
  • Dagger Hilt
  • Navigation
  • Ktor client
  • Work manager
  • Unit test
  • Support large screens
  • Monochromatic app icon
  • Version catalog & Convention Plugin (For the detail, please read this article)
  • CI
  • Git Hooks
  • GitHub Actions
  • Static Analysis(Kotlinter, Detekt) (For the detail, please read this article)

We are porting the project to KMP. Here's the steps:

  • GSON → Kotlinx Serialization
  • ROOM → SQLDelight
  • Retrofit → Ktor
  • JUnit → Kotest
  • Dagger-Hilt → Koin
  • Jetpack Compose → Compose Multiplatform

📸 Screenshots

Light theme

Dark theme

Dynamic theme

Large screen support (Foldable, Tablet, and Desktop)

Additional Resources

  • Git Hooks - Learn about Git hooks used in this project for code formatting and analysis.
  • GitHub Actions - Explore the GitHub Actions workflows used to validate the code.
  • Static Analysis - Discover how static analysis tools like Detekt and Ktlint are used in this project for code quality assurance.

🤝🏻 Contribute

Any PRs are very welcome! 😍 You can fix a bug, add a feature, optimize performance and even propose a new cool approach in code-base architecture. Feel free and make a PR! 😌

We use static analysis tools like Detekt and Ktlint in this project. Please either set up Git Hooks on your project or run Static Analysis before creating PR.