CountriesApp is a mobile application built with Android and Jetpack Compose that allows users to explore a list of countries and their details, organised by continent.
- Browse Continents: View a list of continents with a clean, intuitive UI.
- Explore Countries: Select a continent to see all the countries within it.
- Detailed Information: Get key details for each country, including: 🌍 Flag, 💵 Currency, 🏙️ Capital, 📞 Phone Code
- Search Functionality: Quickly find a country by its name using the search bar.
This app is built using a modular architecture following the principles of Clean Architecture to ensure a separation of concerns, scalability, and testability. The project is organized into distinct modules:
- app: The main application module.
- benchmark: Contains performance benchmarks.
- build-logic: Centralised build configuration logic.
- core: Reusable core components.
- common: Shared utilities.
- designsystem: UI components and design tokens.
- logging: Logging implementation.
- networking: API and networking logic using Apollo GraphQL.
- testing: Test utilities and shared test code.
- threading: Threading and coroutine management.
- feature: Contains feature-specific modules.
- continents: Displays the list of continents.
- countries: Displays the countries for a selected continent.
- Kotlin: The primary programming language.
- Jetpack Compose: The modern UI toolkit for building native Android UIs.
- Apollo GraphQL: For fetching data from the GraphQL API.
- Hilt: A dependency injection framework for Android.
- Kotlin Coroutines: For asynchronous and concurrent programming.
- Kotlin Flows: For handling streams of data.
- ViewModel: To manage UI-related data in a lifecycle-conscious way.
- Compose Navigation: For navigating between screens.
- JUnit & Mockito: For unit and integration testing.
- Turbine: A testing library for Kotlin Flows.
- and other libs