blob: 8c0e9b3fbbed7f38e8d6e2331bd2a3929ca96e09 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package org.libreoffice;
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 java.util.Locale;
public class LocaleHelper {
private static final String SELECTED_LANG = "org.libreoffice.selected.lang";
// value for language that indicates that system's default language should be used
public static final String SYSTEM_DEFAULT_LANGUAGE = "SYSTEM_DEFAULT_LANGUAGE";
public static Context onAttach(Context context){
String lang = getPersistedData(context, Locale.getDefault().getLanguage());
return setLocale(context, lang);
}
public static Context setLocale(Context context, String lang) {
persist(context, lang);
return updateResources(context, lang);
}
@SuppressWarnings("deprecation")
private static Context updateResources(Context context, String lang) {
Locale locale;
if (lang.equals(SYSTEM_DEFAULT_LANGUAGE)) {
locale = Locale.getDefault();
} else {
locale = new Locale(lang);
}
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration cfg = res.getConfiguration();
cfg.locale = locale;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
cfg.setLayoutDirection(locale);
res.updateConfiguration(cfg, res.getDisplayMetrics());
return context;
}
private static void persist(Context context, String lang) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit().putString(SELECTED_LANG, lang);
preferences.edit().apply();
}
private static String getPersistedData(Context context, String lang) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(SELECTED_LANG, lang);
}
}
|