package com.photo.photogallery.network; import android.support.annotation.NonNull; import com.photo.photogallery.Config; import java.util.concurrent.TimeUnit; import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import okhttp3.Cache; import okhttp3.OkHttpClient; @Module public class NetworkModule { @Provides @NonNull @Singleton public HeadersInterceptor provideTokenInterceptor() { return new HeadersInterceptor(); } @Provides @NonNull @Singleton public QueryInterceptor provideQueryParamsInterceptor() { return new QueryInterceptor(); } @Provides @NonNull @Singleton public OkHttpClient provideOkHttpClient( @NonNull HeadersInterceptor headersInterceptor, @NonNull QueryInterceptor queryInterceptor, @NonNull Cache cache) { final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder() .connectTimeout(Config.API_CONNECTION_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(Config.API_WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(Config.API_READ_TIMEOUT, TimeUnit.SECONDS); okHttpBuilder.cache(cache); okHttpBuilder.addInterceptor(headersInterceptor); okHttpBuilder.addInterceptor(queryInterceptor); return okHttpBuilder.build(); } @Provides @NonNull @Singleton @Named("OkHttpDownloader") public OkHttpClient provideOkHttpDownloader(@NonNull Cache cache) { final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder() .connectTimeout(Config.API_CONNECTION_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(Config.API_WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(Config.API_READ_TIMEOUT, TimeUnit.SECONDS); okHttpBuilder.cache(cache); return okHttpBuilder.build(); } }