package co.smartreceipts.android.di; import android.content.Context; import co.smartreceipts.android.SmartReceiptsApplication; import co.smartreceipts.android.apis.gson.SmartReceiptsGsonBuilder; import co.smartreceipts.android.apis.hosts.ServiceManager; import co.smartreceipts.android.apis.hosts.SmartReceiptsHostConfiguration; import co.smartreceipts.android.config.ConfigurationManager; import co.smartreceipts.android.config.DefaultConfigurationManager; import co.smartreceipts.android.di.scopes.ApplicationScope; import co.smartreceipts.android.identity.store.MutableIdentityStore; import co.smartreceipts.android.model.ColumnDefinitions; import co.smartreceipts.android.model.Receipt; import co.smartreceipts.android.model.Trip; import co.smartreceipts.android.model.impl.columns.receipts.ReceiptColumnDefinitions; import co.smartreceipts.android.persistence.DatabaseHelper; import co.smartreceipts.android.persistence.database.controllers.TableController; import co.smartreceipts.android.persistence.database.controllers.impl.TripTableController; import co.smartreceipts.android.persistence.database.defaults.WhiteLabelFriendlyTableDefaultsCustomizer; import co.smartreceipts.android.rating.data.AppRatingPreferencesStorage; import co.smartreceipts.android.rating.data.AppRatingStorage; import co.smartreceipts.android.settings.UserPreferenceManager; import dagger.Module; import dagger.Provides; import wb.android.flex.Flex; import wb.android.flex.Flexable; import wb.android.storage.StorageManager; @Module public class BaseAppModule { private final SmartReceiptsApplication application; public BaseAppModule(SmartReceiptsApplication application) { this.application = application; } @Provides @ApplicationScope Context provideContext() { return application; } @Provides @ApplicationScope public static Flex provideFlex(Context context) { return new Flex(context, new Flexable() { @Override public int getFleXML() { return Flexable.UNDEFINED; } }); } @Provides @ApplicationScope public static StorageManager provideStorageManager(Context context) { return StorageManager.getInstance(context); } @Provides @ApplicationScope public static DatabaseHelper provideDatabaseHelper(Context context, StorageManager storageManager, UserPreferenceManager preferences, ReceiptColumnDefinitions receiptColumnDefinitions, WhiteLabelFriendlyTableDefaultsCustomizer tableDefaultsCustomizer) { return DatabaseHelper.getInstance(context, storageManager, preferences, receiptColumnDefinitions, tableDefaultsCustomizer); } @Provides @ApplicationScope public static ConfigurationManager provideConfigurationManager(DefaultConfigurationManager manager) { return manager; } @Provides @ApplicationScope public static AppRatingStorage provideAppRatingStorage(AppRatingPreferencesStorage storage) { return storage; } @Provides @co.smartreceipts.android.di.qualifiers.ReceiptColumnDefinitions public static ColumnDefinitions<Receipt> provideColumnDefinitionReceipts(ReceiptColumnDefinitions receiptColumnDefinitions) { return receiptColumnDefinitions; } @Provides @co.smartreceipts.android.di.qualifiers.TripTableController public static TableController<Trip> provideTripTableController (TripTableController tripTableController) { return tripTableController; } @Provides @ApplicationScope public static ServiceManager provideServiceManager(MutableIdentityStore mutableIdentityStore, ReceiptColumnDefinitions receiptColumnDefinitions) { return new ServiceManager(new SmartReceiptsHostConfiguration(mutableIdentityStore, new SmartReceiptsGsonBuilder(receiptColumnDefinitions))); } }