package com.tutosandroidfrance.dagger2sample.dagger2.module;
import android.content.Context;
import com.tutosandroidfrance.dagger2sample.BuildConfig;
import com.tutosandroidfrance.dagger2sample.storage.Storage;
import com.tutosandroidfrance.dagger2sample.webservice.GithubService;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.android.AndroidLog;
/**
* Ce module permet de récupérer le GithubService et le Storage
* Dagger2 va les crééer de façon unique (Singleton) et ils seront accéssibles depuis le GithubComponent
*/
@Module
public class GithubModule {
/**
* Retourne un Storage à Dagger2, construit avec le Context, injecté par Dagger2
* @param context Contexte de l'application, fournit par Dagger2
*/
@Provides
@Singleton
public Storage provideStorage(Context context){
return new Storage(context);
}
/**
* Créé le GithubService via Retrofit, qui réaliser les appels webservices,
* en utilisant le StorageModule afin de gérer les clés
*
* @param storage le Storage injecté par Dagger2 via le StorageModule
*/
@Singleton
@Provides
public GithubService provideGithubService(final Storage storage) {
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.URL_GITHUB)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new AndroidLog("Retrofit"))
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
String key = storage.getApiKey();
if (key != null) {
//ajoute aux header la ApiKey en clé bearer
request.addHeader("bearer", key);
}
}
})
.build()
.create(GithubService.class);
}
}