Kare is a comprehensive Android fitness application designed to offer a personalized and efficient workout experience. It allows users to navigate through various exercises, tailor workouts to their preferences, and track their progress over time. The app emphasizes ease of use and provides a range of functionalities from selecting muscle groups to configuring individual workout details. With its user-friendly interface and detailed exercise database, Kare aims to be a versatile companion for fitness enthusiasts of all levels.
- Overview: The first screen in the app, displaying a grid of muscle groups.
- Functionality: Enables users to select a muscle group to find exercises, particularly useful for adding specific exercises to a workout.
- Overview: Lists all exercises for the chosen muscle group.
- Features: Offers four filter options based on the exercise execution method - Barbell, Dumbbell, Calisthenics, and Machine.
- Overview: Provides detailed information about a selected exercise.
- Content: Features a YouTube video demonstration, a descriptive summary, and an "Add to workout" button.
- Overview: Accessible after selecting the "Add to workout" option.
- Functionality: Includes a search bar and a list view of all user-created workouts.
- Overview: Can be accessed from the bottom navigation bar, featuring two options: Dashboard and Workouts.
- Functionality: Displays either 'MyWorkout' (the selected workout) or all workouts created by the user, based on the selected filter.
- Overview: Shows the details of a chosen workout.
- Content: Lists all exercises included in the workout, with a persistent footer for adding new exercises.
- Overview: For adding exercises to a workout from the Workout Details Screen.
- Content: Showcases a searchable list of all exercises, sorted by muscle groups.
- Overview: Allows users to configure sets, reps, and weights for a selected exercise.
- Features: Customization of exercise parameters with the option to add them to the workout.
- Overview: A standard settings screen.
- Options: Includes configurations such as push notifications, logout, language selection, etc.
- Onboarding Screen: To provide a personalized experience based on user details like name, age, weight, and workout experience.
- Statistics Screen: To monitor and display the user's progress in various exercises and workouts.
- Do Workout Screen: Designed for executing workouts, featuring a video player, timer, and set completion toggles for exercises.
Kare is designed with a focus on clean architecture, robust data handling, and modern UI design principles. Below is an overview of the key architectural and modular aspects of the app:
- Layer Separation: The app is structured with distinct layers (Presentation, Domain, Data), ensuring a clear separation of concerns.
- Use Cases: Each action the user can perform is encapsulated in use cases, making the code more modular and testable.
- Repositories and Data Sources: Data operations are abstractly handled by repositories, which in turn interact with specific data sources (remote API, local database).
- Room Database: Utilizes complex structures with entity relationships and DAOs for local data management.
- Caching Mechanism: Implements caching to toggle between remote and local data sources, optimizing data retrieval and reducing network load.
- Custom Network Handler: A tailored network handler manages all interactions with the remote API, ensuring efficient and reliable data synchronization.
- Dependency Injection: Dagger-Hilt is used for injecting dependencies like data sources and network handlers, promoting scalability and maintainability.
- MVVM and MVI: Combines the best of MVVM (Model-View-ViewModel) and MVI (Model-View-Intent) architectures for a robust and predictable UI layer.
- Single Activity Architecture: Utilizes a single activity approach, with Jetpack Compose handling the UI navigation and screen compositions.
- Jetpack Compose: Kare's first version leveraging Jetpack Compose for building native UIs.
- Material Design 3: Adheres to the latest Material Design guidelines to provide an intuitive and responsive user experience.
- Unit and UI Testing: Comprehensive testing strategy covering unit tests for business logic and UI tests for ensuring interface integrity.
This architecture not only ensures that Kare is a cutting-edge fitness app but also makes it highly maintainable and scalable, ready for future enhancements and features.
Kare utilizes a variety of modern libraries and frameworks to provide a robust and efficient user experience. Here's an overview of the key technologies:
- Android SDK: Targeting SDK version 34 with a minimum SDK version of 24.
- Kotlin: Leveraging Kotlin for modern, concise, and safe code.
- Jetpack Compose: For building native UIs in a declarative style.
- Material3: For implementing Material Design components in Compose.
- Retrofit 2: For network calls and data handling.
- OkHttp3: As the HTTP client, used alongside Retrofit.
- Moshi & Gson: For JSON serialization and deserialization.
- Dagger-Hilt: For dependency injection, simplifying the architecture and reducing boilerplate.
- Room: As an abstraction layer over SQLite, to manage local databases more efficiently.
- Kotlin Coroutines: For managing background tasks efficiently and cleanly.
- YouTube Player Library: To embed and control YouTube videos.
- MultiDex: To overcome the 64K method limit in Android apps.
- JUnit: For unit testing.
- Espresso: For UI testing.
This set of libraries and frameworks ensures that Kare is built on a solid foundation of tried and tested technologies, making it a reliable and scalable fitness app.