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