The GitHub Demo Android app is a mobile application designed to interact with the public GitHub API, providing users with detailed information about a specific GitHub user.
- User Lookup: Input a GitHub user's ID to see their avatar and name.
- Repository List: Explore the user's public repositories through a scrollable list, showcasing repository names and brief descriptions.
- Repository Detail: Dive deeper into a specific repository by selecting it, revealing comprehensive details on a dedicated detail screen.
- Animated Interaction: Enjoy a visually engaging experience with animations that present user and repository information in an intuitive and lively manner.
- Kotlin - First class and official programming language for Android development.
- Coroutines - For concurrency and asynchronous tasks
- Flow - A asynchronous data stream that sequentially emits values and completes normally or with an exception.
- StateFlow - A live data replacement.
- Dependency Injection
- Hilt - An easier way to incorporate Dagger DI into the Android application.
- Android Architecture Components
- Jetpack Compose - Modern toolkit for building native UI
- Material3 - Modern design guide native UI theme.
- ViewModel - Stores UI-related data that isn't destroyed on UI changes.
- Navigation Components - Navigate to different pages more easily.
- Retrofit - A type-safe HTTP client for Android and Java.
- Coil - An image loading library for Android backed by Kotlin Coroutines.
- Mockk - For Mocking and Unit Testing
MVVM architecture is a Model-View-ViewModel architecture that removes the tight coupling between each component. It is a design pattern that separates the user interface (View) from the underlying data and business logic (Model). Most importantly, in this architecture, the children don't have the direct reference to the parent, they only have the reference by observables.
The Repository Pattern is a design pattern commonly used in software development to abstract and centralize data access logic. It provides a clean and organized way to manage the interaction between the application's business logic and the data sources (such as databases, web services, or APIs).
- Abstracts and centralizes data access logic, decoupling business logic from storage details.
- Separates data access, making code modular. Changes are confined to the repository, easing maintenance.
- Enhances testability by separating concerns. Mocking repositories in tests isolates business logic.
- Facilitates easy switching between data sources (e.g., local database to remote API).