diff options
Diffstat (limited to 'java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java index 3da670e2e..ed5f83b3b 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java @@ -98,23 +98,32 @@ public class BinaryDictionaryFileDumper { * @throw IOException if the provider-returned data could not be read. */ public static List<AssetFileAddress> cacheDictionariesFromContentProvider(final Locale locale, - final Context context) throws FileNotFoundException, IOException { + final Context context) { final ContentResolver resolver = context.getContentResolver(); final List<String> idList = getDictIdList(locale, context); final List<AssetFileAddress> fileAddressList = new ArrayList<AssetFileAddress>(); for (String id : idList) { final Uri wordListUri = getProviderUri(id); - final AssetFileDescriptor afd = - resolver.openAssetFileDescriptor(wordListUri, "r"); + AssetFileDescriptor afd = null; + try { + afd = resolver.openAssetFileDescriptor(wordListUri, "r"); + } catch (FileNotFoundException e) { + // leave null inside afd and continue + } if (null == afd) continue; - final String fileName = copyFileTo(afd.createInputStream(), - BinaryDictionaryGetter.getCacheFileName(id, locale, context)); - afd.close(); - if (0 >= resolver.delete(wordListUri, null, null)) { - // I'd rather not print the word list ID to the log here out of security concerns - Log.e(TAG, "Could not have the dictionary pack delete a word list"); + try { + final String fileName = copyFileTo(afd.createInputStream(), + BinaryDictionaryGetter.getCacheFileName(id, locale, context)); + afd.close(); + if (0 >= resolver.delete(wordListUri, null, null)) { + // I'd rather not print the word list ID to the log out of security concerns + Log.e(TAG, "Could not have the dictionary pack delete a word list"); + } + fileAddressList.add(AssetFileAddress.makeFromFileName(fileName)); + } catch (IOException e) { + // Can't read the file for some reason. Continue onto the next file. + Log.e(TAG, "Cannot read a word list from the dictionary pack : " + e); } - fileAddressList.add(AssetFileAddress.makeFromFileName(fileName)); } return fileAddressList; } |