Giter Club home page Giter Club logo

gif-browser's Introduction

GIF-browser Actions Status codecov

This repository contains Giphy GIF browser Android application which is done as Mobimeo Android Interview Challenge.

Screenshot Screenshot

Functionality

The app is composed of 2 screens:

Main Activity

It allows you to search for GIFs. Network results are kept in being loaded on UI. It supports pagination and loads more when the user scrolls down.

Preview Activity

It previews the selected GIF in fullscreen.

Building

You can clone and open the project in Android studio and press run!

Testing

The project uses local unit tests that run on your computer. To run those tests and generate a coverage report, you can run:

./gradlew jacocoReport

NOTE: You can find the tests report in app/build/reports/jacoco/jacocoReport/html/index.html

Technical details

The Application implemented and structured based on Clean Architecture and SOLID principles best practices and the presentation layer is implemented based on the MVP pattern.

The Data layer contains Network Client implemented by Retrofit library to get access to remote data on GIPHY API. It also uses Retrofit caching feature to save some results to load in case of no internet connection.

The Domain layer consists of a Repository that allows access to the Data layer. It also uses Kotlin Coroutines IO and Main dispatchers to execute long-running tasks in the background and reflect the result on UI. There is also a Test dispatcher that executes tasks immediately on the same unit test thread.

Repository Pattern

The View layer is done with two Activities and multiple Fragments which uses the main contract interfaces for implementing the view and presenter to respond to user interactions.

The Koin library does the dependency injections in the whole app.

GitHub Actions CI service is running the repo tests and build Gradle tasks and jacoco plugin generates and submit the code coverage reports to codecov.io.

There are some unit tests using Mockito and Kluent and some Android tests using Robolectric.

Libraries

  • Timber logger library made by Jake Wharton
  • Glide GIF image downloading and caching library made by bumptech
  • Retrofit and OkHttp API libraries made by square
  • Kotlin Serialization plugin made by jetbrains
  • Koin dependency injector library made by InsertKoinIO
  • Kluent assertions library made by MarkusAmshove

gif-browser's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.