Skip to content

harshulsingla0110/sneakers-app

Repository files navigation

Sneakers App

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.

Screenshot

About

  • 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.

Built With 🛠

  • 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.

Package Structure

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

Assumptions and Decisions

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.

Test Cases

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! 👟✨