package com.quran.labs.androidquran; import android.app.Application; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.support.annotation.NonNull; import com.crashlytics.android.Crashlytics; import com.crashlytics.android.core.CrashlyticsCore; import com.quran.labs.androidquran.component.application.DaggerApplicationComponent; import com.quran.labs.androidquran.component.application.ApplicationComponent; import com.quran.labs.androidquran.module.application.ApplicationModule; import com.quran.labs.androidquran.util.QuranSettings; import com.quran.labs.androidquran.util.RecordingLogTree; import java.util.Locale; import io.fabric.sdk.android.Fabric; import timber.log.Timber; public class QuranApplication extends Application { private ApplicationComponent applicationComponent; @Override public void onCreate() { super.onCreate(); Fabric.with(this, new Crashlytics.Builder() .core(new CrashlyticsCore.Builder() .disabled(BuildConfig.DEBUG) .build()) .build()); Timber.plant(new RecordingLogTree()); this.applicationComponent = initializeInjector(); } protected ApplicationComponent initializeInjector() { return DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this)) .build(); } public ApplicationComponent getApplicationComponent() { return this.applicationComponent; } public void refreshLocale(@NonNull Context context, boolean force) { final String language = QuranSettings.getInstance(this).isArabicNames() ? "ar" : null; final Locale locale; if ("ar".equals(language)) { locale = new Locale("ar"); } else if (force) { // get the system locale (since we overwrote the default locale) locale = Resources.getSystem().getConfiguration().locale; } else { // nothing to do... return; } updateLocale(context, locale); final Context appContext = context.getApplicationContext(); if (context != appContext) { updateLocale(appContext, locale); } } private void updateLocale(@NonNull Context context, @NonNull Locale locale) { final Resources resources = context.getResources(); Configuration config = resources.getConfiguration(); config.locale = locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { config.setLayoutDirection(config.locale); } resources.updateConfiguration(config, resources.getDisplayMetrics()); } }