From f1e13f1fb10db4152b2617093d827c66615ee16d Mon Sep 17 00:00:00 2001
From: satok <satok@google.com>
Date: Thu, 20 Sep 2012 12:27:14 +0900
Subject: [PATCH] DO NOT MERGE: Clear cache of the user dictionary when a word
 is added

This is a backport of  Iec2793de3fff7bf15f68f

Change-Id: If16d1c48edf084d892da722fb288e467f211b08e
---
 .../AndroidSpellCheckerService.java           | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 88efc5a858..ba974ff7fe 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -16,9 +16,12 @@
 
 package com.android.inputmethod.latin.spellcheck;
 
+import android.content.ContentResolver;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.database.ContentObserver;
 import android.preference.PreferenceManager;
+import android.provider.UserDictionary.Words;
 import android.service.textservice.SpellCheckerService;
 import android.text.TextUtils;
 import android.util.Log;
@@ -490,6 +493,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService
         private final AndroidSpellCheckerService mService;
 
         private final SuggestionsCache mSuggestionsCache = new SuggestionsCache();
+        private final ContentObserver mObserver;
 
         private static class SuggestionsParams {
             public final String[] mSuggestions;
@@ -516,10 +520,23 @@ public class AndroidSpellCheckerService extends SpellCheckerService
                 }
                 mUnigramSuggestionsInfoCache.put(query, new SuggestionsParams(suggestions, flags));
             }
+
+            public void clearCache() {
+                mUnigramSuggestionsInfoCache.evictAll();
+            }
         }
 
         AndroidSpellCheckerSession(final AndroidSpellCheckerService service) {
             mService = service;
+            final ContentResolver cres = service.getContentResolver();
+
+            mObserver = new ContentObserver(null) {
+                @Override
+                public void onChange(boolean self) {
+                    mSuggestionsCache.clearCache();
+                }
+            };
+            cres.registerContentObserver(Words.CONTENT_URI, true, mObserver);
         }
 
         @Override
@@ -530,6 +547,12 @@ public class AndroidSpellCheckerService extends SpellCheckerService
             mScript = getScriptFromLocale(mLocale);
         }
 
+        @Override
+        public void onClose() {
+            final ContentResolver cres = mService.getContentResolver();
+            cres.unregisterContentObserver(mObserver);
+        }
+
         /*
          * Returns whether the code point is a letter that makes sense for the specified
          * locale for this spell checker.
-- 
GitLab