package com.twistedeqations.rxmvp.sample.app.dagger.module; import android.content.Context; import com.google.gson.Gson; import com.jakewharton.picasso.OkHttp3Downloader; import com.squareup.picasso.Picasso; import com.twistedeqations.rxmvp.sample.app.dagger.AppScope; import com.twistedeqations.rxmvp.sample.app.network.GithubNetwork; import dagger.Module; import dagger.Provides; import java.io.File; import okhttp3.Cache; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import timber.log.Timber; import com.twistedeqations.rxmvp.sample.ext.Constants; @Module public class NetworkModule { @AppScope @Provides public Cache cache(Context context) { return new Cache(new File(context.getCacheDir(), Constants.HTTP_CACHE_DIR), Constants.HTTP_CACHE_SIZE); } @AppScope @Provides public OkHttpClient okHttpClient(HttpLoggingInterceptor loggingInterceptor, Cache cache) { return new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .cache(cache) .build(); } @AppScope @Provides public HttpLoggingInterceptor httpLoggingInterceptor() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor( message -> Timber.d(message)); return logging.setLevel(HttpLoggingInterceptor.Level.BASIC); } @AppScope @Provides public Retrofit retrofit(OkHttpClient okHttpClient, Gson gson) { return new Retrofit.Builder() .client(okHttpClient) .baseUrl("https://api.github.com/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); } @AppScope @Provides public GithubNetwork githubNetwork(Retrofit retrofit) { return retrofit.create(GithubNetwork.class); } @AppScope @Provides public Picasso picasso(Context context, OkHttpClient okHttpClient) { return new Picasso.Builder(context) .downloader(new OkHttp3Downloader(okHttpClient)) .build(); } }