diff options
author | 2012-05-23 00:04:21 -0700 | |
---|---|---|
committer | 2012-05-23 00:04:21 -0700 | |
commit | ff4c037c9dc3533bcaa131fd0405fb8aeea60af4 (patch) | |
tree | 8c9cfa21e056bf020e7a14fe3cd14503269ce0c8 /java/src/com/android/inputmethod/latin | |
parent | 24ce36458690b34e7315556094b6943003cc490e (diff) | |
parent | b9e2bce95e955b6393c25226ab62fa44d24b904a (diff) | |
download | latinime-ff4c037c9dc3533bcaa131fd0405fb8aeea60af4.tar.gz latinime-ff4c037c9dc3533bcaa131fd0405fb8aeea60af4.tar.xz latinime-ff4c037c9dc3533bcaa131fd0405fb8aeea60af4.zip |
Merge "Remove an updated dictionary that changed locales" into jb-dev
Diffstat (limited to 'java/src/com/android/inputmethod/latin')
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java | 1 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java | 33 |
2 files changed, 34 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java index a4670daf2..d1ad4e170 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java @@ -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) { diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java index 5acd62904..063243e1b 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java @@ -283,6 +283,39 @@ class BinaryDictionaryGetter { } /** + * 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. * * Word lists stored in Android Keyboard's resources are referred to as the "main" |