Fix race condition while changing the system locale

Bug: 6128216
Change-Id: Ie153e3eb18feeb97aada6a7708075f5152f11999
diff --git a/java/src/com/android/inputmethod/latin/LocaleUtils.java b/java/src/com/android/inputmethod/latin/LocaleUtils.java
index e05b47c..cf60089 100644
--- a/java/src/com/android/inputmethod/latin/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/LocaleUtils.java
@@ -168,12 +168,14 @@
      * @param newLocale the locale to change to.
      * @return the old locale.
      */
-    public static Locale setSystemLocale(final Resources res, final Locale newLocale) {
+    public static synchronized Locale setSystemLocale(final Resources res, final Locale newLocale) {
         final Configuration conf = res.getConfiguration();
-        final Locale saveLocale = conf.locale;
-        conf.locale = newLocale;
-        res.updateConfiguration(conf, res.getDisplayMetrics());
-        return saveLocale;
+        final Locale oldLocale = conf.locale;
+        if (newLocale != null && !newLocale.equals(oldLocale)) {
+            conf.locale = newLocale;
+            res.updateConfiguration(conf, res.getDisplayMetrics());
+        }
+        return oldLocale;
     }
 
     private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();