Merge "Exception refactoring"

main
Jean Chalard 2011-08-18 02:36:42 -07:00 committed by Android (Google) Code Review
commit 5ba5ff9b80
2 changed files with 29 additions and 27 deletions

View File

@ -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");
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");
AssetFileDescriptor afd = null;
try {
afd = resolver.openAssetFileDescriptor(wordListUri, "r");
} catch (FileNotFoundException e) {
// leave null inside afd and continue
}
if (null == afd) continue;
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;
}

View File

@ -237,23 +237,16 @@ class BinaryDictionaryGetter {
*/
public static List<AssetFileAddress> getDictionaryFiles(final Locale locale,
final Context context, final int fallbackResId) {
try {
// cacheDictionariesFromContentProvider returns the list of files it copied to local
// 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<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
if (null != cachedDictionaryList) {
return cachedDictionaryList;
}
// If the list is null, fall through and return the fallback
} catch (FileNotFoundException e) {
Log.e(TAG, "Unable to create dictionary file from provider for locale "
+ locale.toString() + ": falling back to internal dictionary");
} catch (IOException e) {
Log.e(TAG, "Unable to read source data for locale "
+ locale.toString() + ": falling back to internal dictionary");
// cacheDictionariesFromContentProvider returns the list of files it copied to local
// 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<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
if (null != cachedDictionaryList) {
return cachedDictionaryList;
}
final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId,
locale);
if (null == fallbackAsset) return null;