Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / connection / RestClient.java
diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java b/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java
new file mode 100644 (file)
index 0000000..35eb345
--- /dev/null
@@ -0,0 +1,107 @@
+package com.moiseum.wolnelektury.connection;
+
+import android.content.Context;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.moiseum.wolnelektury.BuildConfig;
+import com.moiseum.wolnelektury.base.WLApplication;
+import com.moiseum.wolnelektury.connection.interceptors.NewApiInterceptor;
+import com.moiseum.wolnelektury.connection.interceptors.OAuthSigningInterceptor;
+import com.moiseum.wolnelektury.connection.interceptors.UnauthorizedInterceptor;
+import com.moiseum.wolnelektury.connection.models.OAuthTokenModel;
+import com.moiseum.wolnelektury.connection.services.BooksService;
+
+import java.io.File;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Cache;
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Call;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * @author golonkos.
+ */
+
+public class RestClient {
+       public static final int PAGINATION_LIMIT = 30;
+
+       public static final String MEDIA_URL = "http://wolnelektury.pl/media/";
+       public static final String MEDIA_URL_HTTPS = "https://wolnelektury.pl/media/";
+       public static final String BASE_URL = "https://wolnelektury.pl/api/";
+       public static final String WEB_OAUTH_AUTHORIZATION_URL = "";
+       public static final String WEB_PAYPAL_FORM_URL = "";
+
+       private static final String CACHE_DIR = "responses";
+       private static final int CACHE_SIZE_MB = 10;
+
+       private static final String CONSUMER_KEY = "";
+       private static final String CONSUMER_SECRET = "";
+
+       private final Retrofit retrofit;
+       private final OAuthSigningInterceptor oAuthInterceptor;
+
+       public RestClient(Context context) {
+               OAuthTokenModel currentToken = WLApplication.getInstance().getPreferences().getAccessToken();
+               oAuthInterceptor = new OAuthSigningInterceptor(CONSUMER_KEY, CONSUMER_SECRET, new Random());
+               if (currentToken != null) {
+                       oAuthInterceptor.setToken(currentToken.getToken(), currentToken.getTokenSecret());
+               }
+               UnauthorizedInterceptor unauthorizedInterceptor = new UnauthorizedInterceptor();
+               NewApiInterceptor newApiInterceptor = new NewApiInterceptor();
+
+               GsonBuilder gsonBuilder = new GsonBuilder();
+               //gsonBuilder.registerTypeAdapter(Date.class, new RestClientDateSerializer());
+
+               Gson gson = gsonBuilder.create();
+
+               int cacheSize = CACHE_SIZE_MB * 1024 * 1024;
+               File cacheDir = new File(context.getCacheDir(), CACHE_DIR);
+               Cache cache = new Cache(cacheDir, cacheSize);
+
+               OkHttpClient.Builder builder = new OkHttpClient.Builder();
+               builder.interceptors().add(newApiInterceptor);
+               builder.interceptors().add(oAuthInterceptor);
+               builder.interceptors().add(unauthorizedInterceptor);
+               if (BuildConfig.DEBUG) {
+                       HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+                       loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
+                       builder.interceptors().add(loggingInterceptor);
+               }
+               builder.writeTimeout(60, TimeUnit.SECONDS);
+               builder.readTimeout(60, TimeUnit.SECONDS);
+               builder.connectTimeout(60, TimeUnit.SECONDS);
+
+               OkHttpClient client = builder.cache(cache).build();
+               retrofit = new Retrofit.Builder()
+                               .baseUrl(BASE_URL)
+                               .addConverterFactory(GsonConverterFactory.create(gson))
+                               .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+                               .client(client)
+                               .build();
+       }
+
+       public <T, S> Call<T> call(RestClientCallback<T, S> restClientCallback, Class<S> clazz) {
+               S service = createService(clazz);
+               Call<T> call = restClientCallback.execute(service);
+               call.enqueue(restClientCallback);
+               return call;
+       }
+
+       public <S> S createService(Class<S> clazz) {
+               return retrofit.create(clazz);
+       }
+
+       public void clearOAuthTokens() {
+               oAuthInterceptor.setToken(null, null);
+       }
+
+       public BooksService obtainBookService() {
+               return retrofit.create(BooksService.class);
+       }
+}