Skip to content

An Android app built with Kotlin to catalog and bookmark favorite shoes. It demonstrates MVVM architecture, DataStore for preferences, and Koin for dependency injection. The project features clean code practices and dynamic UI using Kotlin Flow.

License

Notifications You must be signed in to change notification settings

AliElDerawi/MyShoeCollection

Repository files navigation

MyShoe Collection

MyShoe Collection is an app designed to help users catalog and bookmark their favorite shoes, providing a simple and organized way to save and manage a personalized shoe collection. Managing personal shoe collections can be cumbersome, especially for shoe enthusiasts. MyShoe Collection simplifies this process by offering a centralized platform for managing and viewing shoes efficiently. This project is part of the Udacity Android Kotlin Developer Nanodegree Program.

Note: Offline functionality is not required for this particular project, but it is implemented in Project02 and Project04.

Main Features of the Project

  • MVVM Design Pattern and Clean Architecture: Ensures a scalable and testable codebase by separating concerns and using a reactive approach.
  • SharedViewModel for State Management: Allows users to create their own bookmarked shoe list and saves data inside SharedViewModel.
  • Orientation Support: Supports landscape and portrait modes without data loss or reloading, ensuring a seamless user experience.
  • Simplified Layouts: Implements simplified layouts using ConstraintLayout, LinearLayout, or FrameLayout to maintain a consistent UI.
  • Reactive UI: Integrates DataBindingAdapter for reactive and clean UI components.
  • Dependency Injection with Koin: Implements Koin for effective dependency management, improving code maintainability.
  • Dynamic Forms using Kotlin Flow: Uses Kotlin Flow for dynamic filling forms, enabling responsive and interactive UIs.
  • Single Activity Architecture: Features a single activity with multiple fragments to ensure modular navigation and state retention.
  • Jetpack DataStore: Implements Jetpack DataStore for storing and retrieving user preferences asynchronously, providing a modern alternative to SharedPreferences.
  • Onboarding Screen: Includes an onboarding screen to enhance the initial user experience and guide users through the app's features.

Useful Links

Note: Many improvements and features in this project are not included in the Project Rubric as it was initially a project for the Udacity Nanodegree Program.

Installation Guide

This project does not require any special installation setup. Follow these steps:

  • Clone the Repository: Run the following command in your terminal:

    git clone https://github.com/AliElDerawi/MyShoeCollection.git
    
  • Open in Android Studio: Open the project in Android Studio Ladybug (2024.2.1 Patch2).

  • Build the Project: Build the project using Gradle Plugin v(8.7.2).

Main Included External Libraries

  • Koin v4: Dependency injection framework, allowing modularity and making the project easier to test.
  • Timber: A lightweight logging utility for debugging purposes.
  • Glide v4: Efficient image loading and caching.
  • DataStore: Storing and retrieving user preferences asynchronously.
  • Security Crypto: Encrypts user-sensitive data to ensure security.
  • CircleIndicator: Provides page indicators for ViewPager.
  • CircularProgressBar: Implements progress indication for the onboarding screen.
  • KSP: Annotation processors plugin for improved build performance.

Snapshots from the App

Phone Screens (Portrait)

Login Screen

Login Screen
Demonstrates the initial login functionality of the app.

Onboarding Screen

Onboarding Screen
Guides users through the key features of the app.

Add Shoe to Bookmark Screen

Add Shoe to Bookmark Screen
Allows users to add their favorite shoes to a bookmark list for easy reference.

Dynamic Filling Form Screen

Dynamic Filling Form Screen
Uses Kotlin Flow to dynamically validate user input in real-time.

Phone Screens (Landscape)

Bookmark List Screen in Landscape Mode

Bookmark List Screen in Landscape Mode
Displays the bookmarked shoes in an optimized layout for landscape orientation.

Contributing

Contributions are welcome! Please open an issue or submit a pull request for improvements or bug fixes. Feel free to reach out if you'd like to add new features or expand on existing ones.

How to Contribute

  • Fork the Repository: Click the "Fork" button at the top.
  • Create a Feature Branch: Branch off from main for any features (git checkout -b feature/your-feature).
  • Submit a Pull Request: Submit a PR describing your changes.

Contact

Feel free to reach out for any collaboration opportunities or if you have any questions. I'd love to hear your thoughts and contributions! Check my GitHub profile.

Future Improvements

  • Offline Functionality: Implement offline capabilities similar to other projects to enhance usability.
  • User Authentication: Enhance the login process with third-party authentication options (e.g., Google, Facebook).

License

This project is open-source and licensed under the Apache 2.0 License. The LICENSE file in this repository provides more details.

About

An Android app built with Kotlin to catalog and bookmark favorite shoes. It demonstrates MVVM architecture, DataStore for preferences, and Koin for dependency injection. The project features clean code practices and dynamic UI using Kotlin Flow.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages