package com.philosophicalhacker.philhackernews.daggermodules; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.philosophicalhacker.philhackernews.data.CursorToItemConverter; import com.philosophicalhacker.philhackernews.data.DataConverter; import com.philosophicalhacker.philhackernews.data.DataFetcher; import com.philosophicalhacker.philhackernews.data.cache.CachedDataFetcher; import com.philosophicalhacker.philhackernews.data.cache.HackerNewsCache; import com.philosophicalhacker.philhackernews.data.cache.HackerNewsContentProvider; import com.philosophicalhacker.philhackernews.data.cache.HackerNewsDatabaseOpenHelper; import com.philosophicalhacker.philhackernews.data.remote.HackerNewsRestAdapter; import com.philosophicalhacker.philhackernews.data.remote.RemoteDataFetcher; import com.philosophicalhacker.philhackernews.data.sync.HackerNewsSyncService; import com.philosophicalhacker.philhackernews.model.Item; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import retrofit.RestAdapter; /** * * Provides dependencies for all objects in the data module. * * Created by MattDupree on 7/19/15. */ @Module(library = true, injects = { HackerNewsContentProvider.class, HackerNewsSyncService.class }, complete = false) public class DataModule { public static final String HACKERNEWSDATA_DB_FILE_NAME = "hackernewsdata.db"; public static final String HACKER_NEWS_API_ENDPOINT = "https://hacker-news.firebaseio.com/v0"; @Provides ContentResolver provideContentResolver(Context context) { return context.getContentResolver(); } @Singleton @Provides HackerNewsCache provideHackerNewsCache(ContentResolver contentResolver) { return new HackerNewsCache(contentResolver); } @Singleton @Provides HackerNewsRestAdapter privideHackerNewsRestAdapter() { RestAdapter build = new RestAdapter.Builder() .setEndpoint(HACKER_NEWS_API_ENDPOINT) .setLogLevel(RestAdapter.LogLevel.FULL) .build(); return build.create(HackerNewsRestAdapter.class); } @Singleton @Provides @Named(RemoteDataFetcher.DAGGER_INJECT_QUALIFIER) DataFetcher provideRemoteDataFetcher(HackerNewsRestAdapter hackerNewsRestAdapter) { return new RemoteDataFetcher(hackerNewsRestAdapter); } @Singleton @Provides @Named(CachedDataFetcher.DAGGER_INJECT_QUALIFIER) DataFetcher provideCachedDataFetcher(ContentResolver contentResolver, DataConverter<List<Item>, Cursor> dataConverter) { return new CachedDataFetcher(contentResolver, dataConverter); } @Singleton @Provides DataConverter<List<Item>, Cursor> provideCursorToStoryIdsDataConverter() { return new CursorToItemConverter(); } @Singleton @Provides HackerNewsDatabaseOpenHelper provideHackerNewsDatabaseOpenHelper(Context context) { return new HackerNewsDatabaseOpenHelper(context, HACKERNEWSDATA_DB_FILE_NAME, null, 1); } @Singleton @Provides SQLiteDatabase provideHackerNewsDatabase(HackerNewsDatabaseOpenHelper hackerNewsDatabaseOpenHelper) { return hackerNewsDatabaseOpenHelper.getWritableDatabase(); } }