Remove an updated dictionary that changed locales
When a dictionary changes locale, we need to remove the file that corresponds to the old version. It has a different path than the new one, so we have to search for it explicitly. Bug: 6540631 Change-Id: Ie9d63ba636651fe90f8fbb9627b7265ac7b34ccdmain
parent
37f81cd6e9
commit
b9e2bce95e
|
@ -193,6 +193,7 @@ public class BinaryDictionaryFileDumper {
|
|||
if (0 >= resolver.delete(wordListUri, null, null)) {
|
||||
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.
|
||||
return AssetFileAddress.makeFromFileName(outputFileName);
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -282,6 +282,39 @@ class BinaryDictionaryGetter {
|
|||
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.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue