package com.betaseries.betaseries.dagger; import android.content.Context; import com.betaseries.betaseries.BuildConfig; import com.betaseries.betaseries.authentication.AuthenticationManager; import com.betaseries.betaseries.back.UserManager; import com.betaseries.betaseries.back.episodes.unseen.UnseenManager; import com.betaseries.betaseries.webservice.BetaSeriesAPI; import com.google.gson.Gson; import com.squareup.okhttp.OkHttpClient; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import de.greenrobot.event.EventBus; import retrofit.RestAdapter; import retrofit.android.AndroidLog; import retrofit.client.OkClient; /** * Created by florentchampigny on 30/07/15. */ @Singleton @Module public class BetaSeriesModule { @Singleton @Provides public EventBus provideEventBus() { return EventBus.getDefault(); } @Singleton @Provides public Gson provideGson() { return new Gson(); } @Singleton @Provides public UnseenManager provideUnseenManager(Gson gson, Context context) { return new UnseenManager(context, gson); } @Singleton @Provides public UserManager provideUserManager(Gson gson, Context context) { return new UserManager(context, gson); } @Singleton @Provides public OkHttpClient provideOkHttpClient() { OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.networkInterceptors().add(chain -> chain.proceed(chain.request()).newBuilder() .header("Cache-Control", String.format("max-age=%d, only-if-cached, max-stale=%d", 10*60*60, 0)) .build()); return okHttpClient; } @Singleton @Provides public BetaSeriesAPI provideBetaSeriesApi(OkHttpClient okHttpClient, AuthenticationManager authenticationManager) { return new RestAdapter.Builder() .setEndpoint(BuildConfig.URL_BETASERIES) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(okHttpClient)) .setLog(new AndroidLog("Retrofit")) .setRequestInterceptor(request -> { request.addHeader("X-BetaSeries-Key", BuildConfig.API_KEY); request.addHeader("X-BetaSeries-Version", "2.4"); request.addHeader("Accept", "application/json"); String userToken = authenticationManager.getToken(); if (userToken != null) request.addHeader("X-BetaSeries-Token", userToken); }) .build() .create(BetaSeriesAPI.class); } }