From 83207fb482b13bd2300008aa153080f0706fbd8d Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Thu, 18 Aug 2011 15:44:53 +0900 Subject: [PATCH] Move the settings test to a more appropriate place. This change refactors the dictionary selection code so that the cached dictionary files list and the settings tests are more cleanly separated. This will also help with future refactorings that will test for the presence of the main dictionary and insert the fall back if it's not supplied by the dictionary pack. Bug: 5095140 Change-Id: I8d7caad7c054031df71fe78b043801a774d50f65 --- .../latin/BinaryDictionaryGetter.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java index 3af752752..18df797f0 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java @@ -41,6 +41,11 @@ class BinaryDictionaryGetter { */ private static final String TAG = BinaryDictionaryGetter.class.getSimpleName(); + /** + * Used to return empty lists + */ + private static final File[] EMPTY_FILE_ARRAY = new File[0]; + /** * Name of the common preferences name to know which word list are on and which are off. */ @@ -198,29 +203,14 @@ class BinaryDictionaryGetter { * * @param locale the locale to find the dictionary files for. * @param context the context on which to open the files upon. - * @return a list of binary dictionary files, which may be null but may not be empty. + * @return an array of binary dictionary files, which may be empty but may not be null. */ - private static List getCachedDictionaryList(final Locale locale, + private static File[] getCachedDictionaryList(final Locale locale, final Context context) { final String directoryName = getCacheDirectoryForLocale(locale, context); final File[] cacheFiles = new File(directoryName).listFiles(); - // TODO: Never return null. Fallback on the built-in dictionary, and if that's - // not present or disabled, then return an empty list. - if (null == cacheFiles) return null; - - final DictPackSettings dictPackSettings = new DictPackSettings(context); - - final ArrayList fileList = new ArrayList(); - for (File f : cacheFiles) { - final String wordListId = getWordListIdFromFileName(f.getName()); - if (!dictPackSettings.isWordListActive(wordListId)) continue; - if (f.canRead()) { - fileList.add(AssetFileAddress.makeFromFileName(f.getPath())); - } else { - Log.e(TAG, "Found a cached dictionary file but cannot read it"); - } - } - return fileList.size() > 0 ? fileList : null; + if (null == cacheFiles) return EMPTY_FILE_ARRAY; + return cacheFiles; } /** @@ -242,11 +232,27 @@ class BinaryDictionaryGetter { // storage, but we don't really care about what was copied NOW: what we want is the // list of everything we ever cached, so we ignore the return value. BinaryDictionaryFileDumper.cacheDictionariesFromContentProvider(locale, context); - List cachedDictionaryList = getCachedDictionaryList(locale, context); - if (null != cachedDictionaryList) { - return cachedDictionaryList; + final File[] cachedDictionaryList = getCachedDictionaryList(locale, context); + + final DictPackSettings dictPackSettings = new DictPackSettings(context); + + final ArrayList fileList = new ArrayList(); + // cachedDictionaryList may not be null, see doc for getCachedDictionaryList + for (final File f : cachedDictionaryList) { + final String wordListId = getWordListIdFromFileName(f.getName()); + if (!dictPackSettings.isWordListActive(wordListId)) continue; + if (f.canRead()) { + fileList.add(AssetFileAddress.makeFromFileName(f.getPath())); + } else { + Log.e(TAG, "Found a cached dictionary file but cannot read it"); + } } + if (!fileList.isEmpty()) { + return fileList; + } + // If the list is empty, fall through and return the fallback + final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId, locale); if (null == fallbackAsset) return null;