From 369e54cc338d8115d63138663b882f56208d7ec3 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Tue, 24 Jul 2012 15:56:25 +0900
Subject: [PATCH] Add Suggest initialization finish listener

Bug: 6860204
Change-Id: I1e4c03c99415cd9bdea5a8556ff4093c33f0f508
---
 .../android/inputmethod/latin/LatinIME.java    | 12 ++++++++++--
 .../com/android/inputmethod/latin/Suggest.java | 18 ++++++++++++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d4b59c4cdc..05dcee50bd 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -82,7 +82,8 @@ import java.util.Locale;
  * Input method implementation for Qwerty'ish keyboard.
  */
 public class LatinIME extends InputMethodService implements KeyboardActionListener,
-        SuggestionStripView.Listener, TargetApplicationGetter.OnTargetApplicationKnownListener {
+        SuggestionStripView.Listener, TargetApplicationGetter.OnTargetApplicationKnownListener,
+        Suggest.SuggestInitializationListener {
     private static final String TAG = LatinIME.class.getSimpleName();
     private static final boolean TRACE = false;
     private static boolean DEBUG;
@@ -426,6 +427,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
         resetContactsDictionary(null == mSuggest ? null : mSuggest.getContactsDictionary());
     }
 
+    @Override
+    public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable) {
+        mIsMainDictionaryAvailable = isMainDictionaryAvailable;
+        // TODO: Update gesture input enable state.
+    }
+
     private void initSuggest() {
         final Locale subtypeLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();
         final String localeStr = subtypeLocale.toString();
@@ -437,7 +444,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
         } else {
             oldContactsDictionary = null;
         }
-        mSuggest = new Suggest(this, subtypeLocale);
+        mSuggest = new Suggest(this /* Context */, subtypeLocale,
+                this /* SuggestInitializationListener */);
         if (mCurrentSettings.mCorrectionEnabled) {
             mSuggest.setAutoCorrectionThreshold(mCurrentSettings.mAutoCorrectionThreshold);
         }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 598ef1de73..3e3cf76f1e 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -42,6 +42,10 @@ public class Suggest {
     // TODO: rename this to CORRECTION_ON
     public static final int CORRECTION_FULL = 1;
 
+    public interface SuggestInitializationListener {
+        public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
+    }
+
     private static final boolean DBG = LatinImeLogger.sDBG;
 
     private Dictionary mMainDictionary;
@@ -55,11 +59,14 @@ public class Suggest {
     private float mAutoCorrectionThreshold;
 
     // Locale used for upper- and title-casing words
-    final private Locale mLocale;
+    private final Locale mLocale;
+    private final SuggestInitializationListener mListener;
 
-    public Suggest(final Context context, final Locale locale) {
+    public Suggest(final Context context, final Locale locale,
+            final SuggestInitializationListener listener) {
         initAsynchronously(context, locale);
         mLocale = locale;
+        mListener = listener;
     }
 
     /* package for test */ Suggest(final Context context, final File dictionary,
@@ -67,6 +74,7 @@ public class Suggest {
         final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary,
                 startOffset, length /* useFullEditDistance */, false, locale);
         mLocale = locale;
+        mListener = null;
         mMainDictionary = mainDict;
         addOrReplaceDictionary(mDictionaries, Dictionary.TYPE_MAIN, mainDict);
         initWhitelistAndAutocorrectAndPool(context, locale);
@@ -98,6 +106,9 @@ public class Suggest {
 
     public void resetMainDict(final Context context, final Locale locale) {
         mMainDictionary = null;
+        if (mListener != null) {
+            mListener.onUpdateMainDictionaryAvailability(hasMainDictionary());
+        }
         new Thread("InitializeBinaryDictionary") {
             @Override
             public void run() {
@@ -105,6 +116,9 @@ public class Suggest {
                         DictionaryFactory.createMainDictionaryFromManager(context, locale);
                 addOrReplaceDictionary(mDictionaries, Dictionary.TYPE_MAIN, newMainDict);
                 mMainDictionary = newMainDict;
+                if (mListener != null) {
+                    mListener.onUpdateMainDictionaryAvailability(hasMainDictionary());
+                }
             }
         }.start();
     }
-- 
GitLab