package com.nilhcem.bblfr.core.dagger; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.jakewharton.picasso.OkHttp3Downloader; import com.nilhcem.bblfr.BBLApplication; import com.nilhcem.bblfr.BuildConfig; import com.nilhcem.bblfr.core.map.LocationProvider; import com.nilhcem.bblfr.core.prefs.Preferences; import com.squareup.picasso.Picasso; import java.io.File; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import okhttp3.Cache; import okhttp3.OkHttpClient; import timber.log.Timber; @Module public class BBLModule { private static final int DISK_CACHE_SIZE = 52_428_800; // 50MB (50 * 1024 * 1024) private final BBLApplication mApp; public BBLModule(BBLApplication app) { mApp = app; } @Provides @Singleton LocationProvider provideLocationProvider() { return new LocationProvider(); } @Provides @Singleton Preferences providePreferences() { return new Preferences(mApp); } @Provides @Singleton OkHttpClient provideOkHttpClient() { // Install an HTTP cache in the application cache directory. File cacheDir = new File(mApp.getCacheDir(), "http"); Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE); return new OkHttpClient.Builder().cache(cache).build(); } @Provides @Singleton ObjectMapper provideObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); return mapper; } @Provides @Singleton Picasso providePicasso(OkHttpClient client) { Picasso.Builder builder = new Picasso.Builder(mApp).downloader(new OkHttp3Downloader(client)); if (BuildConfig.DEBUG) { builder.listener((picasso, uri, e) -> Timber.e(e, "Failed to load image: %s", uri)); } return builder.build(); } }