Skip to content

Github jobs application. MVP architecture, Dagger2, RxJava2, Retrofit, Room persistence, Timber and much more!

License

Notifications You must be signed in to change notification settings

fooock/android-github-jobs

Repository files navigation

Github Jobs

Application to show the current opened jobs from Github jobs. You can view and filter jobs by country, company name, title etc using the powerful search engine.

Technically, this application was developed using MVP architecture, divided in three modules:

  • app: Android views, navigation, activities and fragments. If you want to contribute to the look & feel, you need touch this module
  • domain: All business logic lives here!
  • data: Manage persistence, to allow offline mode and fast data recovery.

If you want to compile the application yourself see below.

Building the application

First clone the project:

git clone https://github.com/fooock/android-github-jobs.git

Now, build the application in debug mode to generate the apk :

gradlew app:assembleDebug

If you want to know the current application version, you can execute the gradle task printVersion which produces an output similar to the following:

+----------------------------------
| Version Name: 0.1-89-g27c749b
| Version Code: 1
| Version Code Time: 1517590824
+----------------------------------

Important! If you find any bug, please attach this info in the issue tracker. For this example, the number g27c749b is the commit identifier, and it will allow me to do a checkout, create a new branch and upload the fix.

The application has two build types, and each one initialize things required for the given case. For example, the debug build type, initialize among other things:

  • Log debug tree using Timber . This allows us print only in debug mode logs with DEBUG and INFO tags, because normally, this logs can't be needed in release builds
  • LeakCanary library, to look for memory leaks, and fix it!
  • Database inspection using Stetho
  • Enable StrictMode to detect all kind of problems

Note that in release mode, we only need to catch WARNINGs and ERRORs, and send it to a crash reporting system. For this purpose I created the CrashLibrary class

Images

Tech stack

This project uses the following libraries. You can view for each module what library is used in the dependencies.gradle file.

For application debug, I included:

For application testing:

License

Copyright 2017 Javier (nhitbh at gmail dot com)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.