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.
- 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.
- Starter Project Code: Get the starter code for the project.
- Project Rubric: View the project rubric.
- Android Kotlin Developer Nanodegree Program: Learn more about the full program and its related projects.
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.
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).
- 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.
Bookmark List Screen in Landscape Mode
Displays the bookmarked shoes in an optimized layout for landscape orientation.
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.
- 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.
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.
- 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).
This project is open-source and licensed under the Apache 2.0 License. The LICENSE file in this repository provides more details.