diff --git a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java index 1a419043d10bfb854a0c3faefe17249f3462ac70..d2295409bed1123595b29fb80f9d05e12ce0d781 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java @@ -21,8 +21,9 @@ public class Localizer { @Nullable private static Localizer INSTANCE; private final Locale systemLocale; + // Locking: this @Nullable - private volatile Locale locale; + private Locale locale; private Localizer(SharedPreferences sharedPreferences) { systemLocale = Locale.getDefault(); @@ -61,9 +62,8 @@ public class Localizer { return new Locale(tag); } + // Returns the localized version of context public Context setLocale(Context context) { - if (locale == null) - return context; Resources res = context.getResources(); Configuration conf = res.getConfiguration(); Locale currentLocale; @@ -71,6 +71,14 @@ public class Localizer { currentLocale = conf.getLocales().get(0); } else currentLocale = conf.locale; + synchronized (this) { + if (locale == null) { + // Detect if the user changed the system language + if (systemLocale.equals(currentLocale)) + return context; + locale = systemLocale; + } + } if (locale.equals(currentLocale)) return context; Locale.setDefault(locale);