This app is nothing more than an example of how to architect a mobile application to best use Reactive style programming. This is very close to a MVVM (Model View ViewModel) application. This is a fork from the original MVVMReactive
Reactive architecture breaks an application's interactions into single stream events. Instead of creating impure side effects on a stream, reactive architecture focuses on slamming asynchronous events into synchronous state events that update the UI. Reactive state event updates is very similar to REDUX.
Reactive architecture is built on MVVM. MVVM breaks down an application into more testable components keeping your internal business objects and data separate from the external UI or external data.
The app simply loads a list of "Now Playing" movies based on The Movie Database API.
The requirements for the app:
- As a user, show a list of "Now Playing" movies. Poster, Title, Release Date, & Rating.
- As a user, any rating at eight or above should be stared.
- As a user, I only want to see ratings rounded to the nearest whole digit.
- As a user, while scrolling, keep loading "Now Playing" movies until you hit the last page.
- As a user, restore the last page I was when the "Now Playing" screen restarts.
- As a user, I want to filter my results based on Rating.
The application architecture is as followed:
Note - the application packages are TYPE defined for ease of learning.
Apache License 2.0. Free to use & distribute.
Please review all documentation in docs/. The following summaries describe their purpose:
Name | Summary |
---|---|
AUTHORS.md | History of past and present contributors |
BUILDS.md | Description of official builds |
DEPENDENCIES.md | How to generate a list of all major third party dependencies |
STYLE.md | Description of Code Style and Static Analysis tools |
Only the original build types are release / debug. Use Debug since this not an app for the google play store. There are no flavors.
This project supports the following type of tests:
- Java Unit Test
- Robolectric(There are none - and that was intentional to show how you can test without this when you use MVVM)
- Contract Test (Testing API end point / Restful API contracts)
- Espresso UI Test (Written from engineering perspective)
To run all unit tests:
./gradlew testDebugUnitTest
To run all contract tests:
./gradlew contractTest '-Pcontract=true'
To run all espresso tests:
./gradlew connectedDebugAndroidTest
There are style standards in this app as examples of how to maintain clean code.
To run all checkstyle: ./gradlew checkstyle
To run all lint: ./gradlew lintDebug
The following command works for API emulator version 25 (Pixel 2XL) ./gradlew checkstyle lintDebug jacocoTestReport contractTest -Pcontract=true connectedDebugAndroidTest