The past decade held a lot of movies, some left a mark and some were just a set of 24-60 pictures per second. We would like you to create a Master - Detail Application to showcase those movies and the signature they left behind.
You will have a local list of movies that should be displayed in any order. The list is searchable and the search results will be categorized by Year.
Each search result category will hold at most the top rated 5 movies of this category (year).
Once a movie is selected from the search results, you will switch to a detailed view to unveil the following:
- Movie Title
- Movie Year
- Movie Genres (if any)
- Movie Cast (if any)
- A two column list of pictures fetched from flickr that matches the movie title as the search query
- Fetch Movies list from .json file and display them in Master-Detail flow.
- Show every movie details in separate screen
- Cache data offline for the movie's photos.
- Search for movies by its title.
- Search data is categorized by year and it shows only top 5 movies in that category.
The project is following clean architucte , It’s a group of practices and decisions that makes the code testable with independable components.
The following diagram shows how all the modules will interact with one another.
As illustrated in the image above each component depends only on the component below it. the higher layers will request the needed data from the layers below it and the data is being provided by the lower layers by a reactive paradigm.
Allows classes to define their dependencies without constructing them. At runtime, another class is responsible for providing these dependencies
- For DI we are using Koin
The layer that interacts with the UI. for this layer we are applying MVVM architecture pattern
Implements interaction with the Android SDK and provides concrete implementations for the data layer (Room implementation).
Sometimes called interactors. Defines actions the user can trigger
Abstract definition of all the data sources. (Network / Local )
Contain abstract and concrete implementation for any logic that is related to network calls.
Abstract definition for the local data persistence.
Contains business logic and entities.
- The project is only dependant on flicker api. You can create a key from here
- Once you have created the key insert it build.gradle(Module: pp) for both debug and release variants in API_KEY field.
- Coroutine for threading
- RxJava/RxAndroid for reactive programming
- Retrofit for consuming REST APIs
- Koin for dependency injection
- Glide for loading images from remote servers
- Facebook Shimmer library as loading animation
- Room as presistance library.
- Gson as data parser.