]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/engine/TransliteratorManager.java
Fix issues noted by lint tools.
[Dictionary.git] / src / com / hughes / android / dictionary / engine / TransliteratorManager.java
index eacab80daac3bd9a5189bbb6433b6dd7c2f99923..e328265f60bba9defbf72172df2e658d28bca88c 100644 (file)
@@ -25,17 +25,18 @@ public class TransliteratorManager {
 
     private static boolean starting = false;
     private static boolean ready = false;
-    private static LRUCacheMap<String, Transliterator> cache = new LRUCacheMap<String, Transliterator>(4);
+    private static ThreadSetup threadSetup = null;
+    private static final LRUCacheMap<String, Transliterator> cache = new LRUCacheMap<>(4);
 
     // Whom to notify when we're all set up and ready to go.
-    private static List<Callback> callbacks = new ArrayList<TransliteratorManager.Callback>();
+    private static final List<Callback> callbacks = new ArrayList<>();
 
     public static Transliterator get(String rules) {
         // DO NOT make the method synchronized!
         // synchronizing on the class would break the whole
         // asynchronous init concept, since the runnable
         // then holds the same lock as the init function needs.
-        Transliterator result = null;
+        Transliterator result;
         synchronized (cache) {
             result = cache.get(rules);
             if (result == null) {
@@ -46,7 +47,7 @@ public class TransliteratorManager {
         return result;
     }
 
-    public static synchronized boolean init(final Callback callback) {
+    public static synchronized boolean init(final Callback callback, final ThreadSetup setupCallback) {
         if (ready) {
             return true;
         }
@@ -55,6 +56,7 @@ public class TransliteratorManager {
         }
         if (!starting) {
             starting = true;
+            threadSetup = setupCallback;
             new Thread(init).start();
         }
         return false;
@@ -63,15 +65,18 @@ public class TransliteratorManager {
     private static final Runnable init = new Runnable() {
         @Override
         public void run() {
+            synchronized (TransliteratorManager.class) {
+                if (threadSetup != null) threadSetup.onThreadStart();
+            }
             System.out.println("Starting Transliterator load.");
             final String transliterated = get(Language.en.getDefaultNormalizerRules()).transliterate("Îñţérñåţîöñåļîžåţîờñ");
             if (!"internationalization".equals(transliterated)) {
                 System.out.println("Wrong transliteration: " + transliterated);
             }
 
-            final List<Callback> callbacks = new ArrayList<TransliteratorManager.Callback>();
+            final List<Callback> callbacks;
             synchronized (TransliteratorManager.class) {
-                callbacks.addAll(TransliteratorManager.callbacks);
+                callbacks = new ArrayList<>(TransliteratorManager.callbacks);
                 ready = true;
             }
             for (final Callback callback : callbacks) {
@@ -80,6 +85,10 @@ public class TransliteratorManager {
         }
     };
 
+    public interface ThreadSetup {
+        void onThreadStart();
+    }
+
     public interface Callback {
         void onTransliteratorReady();
     }