Merge "Exception refactoring"
This commit is contained in:
commit
5ba5ff9b80
2 changed files with 29 additions and 27 deletions
|
@ -98,23 +98,32 @@ public class BinaryDictionaryFileDumper {
|
||||||
* @throw IOException if the provider-returned data could not be read.
|
* @throw IOException if the provider-returned data could not be read.
|
||||||
*/
|
*/
|
||||||
public static List<AssetFileAddress> cacheDictionariesFromContentProvider(final Locale locale,
|
public static List<AssetFileAddress> cacheDictionariesFromContentProvider(final Locale locale,
|
||||||
final Context context) throws FileNotFoundException, IOException {
|
final Context context) {
|
||||||
final ContentResolver resolver = context.getContentResolver();
|
final ContentResolver resolver = context.getContentResolver();
|
||||||
final List<String> idList = getDictIdList(locale, context);
|
final List<String> idList = getDictIdList(locale, context);
|
||||||
final List<AssetFileAddress> fileAddressList = new ArrayList<AssetFileAddress>();
|
final List<AssetFileAddress> fileAddressList = new ArrayList<AssetFileAddress>();
|
||||||
for (String id : idList) {
|
for (String id : idList) {
|
||||||
final Uri wordListUri = getProviderUri(id);
|
final Uri wordListUri = getProviderUri(id);
|
||||||
final AssetFileDescriptor afd =
|
AssetFileDescriptor afd = null;
|
||||||
resolver.openAssetFileDescriptor(wordListUri, "r");
|
try {
|
||||||
if (null == afd) continue;
|
afd = resolver.openAssetFileDescriptor(wordListUri, "r");
|
||||||
final String fileName = copyFileTo(afd.createInputStream(),
|
} catch (FileNotFoundException e) {
|
||||||
BinaryDictionaryGetter.getCacheFileName(id, locale, context));
|
// leave null inside afd and continue
|
||||||
afd.close();
|
}
|
||||||
if (0 >= resolver.delete(wordListUri, null, null)) {
|
if (null == afd) continue;
|
||||||
// I'd rather not print the word list ID to the log here out of security concerns
|
try {
|
||||||
Log.e(TAG, "Could not have the dictionary pack delete a word list");
|
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;
|
return fileAddressList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,23 +237,16 @@ class BinaryDictionaryGetter {
|
||||||
*/
|
*/
|
||||||
public static List<AssetFileAddress> getDictionaryFiles(final Locale locale,
|
public static List<AssetFileAddress> getDictionaryFiles(final Locale locale,
|
||||||
final Context context, final int fallbackResId) {
|
final Context context, final int fallbackResId) {
|
||||||
try {
|
|
||||||
// cacheDictionariesFromContentProvider returns the list of files it copied to local
|
// 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
|
// 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.
|
// list of everything we ever cached, so we ignore the return value.
|
||||||
BinaryDictionaryFileDumper.cacheDictionariesFromContentProvider(locale, context);
|
BinaryDictionaryFileDumper.cacheDictionariesFromContentProvider(locale, context);
|
||||||
List<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
|
List<AssetFileAddress> cachedDictionaryList = getCachedDictionaryList(locale, context);
|
||||||
if (null != cachedDictionaryList) {
|
if (null != cachedDictionaryList) {
|
||||||
return 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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId,
|
final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId,
|
||||||
locale);
|
locale);
|
||||||
if (null == fallbackAsset) return null;
|
if (null == fallbackAsset) return null;
|
||||||
|
|
Loading…
Reference in a new issue