Add Dictionary.isInDictionary().

Bug: 13142176
Bug: 15428247
Change-Id: If2d1c1fea7a69e41809a828da8dd032211ad144e
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 7247a1f..1d08743 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -345,7 +345,7 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         return getFrequency(word) != NOT_A_PROBABILITY;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index bc7276b..b55ed12 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin;
 
+import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
@@ -85,11 +86,19 @@
             final int sessionId, final float[] inOutLanguageWeight);
 
     /**
-     * Checks if the given word occurs in the dictionary
+     * Checks if the given word has to be treated as a valid word. Please note that some
+     * dictionaries have entries that should be treated as invalid words.
      * @param word the word to search for. The search should be case-insensitive.
-     * @return true if the word exists, false otherwise
+     * @return true if the word is valid, false otherwise
      */
-    abstract public boolean isValidWord(final String word);
+    public boolean isValidWord(final String word) {
+        return isInDictionary(word);
+    }
+
+    /**
+     * Checks if the given word is in the dictionary regardless of it being valid or not.
+     */
+    abstract public boolean isInDictionary(final String word);
 
     public int getFrequency(final String word) {
         return NOT_A_PROBABILITY;
@@ -165,7 +174,7 @@
         }
 
         @Override
-        public boolean isValidWord(String word) {
+        public boolean isInDictionary(String word) {
             return false;
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index 53c78fd..89d61ce 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -78,9 +78,9 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         for (int i = mDictionaries.size() - 1; i >= 0; --i)
-            if (mDictionaries.get(i).isValidWord(word)) return true;
+            if (mDictionaries.get(i).isInDictionary(word)) return true;
         return false;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 8664c09..e5e00d5 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -414,7 +414,7 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         reloadDictionaryIfRequired();
         boolean lockAcquired = false;
         try {
@@ -424,10 +424,10 @@
                 if (mBinaryDictionary == null) {
                     return false;
                 }
-                return isValidWordLocked(word);
+                return isInDictionaryLocked(word);
             }
         } catch (final InterruptedException e) {
-            Log.e(TAG, "Interrupted tryLock() in isValidWord().", e);
+            Log.e(TAG, "Interrupted tryLock() in isInDictionary().", e);
         } finally {
             if (lockAcquired) {
                 mLock.readLock().unlock();
@@ -436,9 +436,9 @@
         return false;
     }
 
-    protected boolean isValidWordLocked(final String word) {
+    protected boolean isInDictionaryLocked(final String word) {
         if (mBinaryDictionary == null) return false;
-        return mBinaryDictionary.isValidWord(word);
+        return mBinaryDictionary.isInDictionary(word);
     }
 
     @Override
@@ -590,20 +590,6 @@
         });
     }
 
-    // TODO: Implement BinaryDictionary.isInDictionary().
-    @UsedForTesting
-    public boolean isInUnderlyingBinaryDictionaryForTests(final String word) {
-        mLock.readLock().lock();
-        try {
-            if (mBinaryDictionary != null && mDictType == Dictionary.TYPE_USER_HISTORY) {
-                return mBinaryDictionary.isValidWord(word);
-            }
-            return false;
-        } finally {
-            mLock.readLock().unlock();
-        }
-    }
-
     @UsedForTesting
     public void waitAllTasksForTests() {
         final CountDownLatch countDownLatch = new CountDownLatch(1);
diff --git a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
index 7989346..e59ef75 100644
--- a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
@@ -66,10 +66,10 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         if (mLock.readLock().tryLock()) {
             try {
-                return mBinaryDictionary.isValidWord(word);
+                return mBinaryDictionary.isInDictionary(word);
             } finally {
                 mLock.readLock().unlock();
             }
diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
index be658ce..1ba7b36 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
@@ -80,4 +80,10 @@
     /* package */ void runGCIfRequired() {
         runGCIfRequired(false /* mindsBlockByGC */);
     }
+
+    @Override
+    public boolean isValidWord(final String word) {
+        // Strings out of this dictionary should not be considered existing words.
+        return false;
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
index 1423fce..19fa29e 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
@@ -38,10 +38,4 @@
             final Locale locale, final File dictFile) {
         return PersonalizationHelper.getPersonalizationDictionary(context, locale);
     }
-
-    @Override
-    public boolean isValidWord(final String word) {
-        // Strings out of this dictionary should not be considered existing words.
-        return false;
-    }
 }
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index 67ad54f..ea10356 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -47,12 +47,6 @@
         return PersonalizationHelper.getUserHistoryDictionary(context, locale);
     }
 
-    @Override
-    public boolean isValidWord(final String word) {
-        // Strings out of this dictionary should not be considered existing words.
-        return false;
-    }
-
     /**
      * Add a word to the user history dictionary.
      *
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index 1331d52..cc52a3e 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -58,7 +58,7 @@
                     return noSuggestions;
                 }
                 @Override
-                public boolean isValidWord(final String word) {
+                public boolean isInDictionary(final String word) {
                     // This is never called. However if for some strange reason it ever gets
                     // called, returning true is less destructive (it will not underline the
                     // word in red).
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
index 7507566..a6437ba 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
@@ -47,9 +47,9 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         synchronized (mLock) {
-            return super.isValidWord(word);
+            return super.isInDictionary(word);
         }
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
index f2d981a..8c9d5d6 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
@@ -52,9 +52,9 @@
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         synchronized (mLock) {
-            return super.isValidWord(word);
+            return super.isInDictionary(word);
         }
     }
 }
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
index c67d1fa..48d3a1c 100644
--- a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
@@ -134,7 +134,7 @@
             dict.waitAllTasksForTests();
             for (int i = 0; i < numberOfWords; ++i) {
                 final String word = words.get(i);
-                assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+                assertTrue(dict.isInDictionary(word));
             }
         }
         // write to file.
@@ -268,19 +268,19 @@
                     DistracterFilter.EMPTY_DISTRACTER_FILTER);
             prevWordsInfo = new PrevWordsInfo(word);
             dict.waitAllTasksForTests();
-            assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertTrue(dict.isInDictionary(word));
         }
         forcePassingShortTime();
         dict.runGCIfRequired();
         dict.waitAllTasksForTests();
         for (final String word : words) {
-            assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertTrue(dict.isInDictionary(word));
         }
         forcePassingLongTime();
         dict.runGCIfRequired();
         dict.waitAllTasksForTests();
         for (final String word : words) {
-            assertFalse(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertFalse(dict.isInDictionary(word));
         }
     }
 }