diff options
author | 2013-11-28 20:40:26 +0900 | |
---|---|---|
committer | 2013-11-28 20:40:26 +0900 | |
commit | 8ac3c65b00d0470218264784da77c378750d347c (patch) | |
tree | 0ed0f1ed16c8ce18571f4403fdf16f0e81ee1ce3 /java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java | |
parent | c7dd2eb7ad6499178a2f1fa600bf21a2e6cb8ba3 (diff) | |
download | latinime-8ac3c65b00d0470218264784da77c378750d347c.tar.gz latinime-8ac3c65b00d0470218264784da77c378750d347c.tar.xz latinime-8ac3c65b00d0470218264784da77c378750d347c.zip |
Add version check to open binary dictionary.
Bug: 11073222
Change-Id: Iabae12b8f14a9da3cdc804dcc6af443cedeb3f99
Diffstat (limited to 'java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 7041df598..7107076cc 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -28,6 +28,7 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.utils.AsyncResultHolder; import com.android.inputmethod.latin.utils.CollectionUtils; import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor; +import com.android.inputmethod.latin.utils.StringUtils; import java.io.File; import java.util.ArrayList; @@ -128,6 +129,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { */ protected abstract boolean hasContentChanged(); + protected boolean isValidBinaryDictFormatVersion(final int formatVersion) { + return true; + } + + protected String getFileNameExtentionToOpenDict() { + return ""; + } + /** * Gets the dictionary update controller for the given filename. */ @@ -238,12 +247,18 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { public void run() { if (mDictionaryWriter == null) { mBinaryDictionary.close(); - final File file = new File(mContext.getFilesDir(), mFilename + "/" - + FormatSpec.TRIE_FILE_EXTENSION); + final File file = new File(mContext.getFilesDir(), mFilename); + file.delete(); BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(), DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap()); + // We have 'fileToOpen' in addition to 'file' for the v4 dictionary format + // where 'file' is a directory, and 'fileToOpen' is a normal file. + final File fileToOpen = new File(mContext.getFilesDir(), mFilename + + getFileNameExtentionToOpenDict()); + // TODO: Make BinaryDictionary's constructor be able to accept filename + // without extension. mBinaryDictionary = new BinaryDictionary( - file.getAbsolutePath(), 0 /* offset */, file.length(), + fileToOpen.getAbsolutePath(), 0 /* offset */, fileToOpen.length(), true /* useFullEditDistance */, null, mDictType, mIsUpdatable); } else { mDictionaryWriter.clear(); @@ -482,8 +497,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { + mFilenameDictionaryUpdateController.mLastUpdateTime); } - final File file = new File(mContext.getFilesDir(), mFilename + "/" - + FormatSpec.TRIE_FILE_EXTENSION); + final File file = new File(mContext.getFilesDir(), mFilename + + getFileNameExtentionToOpenDict()); final String filename = file.getAbsolutePath(); final long length = file.length(); @@ -526,8 +541,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { loadDictionaryAsync(); mDictionaryWriter.write(mFilename, getHeaderAttributeMap()); } else { - if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary()) { + if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary() + || !isValidBinaryDictFormatVersion(mBinaryDictionary.getFormatVersion())) { final File file = new File(mContext.getFilesDir(), mFilename); + file.delete(); BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(), DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap()); } else { @@ -623,8 +640,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { // load the shared dictionary. loadBinaryDictionary(); } - if (mBinaryDictionary != null && !mBinaryDictionary.isValidDictionary()) { - // Binary dictionary is not valid. Regenerate the dictionary file. + if (mBinaryDictionary != null && !(mBinaryDictionary.isValidDictionary() + && isValidBinaryDictFormatVersion( + mBinaryDictionary.getFormatVersion()))) { + // Binary dictionary or its format version is not valid. Regenerate the + // dictionary file. mFilenameDictionaryUpdateController.mLastUpdateTime = time; writeBinaryDictionary(); loadBinaryDictionary(); |