You can download the source from this Github link
IDE: Android Studio ver:3.5
Language: Kotlin. 1.3.5
Build: Gradle.
Start Time: 20/01/2020
Architecture: Clean Architecture Best Explanation
- Kotlin
- Dagger
- RxJava/Android
- Constraint Layout
- Retrofit
- Gson
- Youtube.Jar
- Lottie
- Androidx
- Caching
- Pagination
- BottomBar
- Get Configuration
- Get Popular Movies
- Get Top Trending Movies
- Get Trailers
- Play Trailers
- Get Movies Details
- Search Movies
- Offline from Local Cache. (if once user loaded the data, next time if no internet, data will be fetched from cache.)
- Unit Test cases (Due to time constraint and office work. all dependencies are set up anyway.)
- Multi variants
- Auto APK naming
- Build system
Contains 3 layers
1. Presentation
2. Domain
3. Data
__src
|libs
|youtube.jar
|main
|kotlin->cloudwalker->demo->presentation
|main->
activity
Contains main activity, this projects based on single activity, MainActivity
appflow
Contains a class that handles back press events from any screen
application
Contains the Application class. where some common dagger dependencies injected.
dagger
Contains package to provide dependencies though out the application
exception
Contains wrapper class for error handling
execution
Provides main thread
fragment
Base fragment, and fragmentEnum that provides fragments
presenter
Main presenter
runtime
Constraint classes
view
Main View
ui->
commons
Contains two common contracts(Interfaces) used to get movie clicks and movie object
and a common data class named Result.
landing
landing screens is second page after splash it downloads the configuration
moviedetails
when user click on see movie details, this page will be loaded and shown the movie details and trailer
movieshome
This fragments host the thee fragments
moviespopular
Popular movies will be listed here.
nowplaying
Top trending movies will be listed
searchmovie
user can search movies
splash
Splash screen.
__src
|main
|java->cloudwalker->demo->domain
exceptions
Exceptions wrapper classes
executors
Interfaces to implement in domain fetcher
fetchers
Domain fetcher/Use Cases an interface that data layers implements
interactors
Base interactor class
modules
configuration
beans -> Query and Response class
interactor -> Interactor's implementions that invokes domain fetcher's method that are implemented on data layer
moviesdetails
beans
interactor
nowplaying
beans
interactor
popularmovies
beans
interactor
searchmovie
beans
interactor.
__src
|main
|kotlin->cloudwalker->demo->data
executors
To do operation on separate threading simoultanously
fetchers
Domain fetcher's implementation e.g use cases getMovies etc
webservices
retrofit, httpclient api interfaces.
prod //Not implemented
these are build flavours to execute different functionlity on different build flavours
sandbox//Not implemented
test//Not implemented
uat//Not implemented