An Android application that allows users to see a list of GitHub user profiles. Also, an interview app for BitFlyer Japan 2025 written by John Bohne.
- User List View: Browse GitHub users with profile information
- User Detail View: View detailed profile information including followers, following, and public repositories
- Swipe-to-Refresh: Swipe down to refresh the user list
- Image Loading: Efficient avatar loading with Coil
- Material Design UI: Clean, modern interface following Material Design guidelines
This app follows a clean architecture pattern:
- MVVM (Model-View-ViewModel): Separation of UI and business logic
- StateFlow: Modern reactive state management (Superior to legacy LiveData)
- Dependency Injection: Hilt for compile-time safe dependency injection
- Repository Pattern: Single source of truth for data operations
- ViewBinding: Type-safe view binding for UI components
- Language: Kotlin 2.0.21
- UI: Android Views (XML layouts) with ViewBinding
- Architecture Components: ViewModel, StateFlow, Lifecycle
- Networking: Retrofit 2.9.0 + Moshi
- Dependency Injection: Hilt 2.57.2
- Image Loading: Coil 2.7.0
- Build System: Gradle 8.13.2
- Android Studio Hedgehog | 2023.1.1 or later
- JDK 17 or later
- Android SDK 36
# Clone the repository
git clone https://github.com/John61590/GithubUserInformation
cd GithubUserInformation
# Build the project
./gradlew assembleDebug
# Run on emulator or connected device
./gradlew installDebug# Run all unit tests
./gradlew testDebugUnitTest
# Run with coverage (if configured)
./gradlew testDebugUnitTestThis app uses the GitHub REST API:
- List Users:
GET /users- Lists all users - Get User:
GET /users/{username}- Gets detailed user information
Documentation: GitHub REST API - Users
The project includes comprehensive unit tests with 33 tests covering:
- Repository layer (data operations)
- ViewModel layer (state management and business logic)
- Data models (validation and equality)
- Repository: 6 tests
- MainViewModel: 6 tests
- UserDetailViewModel: 5 tests
- Data Models: 10 tests
- Others: 6 tests
All tests use:
- Mocking: Mockito-Kotlin
- Coroutines: Kotlin Coroutines Test
- Lifecycle: AndroidX Core Testing
Disclosing per the assignment requirements, AI tools were used in the development of this project:
Use Case: Unit Test Development and Code Refactoring
Reason for Using AI Tools: AI tools were used to accelerate development while maintaining code quality. They helped identify and fix issues quickly, allowing focus on architectural decisions and user experience rather then debugging configuration problems.
If the opportunity arises to enhance this application further, here are potential improvements:
- Search Functionality: Add ability to search users by login using GitHub Search API (
GET /search/users) - Offline Support: Add Room database caching to allow offline viewing of previously loaded users in case of no Internet
- Pull-to-Refresh Detail: Add refresh capability to detail screen
- Accessibility: Improve screen reader support with proper content descriptions
- Translations: Add Japanese translations to some strings
- Compose Migration: Migrate UI to Jetpack Compose for modern declarative UI
- Crash Reporting: Add crash analytics integration (e.g., Firebase Crashlytics)
app/
├── src/main/java/com/example/githubuserinfo/
│ ├── data/
│ │ ├── GithubRepository.kt # Data repository
│ │ ├── model/
│ │ │ ├── GithubUserDetail.kt # User detail data class
│ │ │ └── GithubUserSummary.kt # User summary data class
│ │ └── remote/
│ │ ├── GithubApiService.kt # Retrofit API service
│ │ └── NetworkModule.kt # Dependency injection
│ ├── ui/
│ │ ├── detail/
│ │ │ ├── UserDetailActivity.kt
│ │ │ └── UserDetailViewModel.kt
│ │ └── main/
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainViewModel.kt
│ │ │ └── UserListAdapter.kt
│ │ └── util/
│ │ ├── DateUtil.kt
│ └── GithubApplication.kt
└── src/test/ # Unit tests
This project was created for interview assessment purposes.
- User list with pull-to-refresh -Light Theme
-Dark Theme
2. User detail view
3. Empty State - No Internet (List Screen)