package com.huhx0015.gw2at.injections.modules; import android.app.Application; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import io.reactivex.schedulers.Schedulers; import okhttp3.Cache; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Michael Yoon Huh on 1/31/2017. * * Source: https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2 */ @Module public class NetworkModule { private String mBaseUrl; public NetworkModule(String baseUrl) { this.mBaseUrl = baseUrl; } @Provides @Singleton Cache provideOkHttpCache(Application application) { int cacheSize = 10 * 1024 * 1024; return new Cache(application.getCacheDir(), cacheSize); } @Provides @Singleton Gson provideGson() { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); return gsonBuilder.create(); } @Provides @Singleton OkHttpClient provideOkHttpClient(Cache cache) { return new OkHttpClient(); } @Provides @Singleton Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); return new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) .baseUrl(mBaseUrl) .client(client) .build(); } }