diff --git a/java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java b/java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
index f9ebb97..1dfaf25 100644
--- a/java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
+++ b/java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.content.res.Resources;
 import android.preference.PreferenceFragment;
 import android.view.inputmethod.InputMethodSubtype;
 
@@ -50,7 +49,7 @@
     public static RichInputMethodSubtype createRichInputMethodSubtype(
             @Nonnull final RichInputMethodManager imm,
             @Nonnull final InputMethodSubtype subtype,
-            final Resources resources) {
+            final Context context) {
         return new RichInputMethodSubtype(subtype);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index b0c0725..e6df35b 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -52,7 +52,7 @@
 
     private static final RichInputMethodManager sInstance = new RichInputMethodManager();
 
-    private Resources mResources;
+    private Context mContext;
     private InputMethodManagerCompatWrapper mImmWrapper;
     private InputMethodInfoCache mInputMethodInfoCache;
     final HashMap<InputMethodInfo, List<InputMethodSubtype>>
@@ -86,7 +86,7 @@
             return;
         }
         mImmWrapper = new InputMethodManagerCompatWrapper(context);
-        mResources = context.getResources();
+        mContext = context;
         mInputMethodInfoCache = new InputMethodInfoCache(
                 mImmWrapper.mImm, context.getPackageName());
 
@@ -309,7 +309,7 @@
     public RichInputMethodSubtype createCurrentRichInputMethodSubtype(
             final InputMethodSubtype rawSubtype) {
         return AdditionalFeaturesSettingUtils.createRichInputMethodSubtype(this, rawSubtype,
-                mResources);
+                mContext);
     }
 
     public boolean hasMultipleEnabledIMEsOrSubtypes(final boolean shouldIncludeAuxiliarySubtypes) {
diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
index 2494787..e29aaba 100644
--- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -230,6 +230,7 @@
 
     /**
      * Helper method to return a dictionary res id for a locale, or 0 if none.
+     * @param res resources for the app
      * @param locale dictionary locale
      * @return main dictionary resource id
      */
@@ -258,6 +259,7 @@
 
     /**
      * Returns a main dictionary resource id
+     * @param res resources for the app
      * @param locale dictionary locale
      * @return main dictionary resource id
      */
@@ -283,6 +285,25 @@
                 BinaryDictionaryGetter.ID_CATEGORY_SEPARATOR + locale.getLanguage().toString();
     }
 
+    /**
+     * Returns whether a main dictionary is readily available for this locale.
+     *
+     * This does not query the content provider.
+     *
+     * @param context context to open files upon
+     * @param locale dictionary locale
+     * @return true if a dictionary is available right away, false otherwise
+     */
+    public static boolean hasReadilyAvailableMainDictionaryForLocale(final Context context,
+            final Locale locale) {
+        final Resources res = context.getResources();
+        if (0 != getMainDictionaryResourceIdIfAvailableForLocale(res, locale)) {
+            return true;
+        }
+        final String fileName = getCacheFileName(getMainDictId(locale), locale.toString(), context);
+        return new File(fileName).exists();
+    }
+
     public static DictionaryHeader getDictionaryFileHeaderOrNull(final File file) {
         return getDictionaryFileHeaderOrNull(file, 0, file.length());
     }
