package com.artemzin.qualitymatters; import android.support.annotation.NonNull; import com.artemzin.qualitymatters.api.ApiModule; import com.artemzin.qualitymatters.api.ChangeableBaseUrl; import com.artemzin.qualitymatters.api.QualityMattersRestApi; import com.artemzin.qualitymatters.developer_settings.DevMetricsProxy; import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsComponent; import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsModel; import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsModule; import com.artemzin.qualitymatters.developer_settings.LeakCanaryProxy; import com.artemzin.qualitymatters.models.AnalyticsModel; import com.artemzin.qualitymatters.models.ModelsModule; import com.artemzin.qualitymatters.network.NetworkModule; import com.artemzin.qualitymatters.network.OkHttpInterceptorsModule; import com.artemzin.qualitymatters.performance.AsyncJobsModule; import com.artemzin.qualitymatters.performance.AsyncJobsObserver; import com.artemzin.qualitymatters.ui.activities.MainActivity; import com.artemzin.qualitymatters.ui.fragments.ItemsFragment; import com.google.gson.Gson; import javax.inject.Singleton; import dagger.Component; @Singleton @Component(modules = { ApplicationModule.class, NetworkModule.class, OkHttpInterceptorsModule.class, ApiModule.class, AsyncJobsModule.class, ModelsModule.class, DeveloperSettingsModule.class, }) public interface ApplicationComponent { // Provide Gson from the real app to the tests without need in injection to the test. @NonNull Gson gson(); // Provide QualityMattersRestApi from the real app to the tests without need in injection to the test. @NonNull QualityMattersRestApi qualityMattersApi(); @NonNull ChangeableBaseUrl changeableBaseUrl(); // Provide AsyncJobObserver from the real app to the tests without need in injection to the test. @NonNull AsyncJobsObserver asyncJobsObserver(); // Provide LeakCanary without injection to leave. @NonNull LeakCanaryProxy leakCanaryProxy(); @NonNull ItemsFragment.ItemsFragmentComponent plus(@NonNull ItemsFragment.ItemsFragmentModule itemsFragmentModule); @NonNull DeveloperSettingsComponent plusDeveloperSettingsComponent(); @NonNull AnalyticsModel analyticsModel(); DeveloperSettingsModel developerSettingModel(); DevMetricsProxy devMetricsProxy(); void inject(@NonNull MainActivity mainActivity); }