This is a simple Android application that allows users to search for GitHub users using the GitHub REST API. It provides a user-friendly interface and features to explore GitHub profiles.
The app displays a list of user and details information from rest api.
-
Hint Screen: The app starts with a hint screen to guide users on how to use the search feature.
-
Search Functionality: Users can initiate a search by tapping on the "Search Input Field" in the top bar, which opens the keyboard and focuses the search box.
-
Search Autocompletion: As users type keywords, the app waits for 1 second (debouncing) before automatically initiating the search, allowing users to refine their query.
-
Search Results: The app communicates with the GitHub REST API to fetch a list of GitHub users matching the search query. The search results are displayed in a list format, showing user username and image.
-
User Details: Clicking on a search result opens a new bottom sheet that displays a larger size image of the selected user along with basic information, providing a detailed view of the user's profile.
-
Day/Night Mode: Support day and night mode
Landing page | Search Result | Details page |
---|---|---|
Empty Page - No Result | Error Page | Dark mode |
---|---|---|
This project follows a multi-module architecture, consisting of the following modules:
-
App: The main Android application module that includes the user interface and navigation, which can integrate various feature module.
-
Core: The core module that houses central dependencies and common implementations used across the project.
-
Network: The network module containing classes and components for making API calls.
-
Search: The main feature module responsible for the search and user details functionality.
-
BuildSrc: The build source module that manages project-level dependencies.
Each module has clean architecture that separates concerns and promotes maintainability.
-
Data Layer (data): This layer is responsible for data retrieval and manipulation. It interacts with external data sources, such as the GitHub REST API, and provides a clean API to the domain layer. Key packages and components include:
- Repository: Manages data sources, caches, and data mapping.
- Data Models: Defines the structure of data entities coming from outer source.
-
Domain Layer (domain): This layer contains the business logic and use cases of the application.
- Use Cases: Contains high-level application-specific use cases.
- Repositories: Specifies the data contract required by use cases.
- Data Models: Defines the structure of domain data entities.
-
Presentation Layer (presentation): This layer handles the user interface and user interaction. It communicates with the domain layer to retrieve data and execute use cases. Key packages and components include:
- UI Components: Contains Compose, activities, fragments, and views.
- View Models: Manages UI-related data and state.
- MVVM with clean architecture pattern
- Coroutine, Flow, Jetpack Compose
- Paging 3 with Lazy Column - show/hide top/bottom loading animation
- Multi-Module
- Unit/UI test code
- Version catalog
- Android new splash screen api
- Ktlint with pre commit gitHook
*Architecture component - A collection of libraries that help to design robust, testable, and maintainable apps. Start with classes for managing your UI component lifecycle and handling data persistence.
- Splash Screen - API lets apps launch with animation, including an into-app motion at launch.
- Ktx - Provide concise, idiomatic Kotlin code
- Coroutines a concurrency design pattern that you can use on Android to simplify code that executes asynchronously.
- Jetpack Compose - Android’s recommended modern toolkit for building native UI.
- Version Catalog - enable you to add and maintain dependencies and plugins in a scalable way.
- Paging - helps you load and display pages of data from a larger dataset from local storage or over network