This document outlines the implementation details and guidelines for the Grey Android Engineer Technical Assessment. The goal is to develop an Android app using modern Android development practices, specifically Jetpack Compose, for searching GitHub repositories and retrieving user information.
The app is built using the Model-View-ViewModel (MVVM) architecture, which promotes a clear separation of concerns and enhances testability.
- Network Library: Retrofit
- UI: Jetpack Compose
- Dependency Injection: Dagger Hilt (including Hilt for ViewModel)
- Navigation: Navigation Component with NavHost for full-grown Compose navigation
- Unit Testing: MockK, JUnit
- Image Loading: Coil for Compose
The project is structured as follows:
data: Contains data models and repository classes for network operations.di: Contains Dagger Hilt modules for dependency injection.remote: Contains Retrofit service interfaces and network-related classes.presentation: Contains all UI-related components, including screens and composables.viewmodel: Contains ViewModel classes to handle UI logic and data.common: Contains utility classes and functions.
| Home Screen | Repository Screen | User Screen |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
- The starting destination of the app.
- Navigation options to both the repository screen and user screen.
- Input field for search keywords.
- List of search results displaying repository name, number of stars, and issues.
- Handles empty states and differentiates between no results and no user input states.
- Input field for GitHub username.
- Button to submit the search.
- Navigates to a new screen displaying user details if the user exists.
- Displays basic user information (username, avatar, followers, following).
- List of user repositories.
- Handles cases when the user has no repositories.
- Option to navigate back to the previous screen.
The app's design can be found on Figma.
- Architecture: Proper implementation of MVVM.
- Code Quality: Maintain high code quality and follow coding conventions.
- App Performance: Ensure the app performs efficiently.
- Error Handling: Proper handling of network errors (e.g., 404, 500 response codes, and IOExceptions).
- Unit Tests: Implement comprehensive unit tests.
- Clone the repository:
git clone <repository_url> - Open the project in Android Studio.
- Build the project and ensure all dependencies are resolved.
- Run the app on an emulator or physical device.
- Unit tests can be run using the following command in Android Studio:
./gradlew test





