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; import okhttp3.logging.HttpLoggingInterceptor; @Module public class NetworkModule { @Provides @NonNull @Singleton public HeadersInterceptor provideTokenInterceptor() { return new HeadersInterceptor(); } @Provides @NonNull @Singleton public QueryInterceptor provideQueryParamsInterceptor() { return new QueryInterceptor(); } @Provides @Singleton @NonNull public HttpLoggingInterceptor provideHttpLoggingInterceptor() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BASIC); return logging; } @Provides @NonNull @Singleton public OkHttpClient provideOkHttpClient( @NonNull HttpLoggingInterceptor httpLoggingInterceptor, @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(httpLoggingInterceptor); okHttpBuilder.addInterceptor(headersInterceptor); okHttpBuilder.addInterceptor(queryInterceptor); return okHttpBuilder.build(); } @Provides @NonNull @Singleton @Named("OkHttpDownloader") public OkHttpClient provideOkHttpDownloader( @NonNull HttpLoggingInterceptor httpLoggingInterceptor, @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(httpLoggingInterceptor); return okHttpBuilder.build(); } }