Android app for browsing country data from the REST Countries API v3.1. Clean Architecture, multi-module Gradle project, Jetpack Compose UI, and offline-friendly caching.
- Countries list — Search with suggestions and history, region filters, sort order, pull-to-refresh; favorite countries from the list.
- Country details — Flag, facts, OpenStreetMap via osmdroid (no API key), share as text, favorites, and other countries in the same region.
- Settings — Cache policy, offline mode, cache statistics, clear cache.
- Widget — “Country of the Day” home screen widget (Jetpack Glance), periodic updates.
- Offline-first — Room holds cached data; behavior controlled by cache policy and offline toggle.
- UI — Material 3, light/dark follows the system theme. Navigation uses Navigation 3.
- Kotlin 2.3.20, AGP 9.1.0, Gradle 9.3.1 (wrapper)
- Compose (BOM 2026.03.00), Material 3, Hilt 2.59.2
- Retrofit 3.0.0, OkHttp, kotlinx-serialization, Coroutines
- Room 2.8.4, DataStore preferences
- Coil, Glance, osmdroid 6.1.20, Timber, SnapNotify (in-app messaging)
app
domain
data/countries
core: common, model, designsystem, navigation, network, database, datastore
feature: countries, countrydetails, settings, widget
tests-shared
Requirements: Android Studio with JDK 17+, Android SDK for compile API 36.
git clone https://github.com/iVamsi/WorldCountriesInformation.git
cd WorldCountriesInformation
./gradlew assembleDebugMaps use OpenStreetMap; no API keys are required. Add sdk.dir in local.properties if Android Studio has not created it.
Tests: ./gradlew test · ./gradlew connectedAndroidTest
Apache 2.0 — see LICENSE.
OpenStreetMap data is ODbL; map tiles are credited in-app where required.
REST Countries, OpenStreetMap, osmdroid, Android Jetpack.
Contact / repo: github.com/iVamsi/WorldCountriesInformation