package etelligens.com.foodsafety.utils; import static android.content.Context.MODE_PRIVATE; import static etelligens.com.foodsafety.utils.Keyword.PREF_LANG; import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.preference.PreferenceManager; import android.util.Log; import java.util.Locale; public class LocaleHelper { private static final String TAG="LocaleHelper"; private static final String PREF_NAME = "LangData"; public static Context onAttach(Context context) { String lang = getPersistedData(context, Locale.getDefault().getLanguage()); Log.e(TAG,"onAttach=="+"language=="+lang); return setLocale(context, lang); } public static String getLanguage(Context context) { Log.e(TAG,"getLanguage"); return getPersistedData(context, Locale.getDefault().getLanguage()); } public static Context setLocale(Context context, String language) { persist(context, language); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return updateResources(context, language); } return updateResourcesLegacy(context, language); } private static String getPersistedData(Context context, String defaultLanguage) { SharedPreferences preferences = context.getSharedPreferences(PREF_NAME,MODE_PRIVATE); return preferences.getString(PREF_LANG, defaultLanguage); } private static void persist(Context context, String language) { SharedPreferences preferences = context.getSharedPreferences(PREF_NAME,MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString(PREF_LANG, language); Log.e(TAG,"addLangToPref"); Log.e(TAG,"language=="+language); editor.apply(); } @TargetApi(Build.VERSION_CODES.N) private static Context updateResources(Context context, String language) { Locale locale = new Locale(language); Locale.setDefault(locale); Configuration configuration = context.getResources().getConfiguration(); configuration.setLocale(locale); configuration.setLayoutDirection(locale); Log.e(TAG,"updateResources"); return context.createConfigurationContext(configuration); } @SuppressWarnings("deprecation") private static Context updateResourcesLegacy(Context context, String language) { Locale locale = new Locale(language); Locale.setDefault(locale); Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); configuration.locale = locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { configuration.setLayoutDirection(locale); } resources.updateConfiguration(configuration, resources.getDisplayMetrics()); return context; } }