Tv Maze Client is a comprehensive app designed to search for and provide detailed information about TV series.
Originally, this app utilized XML for view creation and Koin for dependency injection. To enhance and modernize the app, I have recreated the views using Jetpack Compose and switched the dependency injection framework to Hilt. Rather than replacing the original implementation, I have maintained both versions, allowing users to choose and evaluate their preferred approach.
The app supports Light and Dark mode.
- Kotlin
- MVVM (Model View ViewModel)
- Clean Code
- XML
- Jetpack Compose
- LiveDatas (For XML-Based Path)
- StateFlows and ShareFlows (For Jetpack Compose Path)
- Facebook Shimmer (For XML-Based Path)
- Compose Shimmer (For Jetpack Compose Path)
- Gson - JSON serialization.
- Material Design - UI tools.
- Lottie - MainScreen Animation
- 📔 data (Store data objects)
- 📔 exception (Store the exceptions created to handle errors)
- 📔 local (Store the classes to setup and access the Room database)
- 📔 remote (Store the api interfaces and dto objects)
- 📔 repository (Store the repositories implementations)
- 📔 di (Store the dependecy injection setup files)
- 📔 domain (Store repositories, use cases and business logics)
- 📔 model (Store the domain models)
- 📔 repository (Store the repositories interfaces)
- 📔 use_case (Store the use case classes that will handle business logics)
- 📔 presentation (Store the classes responsible to present screens )
- 📔 compose (Store the UI files for the Jetpack Compose perspective of the app)
- 📔 navigation (Store the classes that will handle navigation)
- 📔 screen (Store the Views, Activities and viewModels)
- 📔 theme (Store the files that will handle theming)
- 📔 widget (Store the custom widgets)
- 📔 compose (Store the UI files for the Jetpack Compose perspective of the app)
- 📔 xml_bases (Store the UI files for the XML-based perspective of the app)
- 📔 navigation (Store the classes that will handle navigation)
- 📔 screen (Store the Fragments, Activities and viewModels)
- 📔 widget (Store the custom widgets)
- 📔 util (Store extensions and util classes)
111 Unit Tests were created for this application and they are separated into repository tests, use case tests, and view model tests.
- 📔 repository (Store Repository tests)
- 📔 use_case (Store Use Case tests)
- 📔 util (Store Mocks to be used in the tests)
- 📔 view_model (Store ViewModel tests)

33 Instrumented Tests were created for this application.

- ✅ List all of the series contained in the API used by the paging scheme provided by the API.
- ✅ Allow users to search series by name.
- ✅ The listing and search views must show at least the name and poster image of the series.
- ✅ After clicking on a series, the application should show the details of the series, showing the following information: Name, Poster, Days and time during which the series airs, Genres, Summary, List of episodes separated by season
- ✅ After clicking on an episode, the application should show the episode’s information, including: Name, Number, Season, Summary, Image, if there is one
- ✅ Allow the user to set a PIN number to secure the application and prevent unauthorized users.
- ✅ For supported phones, the user must be able to choose if they want to enable fingerprint authentication to avoid typing the PIN number while opening the app.
- ✅ Allow the user to save a series as a favorite.
- ✅ Allow the user to delete a series from the favorites list.
- ✅ Allow the user to browse their favorite series in alphabetical order, and click on one to see its details.
- ✅ Create a people search by listing the name and image of the person.
- ✅ After clicking on a person, the application should show the details of that person, such as: Name, Image, Series they have participated in, with a link to the series details.
- ✅ Create Unit Tests
All requirements have been made in the app