package com.artemzin.qualitymatters.developer_settings;
import android.app.Application;
import android.support.annotation.NonNull;
import com.artemzin.qualitymatters.models.AnalyticsModel;
import com.artemzin.qualitymatters.ui.other.ViewModifier;
import com.artemzin.qualitymatters.ui.presenters.DeveloperSettingsPresenter;
import com.github.pedrovgs.lynx.LynxConfig;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import hu.supercluster.paperwork.Paperwork;
import okhttp3.logging.HttpLoggingInterceptor;
import static android.content.Context.MODE_PRIVATE;
@Module
public class DeveloperSettingsModule {
@NonNull
public static final String MAIN_ACTIVITY_VIEW_MODIFIER = "main_activity_view_modifier";
@Provides
@NonNull
@Named(MAIN_ACTIVITY_VIEW_MODIFIER)
public ViewModifier provideMainActivityViewModifier() {
return new MainActivityViewModifier();
}
@Provides
@NonNull
public DeveloperSettingsModel provideDeveloperSettingsModel(@NonNull DeveloperSettingsModelImpl developerSettingsModelImpl) {
return developerSettingsModelImpl;
}
@Provides
@NonNull
@Singleton
public DeveloperSettings provideDeveloperSettings(@NonNull Application application) {
return new DeveloperSettings(application.getSharedPreferences("developer_settings", MODE_PRIVATE));
}
@Provides
@NonNull
@Singleton
public LeakCanaryProxy provideLeakCanaryProxy(@NonNull Application application) {
return new LeakCanaryProxyImpl(application);
}
@Provides
@NonNull
@Singleton
public Paperwork providePaperwork(@NonNull Application application) {
return new Paperwork(application);
}
// We will use this concrete type for debug code, but main code will see only DeveloperSettingsModel interface.
@Provides
@NonNull
@Singleton
public DeveloperSettingsModelImpl provideDeveloperSettingsModelImpl(@NonNull Application application,
@NonNull DeveloperSettings developerSettings,
@NonNull HttpLoggingInterceptor httpLoggingInterceptor,
@NonNull LeakCanaryProxy leakCanaryProxy,
@NonNull Paperwork paperwork) {
return new DeveloperSettingsModelImpl(application, developerSettings, httpLoggingInterceptor, leakCanaryProxy, paperwork);
}
@Provides
@NonNull
public DeveloperSettingsPresenter provideDeveloperSettingsPresenter(@NonNull DeveloperSettingsModelImpl developerSettingsModelImpl,
@NonNull AnalyticsModel analyticsModel) {
return new DeveloperSettingsPresenter(developerSettingsModelImpl, analyticsModel);
}
@NonNull
@Provides
public LynxConfig provideLynxConfig() {
return new LynxConfig();
}
@NonNull
@Provides
@Singleton
public DevMetricsProxy provideDevMetricsProxy(@NonNull Application application) {
return new DevMetricsProxyImpl(application);
}
}