/*
* Moments - To the best Instagram client
* Copyright (C) 2015 XiNGRZ <xxx@oxo.ooo>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
package ooo.oxo.moments;
import android.app.Application;
import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.Date;
import ooo.oxo.moments.net.TimestampTypeAdapter;
import retrofit.GsonConverterFactory;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
public class InstaApplication extends Application {
private OkHttpClient httpClient;
private Retrofit retrofit;
public static InstaApplication from(Context context) {
return (InstaApplication) context.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
//noinspection ConstantConditions
if (TextUtils.isEmpty(BuildConfig.CLIENT_ID) || TextUtils.isEmpty(BuildConfig.CLIENT_SECRET)) {
throw new IllegalStateException("Please create a \"client.properties\" in the same" +
" directory of this module to specify your CLIENT_ID and CLIENT_SECRET.");
}
InstaSharedState.createInstance(this);
httpClient = new OkHttpClient();
httpClient.interceptors().add(chain -> {
Request request = chain.request();
Log.d("OkHttp", request.toString());
Response response = chain.proceed(request);
Log.d("OkHttp", response.toString());
return response;
});
InstaSharedState.getInstance().applyProxy();
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(Date.class, new TimestampTypeAdapter())
.create();
retrofit = new Retrofit.Builder()
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl("https://api.instagram.com/")
.build();
}
public OkHttpClient getHttpClient() {
return httpClient;
}
void applyHttpProxy(String host, int port) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
httpClient.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)));
return null;
}
}.execute();
}
void removeHttpProxy() {
httpClient.setProxy(Proxy.NO_PROXY);
}
public <T> T createApi(Class<T> service) {
return retrofit.create(service);
}
}