Delete history on upgrade in LatinIME.

Bug 20733902.

Change-Id: Ibe27e6cafe4db87ba62d7df708229e0d8564ffa8
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 9d8bdb2..9d30ccd 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -107,6 +107,10 @@
 
     Locale getLocale();
 
+    boolean usesContacts();
+
+    String getAccount();
+
     void resetDictionaries(
             final Context context,
             final Locale newLocale,
@@ -162,7 +166,7 @@
 
     boolean isValidSuggestionWord(final String word);
 
-    void clearUserHistoryDictionary(final Context context);
+    boolean clearUserHistoryDictionary(final Context context);
 
     String dump(final Context context);
 
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
index 6508eb2..6649d55 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
@@ -234,6 +234,16 @@
         return mDictionaryGroup.mLocale;
     }
 
+    @Override
+    public boolean usesContacts() {
+        return mDictionaryGroup.getSubDict(Dictionary.TYPE_CONTACTS) != null;
+    }
+
+    @Override
+    public String getAccount() {
+        return null;
+    }
+
     @Nullable
     private static ExpandableBinaryDictionary getSubDict(final String dictType,
             final Context context, final Locale locale, final File dictFile,
@@ -660,16 +670,18 @@
         return maxFreq;
     }
 
-    private void clearSubDictionary(final String dictName) {
+    private boolean clearSubDictionary(final String dictName) {
         final ExpandableBinaryDictionary dictionary = mDictionaryGroup.getSubDict(dictName);
-        if (dictionary != null) {
-            dictionary.clear();
+        if (dictionary == null) {
+            return false;
         }
+        dictionary.clear();
+        return true;
     }
 
     @Override
-    public void clearUserHistoryDictionary(final Context context) {
-        clearSubDictionary(Dictionary.TYPE_USER_HISTORY);
+    public boolean clearUserHistoryDictionary(final Context context) {
+        return clearSubDictionary(Dictionary.TYPE_USER_HISTORY);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/SystemBroadcastReceiver.java b/java/src/com/android/inputmethod/latin/SystemBroadcastReceiver.java
index a093ec6..26c5e00 100644
--- a/java/src/com/android/inputmethod/latin/SystemBroadcastReceiver.java
+++ b/java/src/com/android/inputmethod/latin/SystemBroadcastReceiver.java
@@ -29,13 +29,14 @@
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodSubtype;
 
-import com.android.inputmethod.dictionarypack.CommonPreferences;
 import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
 import com.android.inputmethod.keyboard.KeyboardLayoutSet;
 import com.android.inputmethod.latin.settings.Settings;
 import com.android.inputmethod.latin.setup.SetupActivity;
 import com.android.inputmethod.latin.utils.UncachedInputMethodManagerUtils;
 
+import java.util.Locale;
+
 /**
  * This class detects the {@link Intent#ACTION_MY_PACKAGE_REPLACED} broadcast intent when this IME
  * package has been replaced by a newer version of the same package. This class also detects
@@ -76,6 +77,22 @@
             richImm.setAdditionalInputMethodSubtypes(additionalSubtypes);
             toggleAppIcon(context);
             downloadLatestDictionaries(context);
+            // TODO: This is only for dogfood builds. Remove this from the final release.
+            DictionaryFacilitator keyboardFacilitator =
+                    DictionaryFacilitatorProvider.getDictionaryFacilitator(false);
+            boolean historyCleared = keyboardFacilitator.clearUserHistoryDictionary(context);
+            Locale keyboardLocale = keyboardFacilitator.getLocale();
+            if (historyCleared && keyboardLocale != null) {
+                keyboardFacilitator.resetDictionaries(
+                        context,
+                        keyboardLocale,
+                        keyboardFacilitator.usesContacts(),
+                        true /* history */,
+                        true /* force */,
+                        keyboardFacilitator.getAccount(),
+                        "" /* prefix */,
+                        null /* listener */);
+            }
         } else if (Intent.ACTION_BOOT_COMPLETED.equals(intentAction)) {
             Log.i(TAG, "Boot has been completed");
             toggleAppIcon(context);