Shutter-Stock-Client

Master/Details Android app consumes the ShutterStock specially the search api to retrieve images using the query submitted by the user

Clone the Repository

As usual, you get started by cloning the project to your local machine:
replace YOUR-USERNAME with your account username

$ git clone https://github.com/YOUR-USERNAME/Shutter-Stock-Client.git

Main features:

  • Images search
  • endless scroll
  • Image Viewer

ScreenShots:

       

Languages & Libraries:

  • Kotlin
  • Retrofit
  • Picasso
  • Dagger2
  • RxJava
  • ReactiveStreams
  • LiveData
  • ViewModel
  • Motion layout
  • Mock Web Server

Technical Choices

Architecture Level:

  • I applied MVVM architecture with using the LiveData and ViewModel from Android Jetpack which is recommeded by Google, to get the app layer less coupling and high cohesion. Using view models to store and manage UI-related data in a lifecycle conscious way

   

Implementation Level:

  • Retrofit -> to make a REST API calls in a reliable way.
  • Picasso -> to manage the loading of the images from urls.
  • Dagger2 -> for dependency injectio
  • Rxjava & ReactiveStreams -> to handle the asynchronous tasks efficiently, and reactive streams to adapt the Rx Observables with the LiveData
  • Mock Web Server -> to mock web API calls in unit testing

Todo:

  • implement disk cache using database , to cache the most search result with responsible validity cache policy.
  • secure the CLIENNT_API_KEY and SECRET_KEY.
  • add more error handling, as i just handled the most common errors from the HttpExceptions [500, 400, 401]
  • refactor the error handling in the BaseFragment, it could be more reliable.
  • add more test [unit - ui testing] cases to incrase the code coverage.
  • style the app, use values files [dimensions - constants - styles - strings] in the app instead of hardcoded values.
  • localize tha app.
  • enable proguard rules.
  • apply filter touches when obscured
  • use the navigation library from Jetpack
  • Add a Network Security Configuration file
  • lower the min sdk to support more users.