package moe.kurumi.moegallery.di.modules;
import android.app.Application;
import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import moe.kurumi.moegallery.data.ImageDataSource;
import moe.kurumi.moegallery.data.ImageRepository;
import moe.kurumi.moegallery.model.setting.Setting;
import moe.kurumi.moegallery.model.setting.SettingImpl;
import moe.kurumi.moegallery.utils.OkHttp;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
@Module
public class AppModule {
private Application mApplication;
public AppModule(Application application) {
mApplication = application;
}
@Singleton
@Provides
Context provideContext() {
return mApplication;
}
@Singleton
@Provides
Application provideApplication() {
return mApplication;
}
@Singleton
@Provides
Gson provideGson() {
return new GsonBuilder()
.setLenient()
.create();
}
@Singleton
@Provides
Retrofit.Builder provideRetrofit(OkHttpClient client, Gson gson) {
return new Retrofit.Builder()
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson));
}
@Singleton
@Provides
@Named("xml")
Retrofit.Builder provideXmlRetrofit(OkHttpClient client, Gson gson) {
return new Retrofit.Builder()
.client(client)
.addConverterFactory(SimpleXmlConverterFactory.create());
}
@Singleton
@Provides
OkHttpClient provideOkHttpClient() {
return OkHttp.getInstance().client();
}
@Singleton
@Provides
Setting provideSetting(Context context) {
SettingImpl.init(context);
return SettingImpl.getInstance();
}
@Singleton
@Provides
ImageDataSource provideImageDataSource() {
return ImageRepository.getInstance();
}
}