package com.photo.photogallery;
import android.app.Application;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapterFactory;
import com.jakewharton.picasso.OkHttp3Downloader;
import com.photo.photogallery.api.entities.EntityTypeAdapterFactory;
import com.photo.photogallery.network.AppImageLoader;
import com.photo.photogallery.network.PicassoImageLoader;
import com.squareup.picasso.Picasso;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
@Module
public class ApplicationModule {
@NonNull
private final Application application;
public ApplicationModule(@NonNull Application application) {
this.application = application;
}
@Provides
@NonNull
@Singleton
public Application provideOrcheederApp() {
return application;
}
@Provides
@NonNull
@Singleton
public TypeAdapterFactory provideTypeAdapterFactory() {
return EntityTypeAdapterFactory.create();
}
@Provides
@Singleton
Cache provideOkHttpCache(Application application) {
int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(application.getCacheDir(), cacheSize);
return cache;
}
@Provides
@NonNull
@Singleton
public Gson provideGson(TypeAdapterFactory typeAdapterFactory) {
return new GsonBuilder()
.registerTypeAdapterFactory(typeAdapterFactory)
.create();
}
@Provides
@NonNull
@Singleton
public Picasso providePicasso(@NonNull Application application, @NonNull @Named("OkHttpDownloader") OkHttpClient okHttpClient) {
return new Picasso.Builder(application)
.downloader(new OkHttp3Downloader(okHttpClient))
.build();
}
@Provides
@NonNull
@Singleton
public AppImageLoader provideImageLoader(@NonNull Picasso picasso) {
return new PicassoImageLoader(picasso);
}
}