package in.mvpstarter.sample.data.remote;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import in.mvpstarter.sample.BuildConfig;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import timber.log.Timber;
/**
* Provide "make" methods to create instances of {@link MvpStarterService}
* and its related dependencies, such as OkHttpClient, Gson, etc.
*/
public class MvpStarterServiceFactory {
public static MvpStarterService makeStarterService() {
return makeMvpStarterService(makeGson());
}
private static MvpStarterService makeMvpStarterService(Gson gson) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.POKEAPI_API_URL)
.client(makeOkHttpClient())
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return retrofit.create(MvpStarterService.class);
}
private static OkHttpClient makeOkHttpClient() {
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(message
-> Timber.d(message));
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClientBuilder.addInterceptor(loggingInterceptor);
httpClientBuilder.addNetworkInterceptor(new StethoInterceptor());
}
return httpClientBuilder.build();
}
private static Gson makeGson() {
return new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
}
}