package com.dg.libs.rest; import android.content.Context; import com.araneaapps.android.libs.asyncrunners.models.AsyncRunners; import com.dg.libs.rest.authentication.AuthenticationProvider; public class RestClientConfiguration { private static Context applicationContext; private AuthenticationProvider authenticationProvider; int connectionTimeout; int readTimeout; int writeTimeout; private RestClientConfiguration(AuthenticationProvider authenticationProvider, int connectionTimeout, int readTimeout, int writeTimeout) { this.authenticationProvider = authenticationProvider; this.connectionTimeout = connectionTimeout; this.readTimeout = readTimeout; this.writeTimeout = writeTimeout; } private static RestClientConfiguration generateDefaultConfig() { return new ConfigurationBuilder().create(); } private static RestClientConfiguration instance; public static void init(Context context) { applicationContext = context.getApplicationContext(); AsyncRunners.init(applicationContext); instance = generateDefaultConfig(); } public static void init(Context context, RestClientConfiguration restClientConfiguration) { applicationContext = context.getApplicationContext(); AsyncRunners.init(applicationContext); instance = restClientConfiguration; } public static RestClientConfiguration get() { if (instance == null) { throw new IllegalStateException("You need to call Init on " + RestClientConfiguration.class + " First. Do it in your class extending application"); } return instance; } public AuthenticationProvider getAuthenticationProvider() { return authenticationProvider; } public int getConnectionTimeout() { return connectionTimeout; } public int getReadTimeout() { return readTimeout; } public int getWriteTimeout() { return writeTimeout; } public Context getContext() { return applicationContext; } public static class ConfigurationBuilder { private AuthenticationProvider authenticationProvider; private int connectionTimeout = 10000; private int readTimeout = 20000; private int writeTimeout = 20000; public ConfigurationBuilder setAuthenticationProvider(AuthenticationProvider authenticationProvider) { this.authenticationProvider = authenticationProvider; return this; } public ConfigurationBuilder setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; return this; } public ConfigurationBuilder setReadTimeout(int readTimeout) { this.readTimeout = readTimeout; return this; } public ConfigurationBuilder setWriteTimeout(int writeTimeout) { this.writeTimeout = writeTimeout; return this; } public RestClientConfiguration create() { return new RestClientConfiguration(authenticationProvider, connectionTimeout, readTimeout, writeTimeout); } } }