package com.tevinjeffrey.rutgersct; import android.content.Context; import com.facebook.stetho.okhttp.StethoInterceptor; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.squareup.okhttp.Cache; import com.squareup.okhttp.OkHttpClient; import com.squareup.otto.Bus; import com.tevinjeffrey.rmp.common.RMPModule; import com.tevinjeffrey.rutgersct.database.DatabaseHandler; import com.tevinjeffrey.rutgersct.database.DatabaseHandlerImpl; import com.tevinjeffrey.rutgersct.modules.RetroRutgersModule; import com.tevinjeffrey.rutgersct.receivers.BootReceiver; import com.tevinjeffrey.rutgersct.receivers.DatabaseReceiver; import com.tevinjeffrey.rutgersct.services.Alarm; import com.tevinjeffrey.rutgersct.services.RequestService; import com.tevinjeffrey.rutgersct.ui.MainActivity; import com.tevinjeffrey.rutgersct.ui.sectioninfo.SectionInfoPresenterImpl; import com.tevinjeffrey.rutgersct.ui.settings.SettingsActivity.SettingsFragment; import com.tevinjeffrey.rutgersct.utils.AndroidMainThread; import com.tevinjeffrey.rutgersct.utils.AndroidSchedulerTransformer; import com.tevinjeffrey.rutgersct.utils.BackgroundThread; import com.tevinjeffrey.rutgersct.utils.PreferenceUtils; import com.tevinjeffrey.rutgersct.utils.SchedulerTransformer; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import rx.Scheduler; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @Module( injects = { Alarm.class, RequestService.class, SettingsFragment.class, MainActivity.class, BootReceiver.class, DatabaseReceiver.class, SectionInfoPresenterImpl.class, }, includes = {RetroRutgersModule.class, RMPModule.class}) public class RutgersCTModule { private static final long CONNECT_TIMEOUT_MILLIS = 15000; private static final long READ_TIMEOUT_MILLIS = 20000; private final Context applicationContext; public RutgersCTModule(Context context) { this.applicationContext = context; } @Provides @Singleton @AndroidMainThread public Scheduler provideAndroidMainThread() { return AndroidSchedulers.mainThread(); } @Provides @Singleton @BackgroundThread public Scheduler provideBackgroundThread() { return Schedulers.io(); } @Provides @Singleton public Context provideContext() { return applicationContext; } @Provides @Singleton public DatabaseHandler providesDatabaseHandler(Bus bus) { return new DatabaseHandlerImpl(bus); } @Provides @Singleton public Bus providesEventBus() { return new Bus(); } @Provides @Singleton public Gson providesGson() { return new GsonBuilder() .serializeNulls() .setPrettyPrinting() .create(); } @Provides @Singleton public PreferenceUtils providesPreferenceUtils(Context context) { return new PreferenceUtils(context); } @Provides @Singleton public OkHttpClient providesOkHttpClient(Context context) { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); client.networkInterceptors().add(new StethoInterceptor()); File httpCacheDir = new File(context.getCacheDir(), context.getString(R.string.application_name)); long httpCacheSize = 50 * 1024 * 1024; // 50 MiB Cache cache = new Cache(httpCacheDir, httpCacheSize); client.setCache(cache); if (BuildConfig.DEBUG) { try { cache.evictAll(); } catch (IOException e) { e.printStackTrace(); } } return client; } }