This is a Sneakers app that allows users to browse a collection of sneakers, view details about each sneaker, add sneakers to a cart, and view their cart.
- Display a grid of sneakers with pagination.
- Sneaker details page showing name, image, brand, year of release, and price.
- Search from the sneakers collection.
- Add sneakers to cart functionality.
- Cart page displaying all added sneakers with image and price.
- Removal of items from the cart.
- Kotlin - First class and official programming language for Android development.
- Coroutines - For asynchronous and more..
- Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
- Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
- LiveData - Data objects that notify views when the underlying database changes.
- ViewModel - Stores UI-related data that isn't destroyed on UI changes.
- ViewBinding - Generates a binding class for each XML layout file present in that module and allows you to more easily write code that interacts with views.
- Room - SQLite object mapping library.
- Dependency Injection -
- Hilt-Dagger - Standard library to incorporate Dagger dependency injection into an Android application.
- Hilt-ViewModel - DI for injecting ViewModel.
- Navigation - For managing navigation between different screens within a single activity
- Paging3 - To efficiently load and display large lists of items
- Retrofit - A type-safe HTTP client for Android and Java.
- Gradle Kotlin DSL - For writing Gradle build scripts using Kotlin.
com.harshul.shoesapp # Root Package
├── data # For data handling
│ ├── db # Local Persistence Database. Room (SQLite) database
| │ └── dao # Data Access Object for Room
| ├── api # Retrofit API for remote endpoint
│ ├── di # Dependency Injection
| │ └── module # DI Modules
│ ├── models # Model classes
│ ├── pagination # Pagination source and load adapters
│ └── repos # Single source of data
|
├── ui # Activity/View layer
│ ├── adapter # Adapter for RecyclerView
│ ├── components # Jetpack compose components
│ └── view # Main Screen Activity & ViewModel
| ├── fragments # Fragments
| └── viewmodels # Viewmodels
│
└── utils # Utility Classes / Kotlin extensions
Language Choice: Developed the app using Kotlin as per the preference mentioned in the assignment.
UI Design: Designed a simple and functional UI with a focus on usability and performance. Used bottom navigation for easy navigation between screens.
Data Source: Used hardcoded data instead of calling a REST API, as per the assignment instructions.
Page Size: Set the page size for pagination to 5, considering usability and performance aspects.
Hilt Modules and Dependencies: Included test cases to verify the correctness of Hilt modules and dependencies setup.
Room Database Operations: Added test cases to ensure that Room database operations such as insertion and retrieval are working correctly.
Step up your sneaker game with SneakerShip! 👟✨