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;
}
}
}