GitNex-Android-App/app/src/main/java/org/mian/gitnex/clients/RetrofitClient.java

91 lines
2.9 KiB
Java
Raw Normal View History

package org.mian.gitnex.clients;
2019-11-13 16:52:49 +01:00
import android.content.Context;
2020-03-31 16:41:50 +02:00
import android.util.Log;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.FilesData;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.ssl.MemorizingTrustManager;
import org.mian.gitnex.interfaces.ApiInterface;
import org.mian.gitnex.interfaces.WebInterface;
2019-11-13 16:52:49 +01:00
import java.io.File;
import java.security.SecureRandom;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
2019-11-13 16:52:49 +01:00
import okhttp3.Cache;
import okhttp3.OkHttpClient;
2019-11-13 16:52:49 +01:00
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;
/**
* Author M M Arif
*/
public class RetrofitClient {
2020-03-31 21:14:49 +02:00
private Retrofit retrofit;
private RetrofitClient(String instanceUrl, Context ctx) {
TinyDB tinyDb = new TinyDB(ctx);
final boolean connToInternet = AppUtil.hasNetworkConnection(ctx);
int cacheSize = FilesData.returnOnlyNumber(tinyDb.getString("cacheSizeStr")) * 1024 * 1024;
2020-03-31 21:14:49 +02:00
File httpCacheDirectory = new File(ctx.getCacheDir(), "responses");
Cache cache = new Cache(httpCacheDirectory, cacheSize);
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
try {
2020-03-31 21:14:49 +02:00
SSLContext sslContext = SSLContext.getInstance("TLS");
MemorizingTrustManager memorizingTrustManager = new MemorizingTrustManager(ctx);
sslContext.init(null, new X509TrustManager[]{memorizingTrustManager}, new SecureRandom());
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder().cache(cache)
2020-03-31 21:14:49 +02:00
//.addInterceptor(logging)
.sslSocketFactory(sslContext.getSocketFactory(), memorizingTrustManager).hostnameVerifier(memorizingTrustManager.wrapHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier())).addInterceptor(chain -> {
2020-03-31 21:14:49 +02:00
Request request = chain.request();
if(connToInternet) {
request = request.newBuilder().header("Cache-Control", "public, max-age=" + 60).build();
}
else {
request = request.newBuilder().header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 30).build();
}
return chain.proceed(request);
});
Retrofit.Builder builder = new Retrofit.Builder().baseUrl(instanceUrl).client(okHttpClient.build()).addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create());
2020-03-31 21:14:49 +02:00
retrofit = builder.build();
}
catch(Exception e) {
Log.e("onFailure", e.toString());
}
2020-03-31 21:14:49 +02:00
}
public static synchronized RetrofitClient getInstance(String instanceUrl, Context ctx) {
2020-03-31 21:14:49 +02:00
return new RetrofitClient(instanceUrl, ctx);
}
public ApiInterface getApiInterface() {
2020-03-31 21:14:49 +02:00
return retrofit.create(ApiInterface.class);
}
public WebInterface getWebInterface() {
return retrofit.create(WebInterface.class);
}
}