package io.c0nnector.github.paradise.modules; import com.google.gson.Gson; import com.squareup.okhttp.OkHttpClient; import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import io.c0nnector.github.paradise.BuildConfig; import io.c0nnector.github.paradise.R; import io.c0nnector.github.paradise.api.ApiRequestInterceptor; import io.c0nnector.github.paradise.api.ApiService; import io.c0nnector.github.paradise.application.Application; import retrofit.Endpoint; import retrofit.Endpoints; import retrofit.RestAdapter; import retrofit.client.OkClient; import retrofit.converter.GsonConverter; import static java.util.concurrent.TimeUnit.SECONDS; @Module( complete = false, library = true ) public class ApiModule { public static final String PRODUCTION_API_URL = "https://api.angel.co/1"; @Provides @Singleton Endpoint provideEndpoint() { return Endpoints.newFixedEndpoint(PRODUCTION_API_URL); } @Provides @Singleton OkHttpClient provideOkHttpClient() { return createOkHttpClient(); } @Provides @Singleton @Named("apiToken") String providesApiToken(Application application){ return application.getResources().getString(R.string.token_angelist_api); } @Provides @Singleton ApiRequestInterceptor providerequestInterceptor(@Named("apiToken") String token) { return new ApiRequestInterceptor(token); } @Provides @Singleton RestAdapter providesRestAdapter(OkHttpClient okHttpClient, Endpoint endpoint, ApiRequestInterceptor interceptor, Gson gson) { return new RestAdapter.Builder() .setClient(new OkClient(okHttpClient)) .setEndpoint(endpoint) .setConverter(new GsonConverter(gson)) .setRequestInterceptor(interceptor) .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) .build(); } @Provides @Singleton ApiService provideMyApiService(RestAdapter restAdapter) { return restAdapter.create(ApiService.class); } /** * Creates an http client for our api * * @return */ static OkHttpClient createOkHttpClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(15, SECONDS); client.setReadTimeout(15, SECONDS); client.setWriteTimeout(15, SECONDS); return client; } }