package org.wikipedia.dataclient.retrofit;
import android.support.annotation.NonNull;
import org.wikipedia.WikipediaApp;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.dataclient.okhttp.OkHttpConnectionFactory;
import org.wikipedia.json.GsonUtil;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public final class RetrofitFactory {
public static Retrofit newInstance(@NonNull WikiSite wiki) {
return newInstance(wiki.url() + "/", wiki);
}
public static Retrofit newInstance(@NonNull String endpoint, @NonNull WikiSite wiki) {
return new Retrofit.Builder()
.client(OkHttpConnectionFactory.getClient().newBuilder()
.addInterceptor(new LanguageVariantHeaderInterceptor(wiki)).build())
.baseUrl(endpoint)
.addConverterFactory(GsonConverterFactory.create(GsonUtil.getDefaultGson()))
.build();
}
private RetrofitFactory() { }
private static class LanguageVariantHeaderInterceptor implements Interceptor {
@NonNull private final WikiSite wiki;
LanguageVariantHeaderInterceptor(@NonNull WikiSite wiki) {
this.wiki = wiki;
}
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
request = request.newBuilder()
.header("Accept-Language", WikipediaApp.getInstance().getAcceptLanguage(wiki))
.build();
return chain.proceed(request);
}
}
}