How mohamad-abuzaid/kotlin-mvvm-clean-koin-compose works
This is a modular Android Compose starter centered on authentication: users enter the authentication flow, can select a language, and proceed through user, VIP, or VVIP login against remote services. The app separates UI/navigation, domain contracts and use cases, and data implementations; preferences and token refresh support local session state. The README also advertises theme support, coroutines/Flow, and Retrofit. Some wiring is inferred only from module structure, so uncertain screen-to-view-model and use-case calls are omitted.
Main entry points: AuthNavGraph.kt Authentication navigation · AuthenticationActivity.kt Authentication activity · MainNavGraph.kt Main navigation · LanguageApiService.kt Language API
Components 26
App UI
- Authentication activity
app/src/main/java/com/compose/clean/ui/authentication/AuthenticationActivity.kt - Authentication navigation
app/src/main/java/com/compose/clean/navigation/authentication/AuthNavGraph.kt - Splash screen
app/src/main/java/com/compose/clean/ui/authentication/screens/splash/SplashScreen.kt - Language selection
app/src/main/java/com/compose/clean/ui/authentication/screens/language/LanguageSelectScreen.kt - Login screen
app/src/main/java/com/compose/clean/ui/authentication/screens/login/LoginScreen.kt - Main activity
app/src/main/java/com/compose/clean/ui/main/MainActivity.kt - Main navigation
app/src/main/java/com/compose/clean/navigation/main/MainNavGraph.kt - Home screen
app/src/main/java/com/compose/clean/ui/main/screens/home/HomeScreen.kt - Bottom navigation
app/src/main/java/com/compose/clean/ui/main/screens/bottom_navigation/BottomNavigationScreen.kt - App theme
app/src/main/java/com/compose/clean/ui/theme/Theme.kt
Domain
- Language use case
domain/src/main/java/com/compose/clean/domain/authentication/usecases/language/LanguageUseCase.kt - Login use cases
domain/src/main/java/com/compose/clean/domain/authentication/usecases/login - Language repository contract
domain/src/main/java/com/compose/clean/domain/authentication/repositories/language/LanguageRepository.kt - Login repository contract
domain/src/main/java/com/compose/clean/domain/authentication/repositories/login/LoginRepository.kt
Data access
- Language repository
data/src/main/java/com/compose/clean/data/repositories/authentication/languages/LanguageRepositoryImpl.kt - Login repository
data/src/main/java/com/compose/clean/data/repositories/authentication/login/LoginRepositoryImpl.kt - Language API
data/src/main/java/com/compose/clean/data/network/service/authentication/LanguageApiService.kt - Login API
data/src/main/java/com/compose/clean/data/network/service/authentication/LoginApiService.kt - Token manager
data/src/main/java/com/compose/clean/data/storage/TokenManager.kt - Token API
data/src/main/java/com/compose/clean/data/network/service/authentication/TokenApiService.kt - Preferences storage
data/src/main/java/com/compose/clean/data/storage/PreferencesStorage.kt
Dependency injection
- Service bindings
di/src/main/java/com/compose/clean/di/ServicesModules.kt - Repository bindings
di/src/main/java/com/compose/clean/di/RepositoriesModules.kt - Use-case bindings
di/src/main/java/com/compose/clean/di/UsecasesModule.kt
Other components
- User
- Remote API
Connections 25
- User → Authentication activity: opens
- Authentication activity → Authentication navigation: starts
- Authentication activity → App theme: applies
- Authentication navigation → Splash screen: routes
- Authentication navigation → Language selection: routes
- Authentication navigation → Login screen: routes
- User → Language selection: selects language
- User → Login screen: submits credentials
- User → Main activity: opens
- Main activity → Main navigation: starts
- Main navigation → Home screen: routes
- Main navigation → Bottom navigation: routes
- Language repository → Language API: calls
- Login repository → Login API: calls
- Language API → Remote API: requests languages
- Login API → Remote API: submits login
- Token manager → Token API: refreshes token
- Token API → Remote API: requests refresh
- Token manager → Preferences storage: reads and writes
- Repository bindings → Language repository: binds
- Repository bindings → Login repository: binds
- Service bindings → Language API: provides
- Service bindings → Login API: provides
- Use-case bindings → Language use case: provides
- Use-case bindings → Login use cases: provides