package io.kaif.mobile.retrofit;
import java.lang.reflect.Proxy;
import javax.inject.Inject;
import retrofit2.Retrofit;
/**
* TODO
* Generate this using annotation processor
*/
public class RetrofitRetryStaleProxy {
public static class RetrofitHolder {
@Inject
Retrofit retrofit;
public RetrofitHolder(Retrofit retrofit) {
this.retrofit = retrofit;
}
public <T> T create(Class<T> serviceClass) {
return retrofit.create(serviceClass);
}
}
@Inject
RetrofitHolder retrofitHolder;
public RetrofitRetryStaleProxy(RetrofitHolder retrofitHolder) {
this.retrofitHolder = retrofitHolder;
}
public <T> T create(Class<T> serviceClass) {
try {
return serviceClass.cast(Proxy.newProxyInstance(serviceClass.getClassLoader(),
new Class[]{serviceClass},
new RetryStaleHandler(retrofitHolder.create(Class.forName(serviceClass.getName()
+ "$$RetryStale")))));
} catch (ClassNotFoundException e) {
return retrofitHolder.create(serviceClass);
}
}
}