Merge "Remove an updated dictionary that changed locales" into jb-dev

main
Jean Chalard 2012-05-23 00:04:21 -07:00 committed by Android (Google) Code Review
commit ff4c037c9d
2 changed files with 34 additions and 0 deletions

View File

@ -193,6 +193,7 @@ public class BinaryDictionaryFileDumper {
if (0 >= resolver.delete(wordListUri, null, null)) { if (0 >= resolver.delete(wordListUri, null, null)) {
Log.e(TAG, "Could not have the dictionary pack delete a word list"); Log.e(TAG, "Could not have the dictionary pack delete a word list");
} }
BinaryDictionaryGetter.removeFilesWithIdExcept(context, id, outputFile);
// Success! Close files (through the finally{} clause) and return. // Success! Close files (through the finally{} clause) and return.
return AssetFileAddress.makeFromFileName(outputFileName); return AssetFileAddress.makeFromFileName(outputFileName);
} catch (Exception e) { } catch (Exception e) {

View File

@ -282,6 +282,39 @@ class BinaryDictionaryGetter {
return result; return result;
} }
/**
* Remove all files with the passed id, except the passed file.
*
* If a dictionary with a given ID has a metadata change that causes it to change
* path, we need to remove the old version. The only way to do this is to check all
* installed files for a matching ID in a different directory.
*/
public static void removeFilesWithIdExcept(final Context context, final String id,
final File fileToKeep) {
try {
final File canonicalFileToKeep = fileToKeep.getCanonicalFile();
final File[] directoryList = getCachedDirectoryList(context);
if (null == directoryList) return;
for (File directory : directoryList) {
// There is one directory per locale. See #getCachedDirectoryList
if (!directory.isDirectory()) continue;
final File[] wordLists = directory.listFiles();
if (null == wordLists) continue;
for (File wordList : wordLists) {
final String fileId = getWordListIdFromFileName(wordList.getName());
if (fileId.equals(id)) {
if (!canonicalFileToKeep.equals(wordList.getCanonicalFile())) {
wordList.delete();
}
}
}
}
} catch (java.io.IOException e) {
Log.e(TAG, "IOException trying to cleanup files : " + e);
}
}
/** /**
* Returns the id associated with the main word list for a specified locale. * Returns the id associated with the main word list for a specified locale.
* *