package com.pam.codenamehippie; import android.app.Application; import android.os.Handler; import android.os.Looper; import com.pam.codenamehippie.http.Authentificateur; import com.pam.codenamehippie.http.intercepteur.AcceptJsonInterceptor; import com.pam.codenamehippie.http.intercepteur.AcceptLanguageInterceptor; import com.pam.codenamehippie.modele.depot.DepotManager; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor.Level; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; /** * Sous classe de {@link Application} qui sert à initialiser l'application et à stocker les * variables globales */ public class HippieApplication extends Application { public static final HttpUrl BASE_URL = HttpUrl.parse("http://yolainecourteau.com/hippie/laravel/public/"); protected final Handler mainThreadHandler = new Handler(Looper.getMainLooper()); /** * Instance du client http pour l'application */ private volatile OkHttpClient httpClient; public synchronized OkHttpClient getHttpClient() { return this.httpClient; } @Override public void onCreate() { super.onCreate(); // Configuration du logger http Level level = (BuildConfig.DEBUG) ? Level.BODY : Level.HEADERS; // Configuration du client Http. OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.authenticator(Authentificateur.newInstance(this)) .addNetworkInterceptor(AcceptJsonInterceptor.newInstance()) .addNetworkInterceptor(AcceptLanguageInterceptor.newInstance(this)) .addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(level)); this.httpClient = httpClientBuilder.build(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/opensans_light.ttf") .setFontAttrId(R.attr.fontPath) .build() ); DepotManager.init(this, this.httpClient); } @Override public String getSystemServiceName(Class<?> serviceClass) { if (serviceClass.equals(DepotManager.class)) { return DepotManager.DEPOT_SERVICE; } return super.getSystemServiceName(serviceClass); } @Override public Object getSystemService(String name) { if (name.equals(DepotManager.DEPOT_SERVICE)) { return DepotManager.getInstance(); } return super.getSystemService(name); } /** * Réimplémentation de {@link android.app.Activity#runOnUiThread(Runnable)} * * @param action * truc à rouler sur le main thread * * @see android.app.Activity#runOnUiThread(Runnable) */ public void runOnUiThread(Runnable action) { if (Thread.currentThread() != this.mainThreadHandler.getLooper().getThread()) { this.mainThreadHandler.post(action); } else { action.run(); } } }