From f13487dfbf2b7547b48a5e9123235ee8a1d660c8 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Wed, 15 Oct 2014 23:23:30 +0900
Subject: [PATCH] [ML25] Add an hasDict method.

We used to have separate methods for existence of dicts
according to whether it's a file or a resource. This unifies both.

Bug: 11230254
Bug: 17979623
Change-Id: I728773461f3465f756d06297c3f3bee34390c3e6
---
 .../AdditionalFeaturesSettingUtils.java       |  3 +--
 .../latin/RichInputMethodManager.java         |  6 +++---
 .../latin/utils/DictionaryInfoUtils.java      | 21 +++++++++++++++++++
 3 files changed, 25 insertions(+), 5 deletions(-)

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 f9ebb9702c..1dfaf259ec 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 @@ package com.android.inputmethod.latin.settings;
 
 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 class AdditionalFeaturesSettingUtils {
     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 b0c0725bb3..e6df35bea2 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -52,7 +52,7 @@ public class RichInputMethodManager {
 
     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 @@ public class RichInputMethodManager {
             return;
         }
         mImmWrapper = new InputMethodManagerCompatWrapper(context);
-        mResources = context.getResources();
+        mContext = context;
         mInputMethodInfoCache = new InputMethodInfoCache(
                 mImmWrapper.mImm, context.getPackageName());
 
@@ -309,7 +309,7 @@ public class RichInputMethodManager {
     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 2494787851..e29aabacd5 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 @@ public class DictionaryInfoUtils {
 
     /**
      * 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 @@ public class DictionaryInfoUtils {
 
     /**
      * 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 @@ public class DictionaryInfoUtils {
                 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());
     }
-- 
GitLab