package com.think.uiloader.ui.di.modules; import android.content.Context; import com.think.tlr.TLRLog; import com.think.uiloader.data.executor.JobExecutor; import com.think.uiloader.data.executor.PostExecutionThread; import com.think.uiloader.data.executor.ThreadExecutor; import com.think.uiloader.data.executor.UIThread; import com.think.uiloader.data.net.Api; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; ; /** * Created by borney on 2/22/17. */ @Module public class ApplicationModule { private static final String TAG = "ApplicationModule"; private final Context appContext; public ApplicationModule(Context context) { this.appContext = context.getApplicationContext(); } @Provides public Context provideContext() { return appContext; } @Provides public ThreadExecutor provideThreadExecutor(JobExecutor jobExecutor) { return jobExecutor; } @Provides public PostExecutionThread providePostExecutionThread(UIThread uiThread) { return uiThread; } @Provides @Singleton public OkHttpClient provideOkhttpClient() { OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(3, TimeUnit.SECONDS) .addInterceptor(new LoggingInterceptor()) .build(); return okHttpClient; } @Provides @Singleton public Retrofit provideRetrofit(OkHttpClient okHttpClient) { Retrofit retrofit = new Retrofit.Builder() .client(okHttpClient) .baseUrl(Api.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); return retrofit; } class LoggingInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); long t1 = System.nanoTime(); TLRLog.i(TAG, String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers())); Response response = chain.proceed(request); long t2 = System.nanoTime(); TLRLog.i(TAG, String.format("Received response for %s in %.1fms%n%s", response.request().url(), (t2 - t1) / 1e6d, response.headers())); return response; } } }