package de.stephanlindauer.criticalmaps;
import android.content.Context;
import android.content.SharedPreferences;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.picasso.OkHttpDownloader;
import com.squareup.picasso.Picasso;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import de.stephanlindauer.criticalmaps.handler.ServerResponseProcessor;
import de.stephanlindauer.criticalmaps.model.ChatModel;
import de.stephanlindauer.criticalmaps.model.OtherUsersLocationModel;
import de.stephanlindauer.criticalmaps.model.OwnLocationModel;
import de.stephanlindauer.criticalmaps.model.TwitterModel;
import de.stephanlindauer.criticalmaps.model.UserModel;
import de.stephanlindauer.criticalmaps.provider.EventBusProvider;
import de.stephanlindauer.criticalmaps.managers.LocationUpdateManager;
@Module
public class AppModule {
private final App app;
public AppModule(App app) {
this.app = app;
}
@Provides
@Singleton
public App provideApp() {
return app;
}
@Provides
@Singleton
public OkHttpClient provideOKHttpClient() {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setConnectTimeout(15, TimeUnit.SECONDS);
return okHttpClient;
}
@Provides
@Singleton
public Picasso providePicasso(App app, OkHttpClient client) {
return new Picasso.Builder(app)
.downloader(new OkHttpDownloader(client))
.build();
}
@Provides
@Singleton
public ChatModel provideChatModel() {
return new ChatModel();
}
@Provides
@Singleton
public UserModel provideUserModel() {
return new UserModel();
}
@Provides
@Singleton
public TwitterModel provideTwitterModel() {
return new TwitterModel();
}
@Provides
@Singleton
public OwnLocationModel provideOwnLocationModel() {
return new OwnLocationModel();
}
@Provides
@Singleton
public ServerResponseProcessor serverResponseProcessor(OtherUsersLocationModel otherUsersLocationModel, EventBusProvider eventService, ChatModel chatModel) {
return new ServerResponseProcessor(otherUsersLocationModel, eventService, chatModel);
}
@Provides
@Singleton
public OtherUsersLocationModel provideOtherUsersLocationModel() {
return new OtherUsersLocationModel();
}
@Provides
@Singleton
public EventBusProvider provideEventBusProvider() {
return new EventBusProvider();
}
@Provides
@Singleton
public LocationUpdateManager provideLocationUpdatesService(
OwnLocationModel ownLocationModel,
EventBusProvider eventBusProvider,
SharedPreferences sharedPreferences) {
return new LocationUpdateManager(
app, ownLocationModel, eventBusProvider, sharedPreferences);
}
@Provides
@Singleton
SharedPreferences provideSharedPreferences() {
return app.getSharedPreferences("Main", Context.MODE_PRIVATE);
}
}